diff --git a/media/attribution.js b/media/attribution.js
index e0915868..5ed792f4 100644
--- a/media/attribution.js
+++ b/media/attribution.js
@@ -19726,6 +19726,23 @@ const attributionData = {
"youira"
]
},
+ {
+ prefix: "./media/characters/poptart/",
+ files: [
+ { name: "front.svg", source: null },
+ { name: "back.svg", source: null },
+ { name: "front-nsfw.svg", source: null, nsfw: true },
+ { name: "back-nsfw.svg", source: null, nsfw: true },
+ { name: "hand.svg", source: null },
+ { name: "foot.svg", source: null },
+ ],
+ authors: [
+ "carifoxleopard"
+ ],
+ owners: [
+ "ovenotter"
+ ]
+ },
//characters
{
prefix: "./media/fiction/halo/halo/",
@@ -27447,6 +27464,10 @@ const attributionData = {
"name": "youira",
"url": "https://www.furaffinity.net/user/youira"
},
+ "carifoxleopard": {
+ "name": "CariFoxleopard",
+ "url": "https://www.furaffinity.net/user/carifoxleopard/"
+ },
}
}
diff --git a/media/characters/poptart/back-nsfw.svg b/media/characters/poptart/back-nsfw.svg
new file mode 100644
index 00000000..b5496fe3
--- /dev/null
+++ b/media/characters/poptart/back-nsfw.svg
@@ -0,0 +1,585 @@
+
+
+
diff --git a/media/characters/poptart/back.svg b/media/characters/poptart/back.svg
new file mode 100644
index 00000000..f5030009
--- /dev/null
+++ b/media/characters/poptart/back.svg
@@ -0,0 +1,718 @@
+
+
+
diff --git a/media/characters/poptart/foot.svg b/media/characters/poptart/foot.svg
new file mode 100644
index 00000000..f32d3d38
--- /dev/null
+++ b/media/characters/poptart/foot.svg
@@ -0,0 +1,319 @@
+
+
+
diff --git a/media/characters/poptart/front-nsfw.svg b/media/characters/poptart/front-nsfw.svg
new file mode 100644
index 00000000..835ac817
--- /dev/null
+++ b/media/characters/poptart/front-nsfw.svg
@@ -0,0 +1,1045 @@
+
+
+
diff --git a/media/characters/poptart/front.svg b/media/characters/poptart/front.svg
new file mode 100644
index 00000000..0d895ef4
--- /dev/null
+++ b/media/characters/poptart/front.svg
@@ -0,0 +1,1103 @@
+
+
+
diff --git a/media/characters/poptart/hand.svg b/media/characters/poptart/hand.svg
new file mode 100644
index 00000000..59a8e9a6
--- /dev/null
+++ b/media/characters/poptart/hand.svg
@@ -0,0 +1,353 @@
+
+
+
diff --git a/presets/characters.js b/presets/characters.js
index b0c792b5..9cee3f3e 100644
--- a/presets/characters.js
+++ b/presets/characters.js
@@ -53899,6 +53899,73 @@ characterMakers.push(() => makeCharacter(
]
))
+characterMakers.push(() => makeCharacter(
+ { name: "Poptart", species: ["red-panda", "husky"], tags: ["anthro"] },
+ {
+ front: {
+ height: math.unit(6, "feet"),
+ weight: math.unit(150, "lb"),
+ name: "Front",
+ image: {
+ source: "./media/characters/poptart/front.svg",
+ extra: 615/583,
+ bottom: 23/638
+ }
+ },
+ back: {
+ height: math.unit(6, "feet"),
+ weight: math.unit(150, "lb"),
+ name: "Back",
+ image: {
+ source: "./media/characters/poptart/back.svg",
+ extra: 617/584,
+ bottom: 22/639
+ }
+ },
+ frontNsfw: {
+ height: math.unit(6, "feet"),
+ weight: math.unit(150, "lb"),
+ name: "Front (NSFW)",
+ image: {
+ source: "./media/characters/poptart/front-nsfw.svg",
+ extra: 615/583,
+ bottom: 23/638
+ }
+ },
+ backNsfw: {
+ height: math.unit(6, "feet"),
+ weight: math.unit(150, "lb"),
+ name: "Back (NSFW)",
+ image: {
+ source: "./media/characters/poptart/back-nsfw.svg",
+ extra: 617/584,
+ bottom: 22/639
+ }
+ },
+ hand: {
+ height: math.unit(1.14, "feet"),
+ name: "Hand",
+ image: {
+ source: "./media/characters/poptart/hand.svg"
+ }
+ },
+ foot: {
+ height: math.unit(1.5, "feet"),
+ name: "Foot",
+ image: {
+ source: "./media/characters/poptart/foot.svg"
+ }
+ },
+ },
+ [
+ {
+ name: "Normal",
+ height: math.unit(6, "feet"),
+ default: true
+ },
+ ]
+))
+
//characters
function makeCharacters() {
diff --git a/scripts/illustrator.jsx b/scripts/illustrator.jsx
new file mode 100644
index 00000000..9271b0c2
--- /dev/null
+++ b/scripts/illustrator.jsx
@@ -0,0 +1,103 @@
+var doc = app.activeDocument;
+
+var layers = doc.layers;
+
+var traces = []
+
+settings = [
+ {
+ name: "Light",
+ color: 0x4d,
+ threshold: 128
+ },
+ {
+ name: "Medium",
+ color: 0x33,
+ threshold: 96
+ },
+ {
+ name: "Dark",
+ color: 0x1a,
+ threshold: 64
+ },
+ {
+ name: "Black",
+ color: 0x00,
+ threshold: 128
+ }
+]
+
+for (var j=0; j= 0) {
+ candidate.remove()
+ break
+ }
+}
+
+for (var i=0; i= 0) {
+ layer = candidate;
+ break;
+ }
+ }
+
+ var raster = layer.pageItems[0]
+ var pluginRef = raster.trace()
+ var trace = pluginRef.tracing
+ traces.push(trace)
+ var options = trace.tracingOptions
+
+ options.tracingMode = TracingModeType.TRACINGMODEBLACKANDWHITE
+ options.threshold = item.threshold
+ options.ignoreWhite = true
+ options.noiseFidelity = 10
+ options.corderFidelity = 0.5
+ options.pathFidelity = 75
+ options.tracingMethod = TracingMethodType.TRACINGMETHODABUTTING
+ options.snapCurvesToLines = false
+
+ traced = trace.expandTracing();
+
+ traces.push(traced);
+
+ var toSet = []
+
+ for (var j=0; j < traced.pathItems.length; j++) {
+ toSet.push(traced.pathItems[j])
+ }
+
+ for (var j=0; j < traced.compoundPathItems.length; j++) {
+ for (var k=0; k < traced.compoundPathItems[j].pathItems.length; k++)
+ {
+ toSet.push(traced.compoundPathItems[j].pathItems[k])
+ }
+ }
+
+ for (var j=0; j< toSet.length; j++) {
+ var thing = toSet[j]
+
+ var color = new RGBColor()
+
+ color.red = item.color
+ color.green = item.color
+ color.blue = item.color
+
+ thing.fillColor = color
+ }
+}
+
+for (var i = 0; i < traces.length; i++) {
+ traces[i].selected = true
+}
+
+app.executeMenuCommand("group")
+
+doc.fitArtboardToSelectedArt(0)