diff --git a/data/images/masks/Corners.png b/data/images/masks/Corners.png
new file mode 100644
index 00000000..49c14785
Binary files /dev/null and b/data/images/masks/Corners.png differ
diff --git a/data/scripts/main.js b/data/scripts/main.js
index 537de87a..f73a87a0 100644
--- a/data/scripts/main.js
+++ b/data/scripts/main.js
@@ -13,10 +13,11 @@ function testFunction() {
/* Initiate! */
window.onload = initiate;
function initiate() {
+ window.version = {}
window.cardWidth = 750;
window.cardHeight = 1050;
window.frameList = new Array();
- window.maskNameList = ["Right Half", "Full", "Title", "Type", "Rules Text", "Pinline", "Frame", "Border"];
+ window.maskNameList = ["Right Half", "Corners", "Full", "Title", "Type", "Rules Text", "Pinline", "Frame", "Border"];
window.maskList = [];
window.selectedFrame = -1;
window.selectedMask = "";
@@ -32,12 +33,46 @@ function initiate() {
window.displayContext = displayCanvas.getContext("2d");
newCanvas("frameMask");
newCanvas("frameFinal");
+ newCanvas("text");
+ newCanvas("line");
+ newCanvas("paragraph");
+ newCanvas("bottomInfo");
+ newCanvas("setSymbol");
+ newCanvas("watermark");
+ newCanvas("transparent");
+ newCanvas("crop");
+ newCanvas("temp");
newCanvas("cardFinal");
+ //Mana symbol Array setup
+ window.manaSymbolCodeList = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "w", "u", "b", "r", "g", "2w", "2u", "2b", "2r", "2g", "pw", "pu", "pb", "pr", "pg", "wu", "wb", "ub", "ur", "br", "bg", "rg", "rw", "gw", "gu", "x", "s", "c", "t","untap", "e", "y", "z", "1/2", "inf", "chaos", "plane", "l+", "l-", "l0", "oldtap", "artistbrush", "bar"];
+ window.manaSymbolImageList = [];
+ //Manually create a few important images
+ window.cardArt = new Image();
+ window.setSymbol = new Image();
+ window.watermark = new Image();
+ cardArt.crossOrigin = "anonymous";
+ setSymbol.crossOrigin = "anonymous";
+ watermark.crossOrigin = "anonymous";
+ cardArt.onload = function() {
+ cardImageUpdated();
+ }
+ setSymbol.onload = function() {
+ updateSetSymbol();
+ }
+ watermark.onload = function() {
+ updateWatermark();
+ }
+ //Load the mana symbol images
+ loadManaSymbolImages();
//Loads up anything that uses Sortable.js
var sortable = Sortable.create(cardMaster, {animation: 150, ghostClass: "cardMasterElementMoving"});
+ //Other little things
+ window.date = new Date()
+ document.getElementById("inputInfoNumber").value = date.getFullYear()
+ // randomSet(false)
//initiation is complete, ready to load image data
- loadImageCSV();
- console.log("init done")
+ console.log("init done, time to set the card version");
+ changeVersionTo("m15");
}
@@ -51,14 +86,13 @@ function loadImageCSV() {
var splitIndividualImageCSV = splitImageCSV[i].split(",");
frameList[frameList.length] = new frameImage(splitIndividualImageCSV[0], "data/images/" + splitIndividualImageCSV[1], splitIndividualImageCSV[2]);
}
- console.log("frame list loaded");
for (var i = 0; i < frameList.length; i++) {
- // frameList[i].framePickerElement(document.getElementById("framePicker"));
document.getElementById("framePicker").innerHTML += frameList[i].framePickerElement();
}
//I don't like these here, because even though they run, it doesn't populate the mask options
// document.getElementsByClassName("frameOption")[0].classList.add("frameOptionSelected");
// selectedMask = document.getElementsByClassName("frameOption")[0].id.replace("frameIndex", "");
+ console.log("image csv loaded, happy card conjuring!");
setTimeout(testFunction, 500); //deleteme
}
}
@@ -89,7 +123,7 @@ class frameImage {
}
}
cardMasterElement(targetMask) {
- return "
" + this.displayName + " (" + targetMask + ")x
";
+ return "
" + this.displayName + " (" + targetMask + ")x
";
}
framePickerElement(targetElement) {
return "
";
@@ -174,23 +208,103 @@ function cardMasterUpdated() {
frameMaskContext.drawImage(frameToDraw.image, frameToDraw.xList[maskIndex], frameToDraw.yList[maskIndex], frameToDraw.widthList[maskIndex], frameToDraw.heightList[maskIndex]);
frameFinalContext.drawImage(frameMaskCanvas, 0, 0, cardWidth, cardHeight);
}
- cardImageUpdated();
+ updateBottomInfoCanvas();
}
/* Overall card stuff */
function cardImageUpdated() {
+ // //clear it
+// cardContext.fillStyle = "black"
+// cardContext.fillRect(0, 0, cardWidth, cardHeight)
+// //draw the art, frame, text, mana symbols, set symbol, watermark...
+
+
+// //clear the corners
+ //Clear the canvas
cardFinalContext.clearRect(0, 0, cardWidth, cardHeight);
displayContext.clearRect(0, 0, cardWidth, cardHeight);
+ //Draw the art, frame, text, bottom info, mana cost, watermark, and set symbol
+ cardFinalContext.drawImage(cardArt, version.artX + getValue("inputCardArtX"), version.artY + getValue("inputCardArtY"), cardArt.width * getValue("inputCardArtZoom") / 100, cardArt.height * getValue("inputCardArtZoom") / 100)
cardFinalContext.drawImage(frameFinalCanvas, 0, 0, cardWidth, cardHeight);
+ cardFinalContext.drawImage(textCanvas, 0, 0, cardWidth, cardHeight);
+ cardFinalContext.drawImage(bottomInfoCanvas, 0, 0, cardWidth, cardHeight);
+ cardFinalContext.drawManaCost(document.getElementById("inputManaCost").value, version.manaCostX, version.manaCostY, version.manaCostDiameter, version.manaCostDistance, version.manaCostDirection)
+ cardFinalContext.drawImage(watermarkCanvas, 0, 0, cardWidth, cardHeight)
+ cardFinalContext.drawImage(setSymbolCanvas, 0, 0, cardWidth, cardHeight)
+ //Clear the corners
+ cardFinalContext.globalCompositeOperation = "destination-out"
+ cardFinalContext.drawImage(maskList[1], 0, 0, cardWidth, cardHeight)
+ cardFinalContext.globalCompositeOperation = "source-over"
+ //Copy it to the visible canvas
displayContext.drawImage(cardFinalCanvas, 0, 0, cardWidth, cardHeight);
}
+/* Loading/manipulating card versions */
+function changeVersionTo(versionToChangeTo) {
+ loadScript("data/versions/" + versionToChangeTo + ".js")
+}
+function finishChangingVersion() {
+ for (var i = 0; i < version.textList.length; i ++) {
+ document.getElementById("inputWhichTextTabs").innerHTML += "
" + version.textList[i][0] + "
"
+ if (i == 0) {
+ document.getElementsByClassName("textTabButton")[0].classList.add("activeTextTab")
+ }
+ }
+ console.log("version changed, time to load the image csv")
+ loadImageCSV();
+}
+
+
+/* Text functions! */
+function textTabFunction(event, target) {
+ var textTabButtons = document.getElementsByClassName("textTabButton")
+ for (var i = 0; i < textTabButtons.length; i++) {
+ textTabButtons[i].classList.remove("activeTextTab")
+ }
+ event.target.classList.add("activeTextTab")
+ for (var i = 0; i < version.textList.length; i ++) {
+ if (version.textList[i][0] == target.replace("option", "")) {
+ whichTextIndex = i
+ document.getElementById("inputText").value = version.textList[whichTextIndex][1]
+ }
+
+ }
+}
+//Changes the textarea content to whichever text is currently selected for editing
+var whichTextIndex = 0
+function changeWhichText() {
+ for (var i = 0; i < version.textList.length; i ++) {
+ if (version.textList[i][0] == document.getElementById("inputWhichText").value) {
+ whichTextIndex = i
+ }
+ }
+ document.getElementById("inputText").value = version.textList[whichTextIndex][1]
+}
+function updateText() {
+ version.textList[whichTextIndex][1] = document.getElementById("inputText").value
+ textContext.clearRect(0, 0, cardWidth, cardHeight)
+ for (var i = 0; i < version.textList.length; i ++) {
+ textContext.writeText(version.textList[i][1], version.textList[i][2], version.textList[i][3], version.textList[i][4], version.textList[i][5], version.textList[i][6], version.textList[i][7], version.textList[i][8], version.textList[i][9])
+ }
+ cardImageUpdated()
+}
+
+
+/* functions for all the little parts of the care */
+function updateBottomInfoCanvas() {
+ window[version.bottomInfoFunction]()
+}
+
+
/* Misc convenient functions */
function scale(input) {
return input * cardWidth / 750;
}
+function getValue(elementId) {
+ return parseFloat(document.getElementById(elementId).value)
+}
/* Functions that make stuff */
@@ -233,10 +347,10 @@ function loadScript(scriptPath){
// //Define some variables
// var cardWidth = 750, cardHeight = 1050
// var version = {}
-// var date = new Date()
+
// var initiated = false
// var suggestedColor = "White"
-// document.getElementById("inputInfoNumber").value = date.getFullYear()
+
// //Make all the canvases and their contexts
// var mainCanvas = document.getElementById("mainCanvas")
// mainCanvas.width = cardWidth
@@ -426,73 +540,71 @@ function loadScript(scriptPath){
// updateTextCanvas()
// }
// }
-// //figures out the placing of the set symbol
-// function updateSetSymbolCanvas() {
-// setSymbolContext.clearRect(0, 0, cardWidth, cardHeight)
-// var setSymbolWidth, setSymbolHeight, setSymbolX, setSymbolY
-// if (version.setSymbolWidth / version.setSymbolHeight < setSymbol.width / setSymbol.height) {
-// //wider
-// setSymbolWidth = version.setSymbolWidth
-// setSymbolHeight = version.setSymbolWidth / setSymbol.width * setSymbol.height
-// setSymbolX = version.setSymbolRight - setSymbolWidth
-// setSymbolY = version.setSymbolVertical - setSymbolHeight / 2
-// } else {
-// //taller
-// setSymbolHeight = version.setSymbolHeight
-// setSymbolWidth = version.setSymbolHeight / setSymbol.height * setSymbol.width
-// setSymbolX = version.setSymbolRight - setSymbolWidth
-// setSymbolY = version.setSymbolVertical - setSymbolHeight / 2
-// }
-// setSymbolContext.drawImage(setSymbol, setSymbolX, setSymbolY, setSymbolWidth, setSymbolHeight)
-// updateCardCanvas()
-// }
-// function updateWatermarkCanvas() {
-// if (document.getElementById("inputWatermarkPrimary").value != "none") {
-// watermarkContext.clearRect(0, 0, cardWidth, cardHeight)
-// var watermarkX, watermarkY, watermarkWidth, watermarkHeight
-// if (version.watermarkWidth / version.watermarkHeight < watermark.width / watermark.height) {
-// //wider
-// watermarkWidth = version.watermarkWidth
-// watermarkHeight = version.watermarkWidth / watermark.width * watermark.height
-// watermarkX = cardWidth / 2 - watermarkWidth / 2
-// watermarkY = version.watermarkY - watermarkHeight / 2
-// } else {
-// //taller
-// watermarkHeight = version.watermarkHeight
-// watermarkWidth = version.watermarkHeight / watermark.height * watermark.width
-// watermarkX = cardWidth / 2 - watermarkWidth / 2
-// watermarkY = version.watermarkY - watermarkHeight / 2
-// }
-// watermarkContext.drawImage(watermark, watermarkX, watermarkY, watermarkWidth, watermarkHeight)
-// watermarkContext.globalCompositeOperation = "source-in"
-// if (document.getElementById("inputWatermarkPrimary").value != "default") {
-// watermarkContext.fillStyle = document.getElementById("inputWatermarkPrimary").value
-// watermarkContext.fillRect(0, 0, cardWidth, cardHeight)
-// }
-// if (document.getElementById("inputWatermarkSecondary").value != "none") {
-// watermarkContext.globalCompositeOperation = "source-atop"
-// tempContext.clearRect(0, 0, cardWidth, cardHeight)
-// tempContext.drawImage(window[nameArray[nameArray.indexOf("noneMaskSecondary")]].image, 0, 0, cardWidth, cardHeight)
-// tempContext.globalCompositeOperation = "source-in"
-// if (document.getElementById("inputWatermarkSecondary").value == "default") {
-// tempContext.drawImage(watermark, watermarkX, watermarkY, watermarkWidth, watermarkHeight)
-// } else {
-// tempContext.fillStyle = document.getElementById("inputWatermarkSecondary").value
-// tempContext.fillRect(0, 0, cardWidth, cardHeight)
-// }
-// tempContext.globalCompositeOperation = "source-over"
-// watermarkContext.drawImage(tempCanvas, 0, 0, cardWidth, cardHeight)
-// }
-// watermarkContext.globalCompositeOperation = "source-over"
-// } else {
-// watermarkContext.clearRect(0, 0, cardWidth, cardHeight)
-// }
-// updateCardCanvas()
-// }
+//figures out the placing of the set symbol
+function updateSetSymbol() {
+ setSymbolContext.clearRect(0, 0, cardWidth, cardHeight)
+ var setSymbolWidth, setSymbolHeight, setSymbolX, setSymbolY
+ if (version.setSymbolWidth / version.setSymbolHeight < setSymbol.width / setSymbol.height) {
+ //wider
+ setSymbolWidth = version.setSymbolWidth
+ setSymbolHeight = version.setSymbolWidth / setSymbol.width * setSymbol.height
+ setSymbolX = version.setSymbolRight - setSymbolWidth
+ setSymbolY = version.setSymbolVertical - setSymbolHeight / 2
+ } else {
+ //taller
+ setSymbolHeight = version.setSymbolHeight
+ setSymbolWidth = version.setSymbolHeight / setSymbol.height * setSymbol.width
+ setSymbolX = version.setSymbolRight - setSymbolWidth
+ setSymbolY = version.setSymbolVertical - setSymbolHeight / 2
+ }
+ setSymbolContext.drawImage(setSymbol, setSymbolX, setSymbolY, setSymbolWidth, setSymbolHeight)
+ cardImageUpdated()
+}
+function updateWatermark() {
+ if (document.getElementById("inputWatermarkPrimary").value != "none") {
+ watermarkContext.clearRect(0, 0, cardWidth, cardHeight)
+ var watermarkX, watermarkY, watermarkWidth, watermarkHeight
+ if (version.watermarkWidth / version.watermarkHeight < watermark.width / watermark.height) {
+ //wider
+ watermarkWidth = version.watermarkWidth
+ watermarkHeight = version.watermarkWidth / watermark.width * watermark.height
+ watermarkX = cardWidth / 2 - watermarkWidth / 2
+ watermarkY = version.watermarkY - watermarkHeight / 2
+ } else {
+ //taller
+ watermarkHeight = version.watermarkHeight
+ watermarkWidth = version.watermarkHeight / watermark.height * watermark.width
+ watermarkX = cardWidth / 2 - watermarkWidth / 2
+ watermarkY = version.watermarkY - watermarkHeight / 2
+ }
+ watermarkContext.drawImage(watermark, watermarkX, watermarkY, watermarkWidth, watermarkHeight)
+ watermarkContext.globalCompositeOperation = "source-in"
+ if (document.getElementById("inputWatermarkPrimary").value != "default") {
+ watermarkContext.fillStyle = document.getElementById("inputWatermarkPrimary").value
+ watermarkContext.fillRect(0, 0, cardWidth, cardHeight)
+ }
+ if (document.getElementById("inputWatermarkSecondary").value != "none") {
+ watermarkContext.globalCompositeOperation = "source-atop"
+ tempContext.clearRect(0, 0, cardWidth, cardHeight)
+ tempContext.drawImage(maskList[0], 0, 0, cardWidth, cardHeight)
+ tempContext.globalCompositeOperation = "source-in"
+ if (document.getElementById("inputWatermarkSecondary").value == "default") {
+ tempContext.drawImage(watermark, watermarkX, watermarkY, watermarkWidth, watermarkHeight)
+ } else {
+ tempContext.fillStyle = document.getElementById("inputWatermarkSecondary").value
+ tempContext.fillRect(0, 0, cardWidth, cardHeight)
+ }
+ tempContext.globalCompositeOperation = "source-over"
+ watermarkContext.drawImage(tempCanvas, 0, 0, cardWidth, cardHeight)
+ }
+ watermarkContext.globalCompositeOperation = "source-over"
+ } else {
+ watermarkContext.clearRect(0, 0, cardWidth, cardHeight)
+ }
+ cardImageUpdated()
+}
// //Does the bottom info function! This can be different depending on the version.
-// function updateBottomInfoCanvas() {
-// window[version.bottomInfoFunction]()
-// }
+
// function updateCardCanvas() {
// if (!initiated) {
// return
@@ -554,9 +666,7 @@ function loadScript(scriptPath){
// return inputHeight / 1050 * cardHeight
// }
// //shortcut for parseInt(document.getElementById("").value)
-// function getValue(elementId) {
-// return parseFloat(document.getElementById(elementId).value)
-// }
+
// //Changes the version
// function changeVersionTo(versionToChangeTo) {
// loadScript("data/versions/" + versionToChangeTo + "Version.js")
@@ -617,173 +727,175 @@ function loadScript(scriptPath){
// cardMasterOpacityValue[version.typeOrder.indexOf(document.getElementById("inputImageTypeOpacity").value)] = document.getElementById("inputOpacityValue").value
// cardMasterUpdated()
// }
-// //Custom text function! This acts on any codes and makes things look nice :)
-// CanvasRenderingContext2D.prototype.writeText = function(text = "", textX = 0, textY = 0, textWidth = cardWidth, textHeight = cardHeight, textFont = "belerenbsc", inputTextSize = 38, textColor="black", other="") {
-// paragraphContext.clearRect(0, 0, cardWidth, cardHeight)
-// var textSize = inputTextSize
-// lineContext.font = textSize + "px " + textFont
-// lineContext.fillStyle = textColor
-// var otherParameters = other.split(",")
-// var outline, shadow = 0, oneLine = false, outlineWidth = 2, textAlign = "left", verticalAlign = true, lineSpace = 1
-// for (var i = 0; i < otherParameters.length; i ++) {
-// eval(otherParameters[i])
-// }
-// lineContext.strokeStyle = outline
-// lineContext.lineWidth = outlineWidth
-// var currentLineX = 0
-// var currentLineY = textY + textSize * 0.45
-// var uniqueSplitter = "9dn57gwbt4sh"
-// var splitString = text.replace(/ /g, uniqueSplitter + " " + uniqueSplitter).replace(/{/g, uniqueSplitter + "{").replace(/}/g, "}" + uniqueSplitter).split(uniqueSplitter)
-// splitString[splitString.length] = " "
-// var lastWordAdded = ""
-// for (var i = 0; i < splitString.length; i++) {
-// if (splitString[i] != "") {
-// var wordToWrite = splitString[i]
-// var finishLine = false
-// if (splitString[i].includes("{") && splitString[i].includes("}")) {
-// //It may be a code
-// wordToWrite = ""
-// possibleCodeLower = splitString[i].toLowerCase().replace("{", "").replace("}", "")
-// if (possibleCodeLower == "line" && !oneLine) {
-// finishLine = true
-// currentLineY += textSize * 0.35
-// } else if (possibleCodeLower == "linenospace" && ! oneLine) {
-// finishLine = true
-// } else if (possibleCodeLower == "bar" || possibleCodeLower == "flavor") {
-// finishLine = true
-// var barWidth = manaSymbolImageList[63].width
-// var barHeight = manaSymbolImageList[63].height
-// paragraphContext.drawImage(manaSymbolImageList[63], textX + textWidth / 2 - barWidth / 2, currentLineY + textSize * 0.6, barWidth, barHeight)
-// currentLineY += textSize * 0.8
-// if (possibleCodeLower == "flavor") {
-// lineContext.font = "italic " + (textSize - 3) + "px " + textFont
-// }
-// } else if (possibleCodeLower.includes("fontsize")) {
-// textSize += parseInt(possibleCodeLower.slice(8, possibleCodeLower.length))
-// lineContext.font = textSize + "px " + textFont
-// } else if (possibleCodeLower == "i") {
-// lineContext.font = "italic " + textSize + "px " + textFont
-// } else if (possibleCodeLower == "/i") {
-// lineContext.font = textSize + "px " + textFont
-// } else if (possibleCodeLower == "center") {
-// textAlign = "center"
-// } else if (possibleCodeLower == "right") {
-// textAlign = "right"
-// } else if (possibleCodeLower == "left") {
-// textAlign = "left"
-// } else if (possibleCodeLower.includes("up")) {
-// currentLineY -= (parseInt(possibleCodeLower.slice(2, possibleCodeLower.length)))
-// } else if (possibleCodeLower.includes("down")) {
-// currentLineY += (parseInt(possibleCodeLower.slice(4, possibleCodeLower.length)))
-// } else if (possibleCodeLower.includes("left")) {
-// currentLineX -= (parseInt(possibleCodeLower.slice(4, possibleCodeLower.length)))
-// } else if (possibleCodeLower.includes("right")) {
-// currentLineX += (parseInt(possibleCodeLower.slice(5, possibleCodeLower.length)))
-// } else if (possibleCodeLower == "artistbrush") {
-// var artistBrushWidth = textSize * 1.2
-// lineContext.drawImage(manaSymbolImageList[62], currentLineX, currentLineY - artistBrushWidth * 0.58, artistBrushWidth, artistBrushWidth * 13 / 21)
-// currentLineX += artistBrushWidth * 1.1
-// } else if (possibleCodeLower.includes("fontcolor")) {
-// lineContext.fillStyle = possibleCodeLower.slice(9, possibleCodeLower.length)
-// }else if (possibleCodeLower.includes("font")) {
-// textFont = possibleCodeLower.slice(5, possibleCodeLower.length)
-// lineContext.font = textSize + "px " + textFont
-// } else if (manaSymbolCodeList.includes(possibleCodeLower)) {
-// //THIS HAS TO BE THE LAST ONE
-// var manaSymbolDiameter = textSize * 0.77
-// lineContext.drawImage(manaSymbolImageList[manaSymbolCodeList.indexOf(possibleCodeLower)], currentLineX, currentLineY - manaSymbolDiameter * 0.95, manaSymbolDiameter, manaSymbolDiameter)
-// currentLineX += manaSymbolDiameter * 1.02
-// } else {
-// wordToWrite = splitString[i]
-// }
-// }
-// if (wordToWrite != "" || finishLine == true) {
-// //We're left with a word. Write it.
-// var currentWordWidth = lineContext.measureText(wordToWrite).width
-// if (i == splitString.length - 1) {
-// //forces the last artificially added space to be too wide, making sure the last line is drawn in.
-// currentWordWidth = textWidth + 1
-// }
-// if (currentLineX + currentWordWidth > textWidth || finishLine) {
-// //Finish the line
-// if (oneLine && i != splitString.length - 1 && inputTextSize > 1) {
-// lineContext.clearRect(0, 0, cardWidth, cardHeight)
-// this.writeText(text, textX, textY, textWidth, textHeight, textFont, inputTextSize - 1, textColor, other)
-// return
-// }
-// var alignAdjust = 0
-// if (textAlign == "center" || textAlign == "right") {
-// if (lastWordAdded == " ") {
-// currentLineX -= textContext.measureText(" ").width
-// }
-// if (textAlign == "center") {
-// alignAdjust = textWidth / 2 - currentLineX / 2 + textX
-// } else if (textAlign == "right") {
-// alignAdjust = textWidth + textX - currentLineX
-// }
-// } else {
-// alignAdjust += textX
-// }
-// paragraphContext.drawImage(lineCanvas, 0 + alignAdjust, 0, cardWidth, cardHeight)
-// lineContext.clearRect(0, 0, cardWidth, cardHeight)
-// currentLineY += textSize * lineSpace
-// currentLineX = 0
-// if (wordToWrite == " ") {
-// currentWordWidth = 0
-// }
-// }
-// //Whether or not the current line is finished, write to it.
-// if (shadow > 0) {
-// lineContext.fillText(wordToWrite, currentLineX + shadow, currentLineY + shadow)
-// }
-// if (outline != undefined) {
-// lineContext.strokeText(wordToWrite, currentLineX, currentLineY)
-// }
-// lineContext.fillText(wordToWrite, currentLineX, currentLineY)
-// currentLineX += currentWordWidth
-// lastWordAdded = wordToWrite
-// }
-// }
-// }
-// verticalAdjust = 0
-// if (verticalAlign) {
-// verticalAdjust = (textHeight + textY - currentLineY + textSize) / 2
-// }
-// this.drawImage(paragraphCanvas, 0, 0 + verticalAdjust, cardWidth, cardHeight)
-// return "done"
-// }
-// //Loads up all the mana symbol images
-// function loadManaSymbolImages() {
-// for (var i = 0; i < manaSymbolCodeList.length; i++) {
-// manaSymbolImageList[i] = new Image()
-// manaSymbolImageList[i].src = "data/images/manaSymbols/" + i + ".png"
-// }
-// }
-// //Draws a mana cost
-// CanvasRenderingContext2D.prototype.drawManaCost = function(text, symbolsX, symbolsY, diameter = 50, distance = -50, direction = "horizontal") {
-// var splitManaCost = text.replace(/{/g, " ").replace(/}/g, " ").split(" ")
-// var currentSymbolIndex = 0
-// var currentX = symbolsX
-// var currentY = symbolsY
-// for (var i = splitManaCost.length - 1; i >= 0; i --) {
-// if (manaSymbolCodeList.includes(splitManaCost[i])) {
-// if (Array.isArray(direction) && i < direction.length) {
-// currentX = direction[i][0]
-// currentY = direction[i][1]
-// }
-// this.fillStyle = "black"
-// this.beginPath()
-// this.arc(currentX + diameter / 2.1, currentY + diameter / 1.8, diameter / 2, 0, 2 * Math.PI, false)
-// this.fill()
-// this.drawImage(manaSymbolImageList[manaSymbolCodeList.indexOf(splitManaCost[i])], currentX, currentY, diameter, diameter)
-// if (direction == "horizontal") {
-// currentX += distance
-// } else if (direction == "vertical") {
-// currentY += distance
-// }
-// }
-// }
-// }
+
+
+//Custom text function! This acts on any codes and makes things look nice :)
+CanvasRenderingContext2D.prototype.writeText = function(text = "", textX = 0, textY = 0, textWidth = cardWidth, textHeight = cardHeight, textFont = "belerenbsc", inputTextSize = 38, textColor="black", other="") {
+ paragraphContext.clearRect(0, 0, cardWidth, cardHeight)
+ var textSize = inputTextSize
+ lineContext.font = textSize + "px " + textFont
+ lineContext.fillStyle = textColor
+ var otherParameters = other.split(",")
+ var outline, shadow = 0, oneLine = false, outlineWidth = 2, textAlign = "left", verticalAlign = true, lineSpace = 1
+ for (var i = 0; i < otherParameters.length; i ++) {
+ eval(otherParameters[i])
+ }
+ lineContext.strokeStyle = outline
+ lineContext.lineWidth = outlineWidth
+ var currentLineX = 0
+ var currentLineY = textY + textSize * 0.45
+ var uniqueSplitter = "9dn57gwbt4sh"
+ var splitString = text.replace(/ /g, uniqueSplitter + " " + uniqueSplitter).replace(/{/g, uniqueSplitter + "{").replace(/}/g, "}" + uniqueSplitter).split(uniqueSplitter)
+ splitString[splitString.length] = " "
+ var lastWordAdded = ""
+ for (var i = 0; i < splitString.length; i++) {
+ if (splitString[i] != "") {
+ var wordToWrite = splitString[i]
+ var finishLine = false
+ if (splitString[i].includes("{") && splitString[i].includes("}")) {
+ //It may be a code
+ wordToWrite = ""
+ possibleCodeLower = splitString[i].toLowerCase().replace("{", "").replace("}", "")
+ if (possibleCodeLower == "line" && !oneLine) {
+ finishLine = true
+ currentLineY += textSize * 0.35
+ } else if (possibleCodeLower == "linenospace" && ! oneLine) {
+ finishLine = true
+ } else if (possibleCodeLower == "bar" || possibleCodeLower == "flavor") {
+ finishLine = true
+ var barWidth = manaSymbolImageList[63].width
+ var barHeight = manaSymbolImageList[63].height
+ paragraphContext.drawImage(manaSymbolImageList[63], textX + textWidth / 2 - barWidth / 2, currentLineY + textSize * 0.6, barWidth, barHeight)
+ currentLineY += textSize * 0.8
+ if (possibleCodeLower == "flavor") {
+ lineContext.font = "italic " + (textSize - 3) + "px " + textFont
+ }
+ } else if (possibleCodeLower.includes("fontsize")) {
+ textSize += parseInt(possibleCodeLower.slice(8, possibleCodeLower.length))
+ lineContext.font = textSize + "px " + textFont
+ } else if (possibleCodeLower == "i") {
+ lineContext.font = "italic " + textSize + "px " + textFont
+ } else if (possibleCodeLower == "/i") {
+ lineContext.font = textSize + "px " + textFont
+ } else if (possibleCodeLower == "center") {
+ textAlign = "center"
+ } else if (possibleCodeLower == "right") {
+ textAlign = "right"
+ } else if (possibleCodeLower == "left") {
+ textAlign = "left"
+ } else if (possibleCodeLower.includes("up")) {
+ currentLineY -= (parseInt(possibleCodeLower.slice(2, possibleCodeLower.length)))
+ } else if (possibleCodeLower.includes("down")) {
+ currentLineY += (parseInt(possibleCodeLower.slice(4, possibleCodeLower.length)))
+ } else if (possibleCodeLower.includes("left")) {
+ currentLineX -= (parseInt(possibleCodeLower.slice(4, possibleCodeLower.length)))
+ } else if (possibleCodeLower.includes("right")) {
+ currentLineX += (parseInt(possibleCodeLower.slice(5, possibleCodeLower.length)))
+ } else if (possibleCodeLower == "artistbrush") {
+ var artistBrushWidth = textSize * 1.2
+ lineContext.drawImage(manaSymbolImageList[62], currentLineX, currentLineY - artistBrushWidth * 0.58, artistBrushWidth, artistBrushWidth * 13 / 21)
+ currentLineX += artistBrushWidth * 1.1
+ } else if (possibleCodeLower.includes("fontcolor")) {
+ lineContext.fillStyle = possibleCodeLower.slice(9, possibleCodeLower.length)
+ }else if (possibleCodeLower.includes("font")) {
+ textFont = possibleCodeLower.slice(5, possibleCodeLower.length)
+ lineContext.font = textSize + "px " + textFont
+ } else if (manaSymbolCodeList.includes(possibleCodeLower)) {
+ //THIS HAS TO BE THE LAST ONE
+ var manaSymbolDiameter = textSize * 0.77
+ lineContext.drawImage(manaSymbolImageList[manaSymbolCodeList.indexOf(possibleCodeLower)], currentLineX, currentLineY - manaSymbolDiameter * 0.95, manaSymbolDiameter, manaSymbolDiameter)
+ currentLineX += manaSymbolDiameter * 1.02
+ } else {
+ wordToWrite = splitString[i]
+ }
+ }
+ if (wordToWrite != "" || finishLine == true) {
+ //We're left with a word. Write it.
+ var currentWordWidth = lineContext.measureText(wordToWrite).width
+ if (i == splitString.length - 1) {
+ //forces the last artificially added space to be too wide, making sure the last line is drawn in.
+ currentWordWidth = textWidth + 1
+ }
+ if (currentLineX + currentWordWidth > textWidth || finishLine) {
+ //Finish the line
+ if (oneLine && i != splitString.length - 1 && inputTextSize > 1) {
+ lineContext.clearRect(0, 0, cardWidth, cardHeight)
+ this.writeText(text, textX, textY, textWidth, textHeight, textFont, inputTextSize - 1, textColor, other)
+ return
+ }
+ var alignAdjust = 0
+ if (textAlign == "center" || textAlign == "right") {
+ if (lastWordAdded == " ") {
+ currentLineX -= textContext.measureText(" ").width
+ }
+ if (textAlign == "center") {
+ alignAdjust = textWidth / 2 - currentLineX / 2 + textX
+ } else if (textAlign == "right") {
+ alignAdjust = textWidth + textX - currentLineX
+ }
+ } else {
+ alignAdjust += textX
+ }
+ paragraphContext.drawImage(lineCanvas, 0 + alignAdjust, 0, cardWidth, cardHeight)
+ lineContext.clearRect(0, 0, cardWidth, cardHeight)
+ currentLineY += textSize * lineSpace
+ currentLineX = 0
+ if (wordToWrite == " ") {
+ currentWordWidth = 0
+ }
+ }
+ //Whether or not the current line is finished, write to it.
+ if (shadow > 0) {
+ lineContext.fillText(wordToWrite, currentLineX + shadow, currentLineY + shadow)
+ }
+ if (outline != undefined) {
+ lineContext.strokeText(wordToWrite, currentLineX, currentLineY)
+ }
+ lineContext.fillText(wordToWrite, currentLineX, currentLineY)
+ currentLineX += currentWordWidth
+ lastWordAdded = wordToWrite
+ }
+ }
+ }
+ verticalAdjust = 0
+ if (verticalAlign) {
+ verticalAdjust = (textHeight + textY - currentLineY + textSize) / 2
+ }
+ this.drawImage(paragraphCanvas, 0, 0 + verticalAdjust, cardWidth, cardHeight)
+ return "done"
+}
+//Loads up all the mana symbol images
+function loadManaSymbolImages() {
+ for (var i = 0; i < manaSymbolCodeList.length; i++) {
+ manaSymbolImageList[i] = new Image()
+ manaSymbolImageList[i].src = "data/images/manaSymbols/" + i + ".png"
+ }
+}
+//Draws a mana cost
+CanvasRenderingContext2D.prototype.drawManaCost = function(text, symbolsX, symbolsY, diameter = 50, distance = -50, direction = "horizontal") {
+ var splitManaCost = text.replace(/{/g, " ").replace(/}/g, " ").split(" ")
+ var currentSymbolIndex = 0
+ var currentX = symbolsX
+ var currentY = symbolsY
+ for (var i = splitManaCost.length - 1; i >= 0; i --) {
+ if (manaSymbolCodeList.includes(splitManaCost[i])) {
+ if (Array.isArray(direction) && i < direction.length) {
+ currentX = direction[i][0]
+ currentY = direction[i][1]
+ }
+ this.fillStyle = "black"
+ this.beginPath()
+ this.arc(currentX + diameter / 2.1, currentY + diameter / 1.8, diameter / 2, 0, 2 * Math.PI, false)
+ this.fill()
+ this.drawImage(manaSymbolImageList[manaSymbolCodeList.indexOf(splitManaCost[i])], currentX, currentY, diameter, diameter)
+ if (direction == "horizontal") {
+ currentX += distance
+ } else if (direction == "vertical") {
+ currentY += distance
+ }
+ }
+ }
+}
// //Changes the textarea content to whichever text is currently selected for editing
// var whichTextIndex = 0
// function changeWhichText() {
@@ -795,141 +907,141 @@ function loadScript(scriptPath){
// document.getElementById("inputText").value = version.textList[whichTextIndex][1]
// }
// //Removes all the white pixels in an image
-// var whiteThreshold = 250
-// function whiteToTransparent(targetImage, source = targetImage.src) {
-// //Create image, size canvas, draw image
-// var imgTempTarget = new Image()
-// imgTempTarget.crossOrigin = "anonymous"
-// imgTempTarget.src = source
-// imgTempTarget.onload = function() {
-// if (imgTempTarget.width > 0 && imgTempTarget.height > 0) {
-// transparentCanvas.width = imgTempTarget.width
-// transparentCanvas.height = imgTempTarget.height
-// transparentContext.drawImage(imgTempTarget, 0, 0)
-// //declare variables
-// var width = transparentCanvas.width
-// var height = transparentCanvas.height
-// var imageData = transparentContext.getImageData(0, 0, transparentCanvas.width, transparentCanvas.height)
-// var x, y, index
-// //Go through every pixel and
-// for (y = 0; y < height; y++) {
-// for (x = 0; x < width; x++) {
-// index = (y * width + x) * 4
-// if (imageData.data[index] >= whiteThreshold && imageData.data[index + 1] >= whiteThreshold && imageData.data[index + 2] >= whiteThreshold) {
-// imageData.data[index + 3] = 0
-// }
-// }
-// }
-// transparentContext.clearRect(0, 0, width, height)
-// transparentContext.putImageData(imageData, 0, 0)
-// targetImage.src = transparentCanvas.toDataURL()
-// autocrop(targetImage)
-// }
-// }
-// }
-// //Removes all the whitespace in an image
-// function autocrop(targetImage, source = targetImage.src) {
-// //Create image, size canvas, draw image
-// var imgTempTarget = new Image()
-// imgTempTarget.crossOrigin = "anonymous"
-// imgTempTarget.src = source
-// imgTempTarget.onload = function() {
-// if (imgTempTarget.width > 0 && imgTempTarget.height > 0) {
-// cropCanvas.width = imgTempTarget.width
-// cropCanvas.height = imgTempTarget.height
-// cropContext.drawImage(imgTempTarget, 0, 0)
-// //declare variables
-// var width = cropCanvas.width
-// var height = cropCanvas.height
-// var pix = {x:[], y:[]}
-// var imageData = cropContext.getImageData(0, 0, cropCanvas.width, cropCanvas.height)
-// var x, y, index
-// if (imageData.data.length > 4) {
-// //Go through every pixel and
-// for (y = 0; y < height; y++) {
-// for (x = 0; x < width; x++) {
-// //(y * width + x) * 4 + 3 calculates the index at which the alpha value of the pixel at x, y is given
-// index = (y * width + x) * 4 + 3
-// if (imageData.data[index] > 0) {
-// //pix is the image object that stores two arrays of x and y coordinates. These stored coordinates are all the visible pixels
-// pix.x.push(x)
-// pix.y.push(y)
-// }
-// }
-// }
-// //sorts the arrays numerically
-// pix.x.sort(function(a,b){return a-b})
-// pix.y.sort(function(a,b){return a-b})
-// var n = pix.x.length - 1
-// //Finds the difference between the leftmost and rightmost visible pixels, and the topmost and bottommost pixels, cuts out a section of the canvas
-// width = pix.x[n] - pix.x[0]
-// height = pix.y[n] - pix.y[0]
-// var cropped = cropContext.getImageData(pix.x[0], pix.y[0], width + 1, height + 1)
-// //Resizes the canvas and draws cropped image
-// cropCanvas.width = width + 1
-// cropCanvas.height = height + 1
-// cropContext.putImageData(cropped, 0, 0)
-// //Saves the newly cropped image to the given image
-// targetImage.src = cropCanvas.toDataURL()
-// }
-// }
-// }
-// }
+var whiteThreshold = 250
+function whiteToTransparent(targetImage, source = targetImage.src) {
+ //Create image, size canvas, draw image
+ var imgTempTarget = new Image()
+ imgTempTarget.crossOrigin = "anonymous"
+ imgTempTarget.src = source
+ imgTempTarget.onload = function() {
+ if (imgTempTarget.width > 0 && imgTempTarget.height > 0) {
+ transparentCanvas.width = imgTempTarget.width
+ transparentCanvas.height = imgTempTarget.height
+ transparentContext.drawImage(imgTempTarget, 0, 0)
+ //declare variables
+ var width = transparentCanvas.width
+ var height = transparentCanvas.height
+ var imageData = transparentContext.getImageData(0, 0, transparentCanvas.width, transparentCanvas.height)
+ var x, y, index
+ //Go through every pixel and
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ index = (y * width + x) * 4
+ if (imageData.data[index] >= whiteThreshold && imageData.data[index + 1] >= whiteThreshold && imageData.data[index + 2] >= whiteThreshold) {
+ imageData.data[index + 3] = 0
+ }
+ }
+ }
+ transparentContext.clearRect(0, 0, width, height)
+ transparentContext.putImageData(imageData, 0, 0)
+ targetImage.src = transparentCanvas.toDataURL()
+ autocrop(targetImage)
+ }
+ }
+}
+//Removes all the whitespace in an image
+function autocrop(targetImage, source = targetImage.src) {
+ //Create image, size canvas, draw image
+ var imgTempTarget = new Image()
+ imgTempTarget.crossOrigin = "anonymous"
+ imgTempTarget.src = source
+ imgTempTarget.onload = function() {
+ if (imgTempTarget.width > 0 && imgTempTarget.height > 0) {
+ cropCanvas.width = imgTempTarget.width
+ cropCanvas.height = imgTempTarget.height
+ cropContext.drawImage(imgTempTarget, 0, 0)
+ //declare variables
+ var width = cropCanvas.width
+ var height = cropCanvas.height
+ var pix = {x:[], y:[]}
+ var imageData = cropContext.getImageData(0, 0, cropCanvas.width, cropCanvas.height)
+ var x, y, index
+ if (imageData.data.length > 4) {
+ //Go through every pixel and
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ //(y * width + x) * 4 + 3 calculates the index at which the alpha value of the pixel at x, y is given
+ index = (y * width + x) * 4 + 3
+ if (imageData.data[index] > 0) {
+ //pix is the image object that stores two arrays of x and y coordinates. These stored coordinates are all the visible pixels
+ pix.x.push(x)
+ pix.y.push(y)
+ }
+ }
+ }
+ //sorts the arrays numerically
+ pix.x.sort(function(a,b){return a-b})
+ pix.y.sort(function(a,b){return a-b})
+ var n = pix.x.length - 1
+ //Finds the difference between the leftmost and rightmost visible pixels, and the topmost and bottommost pixels, cuts out a section of the canvas
+ width = pix.x[n] - pix.x[0]
+ height = pix.y[n] - pix.y[0]
+ var cropped = cropContext.getImageData(pix.x[0], pix.y[0], width + 1, height + 1)
+ //Resizes the canvas and draws cropped image
+ cropCanvas.width = width + 1
+ cropCanvas.height = height + 1
+ cropContext.putImageData(cropped, 0, 0)
+ //Saves the newly cropped image to the given image
+ targetImage.src = cropCanvas.toDataURL()
+ }
+ }
+ }
+}
// //The next several functions are all about loading images!
-// function uploadImage(event, destination) {
-// var input = event.target
-// var reader = new FileReader()
-// reader.onload = function() {
-// var dataURL = reader.result
-// destination.src = dataURL
-// }
-// reader.readAsDataURL(input.files[0])
-// }
-// var savedArtList = [], cardArtUrlList = [], cardArtArtistList = []
-// function inputCardArtName(cardArtNameInput) {
-// var xhttp = new XMLHttpRequest()
-// xhttp.onreadystatechange = function() {
-// if (this.readyState == 4 && this.status == 200) {
-// savedArtList = this.responseText.split('"art_crop":"')
-// savedArtList.splice(0, 1)
-// document.getElementById("inputCardArtNameNumber").max = savedArtList.length
-// document.getElementById("inputCardArtNameNumber").value = 1
-// for (i = 0; i < savedArtList.length; i ++) {
-// cardArtUrlList[i] = savedArtList[i].split('","border_crop":')[0]
-// }
-// for (i = 0; i < savedArtList.length; i ++) {
-// cardArtArtistList[i] = savedArtList[i].slice(savedArtList[i].indexOf('"artist":"') + 10, savedArtList[i].indexOf('","artist_ids":'))
-// }
-// inputCardArtNameNumber(1)
-// } else if (this.readyState == 4 && this.status == 404) {
-// alert("Sorry, but we can't seem to find any art for '" + cardArtNameInput + "'")
-// }
-// }
-// xhttp.open("GET", "https://api.scryfall.com/cards/search?order=released&unique=art&q=name%3D" + cardArtNameInput.replace(/ /g, "_"), true)
-// xhttp.send()
-// }
-// function inputCardArtNameNumber(cardArtNameNumberInput) {
-// cardArt.src = cardArtUrlList[cardArtNameNumberInput - 1]
-// document.getElementById("inputInfoArtist").value = cardArtArtistList[cardArtNameNumberInput - 1]
-// updateBottomInfoCanvas()
-// }
-// //Downloads the image!
-// function downloadCardImage(linkElement) {
-// if (document.getElementById("inputInfoArtist").value.replace(/ /g, "") != "") {
-// linkElement.download = version.textList[0][1].toLowerCase().replace(/ /g, "_") + ".png"
-// if (linkElement.download == ".png") {
-// linkElement.download = "card.png"
-// }
-// } else {
-// event.preventDefault()
-// alert("You must properly credit an artist before downloading")
-// }
-// var cardImageData = cardCanvas.toDataURL()
-// if (cardImageData == undefined) {
-// alert("Sorry, it seems that you cannot download your card. Please try using a different browser/device.")
-// }
-// linkElement.href = cardImageData
-// }
+function uploadImage(event, destination) {
+ var input = event.target
+ var reader = new FileReader()
+ reader.onload = function() {
+ var dataURL = reader.result
+ destination.src = dataURL
+ }
+ reader.readAsDataURL(input.files[0])
+}
+var savedArtList = [], cardArtUrlList = [], cardArtArtistList = []
+function inputCardArtName(cardArtNameInput) {
+ var xhttp = new XMLHttpRequest()
+ xhttp.onreadystatechange = function() {
+ if (this.readyState == 4 && this.status == 200) {
+ savedArtList = this.responseText.split('"art_crop":"')
+ savedArtList.splice(0, 1)
+ document.getElementById("inputCardArtNameNumber").max = savedArtList.length
+ document.getElementById("inputCardArtNameNumber").value = 1
+ for (i = 0; i < savedArtList.length; i ++) {
+ cardArtUrlList[i] = savedArtList[i].split('","border_crop":')[0]
+ }
+ for (i = 0; i < savedArtList.length; i ++) {
+ cardArtArtistList[i] = savedArtList[i].slice(savedArtList[i].indexOf('"artist":"') + 10, savedArtList[i].indexOf('","artist_ids":'))
+ }
+ inputCardArtNameNumber(1)
+ } else if (this.readyState == 4 && this.status == 404) {
+ alert("Sorry, but we can't seem to find any art for '" + cardArtNameInput + "'")
+ }
+ }
+ xhttp.open("GET", "https://api.scryfall.com/cards/search?order=released&unique=art&q=name%3D" + cardArtNameInput.replace(/ /g, "_"), true)
+ xhttp.send()
+}
+function inputCardArtNameNumber(cardArtNameNumberInput) {
+ cardArt.src = cardArtUrlList[cardArtNameNumberInput - 1]
+ // document.getElementById("inputInfoArtist").value = cardArtArtistList[cardArtNameNumberInput - 1]
+ // updateBottomInfoCanvas()
+}
+//Downloads the image!
+function downloadCardImage(linkElement) {
+ if (document.getElementById("inputInfoArtist").value.replace(/ /g, "") != "") {
+ linkElement.download = version.textList[0][1].toLowerCase().replace(/ /g, "_") + ".png"
+ if (linkElement.download == ".png") {
+ linkElement.download = "card.png"
+ }
+ } else {
+ event.preventDefault()
+ alert("You must properly credit an artist before downloading")
+ }
+ var cardImageData = cardCanvas.toDataURL()
+ if (cardImageData == undefined) {
+ alert("Sorry, it seems that you cannot download your card. Please try using a different browser/device.")
+ }
+ linkElement.href = cardImageData
+}
// //Toggles the visibility of tooltips
// function toggleTooltips(revealed = true) {
// var tooltipList = document.getElementsByClassName("tooltiptext")
@@ -986,30 +1098,7 @@ function loadScript(scriptPath){
// }
-// function tabFunction(event, section, target, specialFunction = "none") {
-// var tabButtons = document.getElementsByClassName("tabButton " + section)
-// for (var i = 0; i < tabButtons.length; i++) {
-// tabButtons[i].className = tabButtons[i].className.replace(" activeTab", "")
-// }
-// event.currentTarget.className += " activeTab"
-// if (specialFunction != "none") {
-// window[specialFunction](event, section, target)
-// } else {
-// var tabContents = document.getElementsByClassName("tabContent " + section)
-// for (var i = 0; i < tabContents.length; i++) {
-// tabContents[i].className = tabContents[i].className.replace(" displayed", "")
-// }
-// document.getElementById(target).className += " displayed"
-// }
-// }
-// function textTabFunction(event, section, target) {
-// for (var i = 0; i < version.textList.length; i ++) {
-// if (version.textList[i][0] == target.replace("option", "")) {
-// whichTextIndex = i
-// }
-// }
-// document.getElementById("inputText").value = version.textList[whichTextIndex][1]
-// }
+
diff --git a/data/scripts/setCodeList.js b/data/scripts/setCodeList.js
index beb3a4c0..25f6075c 100644
--- a/data/scripts/setCodeList.js
+++ b/data/scripts/setCodeList.js
@@ -35,7 +35,7 @@ var setCodeListSpecialOnly = ['MPS_KLD', 'MPS_AKH']
//Only Rare / Mythic
var setCodeListRareMythicOnly = ['SS2']
-randomSet(false)
+// randomSet(false)
function randomSet(updateHTML = true) {
var totalSetCount = setCodeListPreMythic.length + setCodeListPostMythic.length + setCodeListRareOnly.length + setCodeListMythicOnly.length + setCodeListSpecialOnly.length + setCodeListRareMythicOnly.length
var setIndex = Math.floor(Math.random() * (totalSetCount - 1))
diff --git a/data/site/newStyles.css b/data/site/newStyles.css
index 963f5cf3..777dcad3 100644
--- a/data/site/newStyles.css
+++ b/data/site/newStyles.css
@@ -240,21 +240,21 @@ footer a:hover {
/*WIP (or I'm too lazy to sort these)*/
.tabMenu {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(3em, 1fr));
+ grid-template-columns: repeat(auto-fit, minmax(8em, 1fr));
grid-auto-rows: min-content;
}
-.tabOption {
+.tabOption, .textTabButton {
font: 1.5em belerenbsc;
text-align: center;
background-color: var(--clear-light);
border: 1px solid var(--light-color);
transition: 0.5s;
}
-.tabOption:hover {
+.tabOption:hover, .textTabButton:hover {
background-color: var(--clear-mid);
transition: 0s;
}
-.tabOption.tabOptionSelected {
+.tabOption.tabOptionSelected, .textTabButton.activeTextTab {
background-color: var(--clear-dark);
}
.tabContent:not(.tabVisible) {
@@ -271,11 +271,12 @@ footer a:hover {
}
.cardMasterElement img {
max-height: 2em;
+ max-width: 2em;
position: absolute;
transform: translate(1em, -0.35em);
}
.cardmasterElement img.cardMasterElementMaskImage {
- transform: translate(3em, -0.35em);
+ transform: translate(3.5em, -0.35em);
}
.cardMasterElementMoving {
background-color: var(--clear-dark);
@@ -323,3 +324,29 @@ footer a:hover {
padding: 0.125em;
width: calc(100% - 1.4em);
}
+
+
+.textarea {
+ width: 100%;
+ min-height: 12em;
+ max-height: 36em;
+ resize: vertical;
+}
+.textTabButton {
+ font-size: 1em;
+}
+.textTab {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(6em, 1fr));
+ grid-auto-rows: min-content;
+}
+
+.input, .textarea, .button, .select {
+ font: 1em mplantin;
+ background-color: var(--light-color);
+ border: 1px solid #aaa;
+ border-radius: 0.2em;
+ padding: 0px 0.2em;
+ outline: none;
+ width: 100%;
+}
\ No newline at end of file
diff --git a/data/versions/m15.js b/data/versions/m15.js
new file mode 100644
index 00000000..f5514ef4
--- /dev/null
+++ b/data/versions/m15.js
@@ -0,0 +1,49 @@
+//============================================//
+// Card Conjurer, by Kyle Burton //
+//============================================//
+version.currentVersion = "m15"
+version.artX = scale(58)
+version.artY = scale(118)
+version.setSymbolRight = scale(693)
+version.setSymbolVertical = scale(620)
+version.setSymbolWidth = scale(77)
+version.setSymbolHeight = scale(42)
+version.bottomInfoFunction = "m15BottomInfo"
+version.manaCostX = scale(656)
+version.manaCostY = scale(62)
+version.manaCostDiameter = scale(36)
+version.manaCostDistance = scale(-38)
+version.manaCostDirection = "horizontal"
+version.rareStampX = scale(340)
+version.rareStampY = scale(965)
+version.rareStampWidth = scale(70)
+version.rareStampHeight = scale(38)
+version.watermarkWidth = scale(520)
+version.watermarkHeight = scale(250)
+version.watermarkY = scale(815)
+//Name, text, x, y, width, height, font, size, color, other
+version.textList = [
+ ["Title", "", scale(62), scale(87), scale(630), 0, "belerenb", 40, "black", "oneLine=true"],
+ ["Type", "", scale(60), scale(624), scale(630), 0, "belerenb", 34, "black", "oneLine=true"],
+ ["Rules Text", "", scale(63), scale(670), scale(624), scale(292), "mplantin", 38, "black", "lineSpace=0.97"],
+ ["Power Toughness", "", scale(590), scale(970), scale(110), 0, "belerenb", 39, "black", "oneLine=true,textAlign='center'"],
+ ["Flip PT", "", scale(588), scale(902), scale(100), 0, "belerenb", 28, "#666", "oneLine=true,textAlign='right'"]
+]
+
+function m15BottomInfo() {
+ //remember to ctrl+f for 'artistBrushWidth' and adjust that when fixing these values!
+ bottomInfoContext.clearRect(0, 0, cardWidth, cardHeight)
+ bottomInfoContext.writeText(document.getElementById("inputInfoNumber").value + " " + document.getElementById("inputInfoRarity").value + " *Not For Sale*", scale(46), scale(993), scale(329), 0, "gothammedium", 18, "white", "oneLine=true")
+ bottomInfoContext.writeText(document.getElementById("inputInfoSet").value + " \u00b7 " + document.getElementById("inputInfoLanguage").value + " {fontsize1}{font:belerenbsc}{artistBrush}" + document.getElementById("inputInfoArtist").value, scale(46), scale(1012), scale(375), 0, "gothammedium", 17, "white", "oneLine=true")
+ var copyrightShift = 0;
+ for (var i = 0; i < cardMaster.children.length; i++) {
+ if (frameList[parseInt(cardMaster.children[i].id.replace("frameIndex", ""))].image.src.includes("PT")) {
+ copyrightShift = 19;
+ }
+ }
+ bottomInfoContext.writeText("\u2122 & \u00a9 " + date.getFullYear() + " Wizards of the Coast", cardWidth / 2, scale(993 + copyrightShift), scale(322), 0, "mplantin", 17, "white", "oneLine=true,textAlign='right'")
+ cardImageUpdated()
+}
+// setTimeout(m15BottomInfo, 250)
+
+finishChangingVersion()
\ No newline at end of file
diff --git a/test.html b/test.html
index 9b4ad23b..20dd4380 100644
--- a/test.html
+++ b/test.html
@@ -22,20 +22,94 @@
Frame
Text
Art
+
Collector
+
Set Symbol
+
Watermark
-
+
+
+
+
- oh cool some text!
+
+
+
+
+
How To Use Text Codes
+
+ Remember to surround each code with curly brackets ("{" and "}"). The codes are not caps sensitive. The following is a list of available text codes and what they do:
+