diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3124a41 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +start_httpd.sh +lightttpd.conf \ No newline at end of file diff --git a/favicon.gif b/favicon.gif new file mode 100644 index 0000000..829a910 Binary files /dev/null and b/favicon.gif differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..47ca8b3 --- /dev/null +++ b/index.html @@ -0,0 +1,42 @@ + + +
+ +Mix your Neomoji parts as you like.
+Please active JavaScript to use the Neomojimixer!
+To save right click and choose "Save image as..."
+ +Neomojis are from the following sources:
+ +Sourcecode on Codeberg: TODO: set link to repo! Neomoji Mixer
+
+
+
+
+
diff --git a/neomojimixer.css b/neomojimixer.css
new file mode 100644
index 0000000..df5a90d
--- /dev/null
+++ b/neomojimixer.css
@@ -0,0 +1,77 @@
+body {
+ font-size: 1em;
+}
+
+p#noJSmessage {
+ font-size:2em;
+ color: red;
+}
+
+.container {
+ position: realtive;
+ width: 256px;
+ height: 256px;
+}
+
+img.body {
+ position: absolute;
+}
+
+img.eyes {
+ position: absolute;
+}
+
+img.mouth {
+ position: absolute;
+}
+
+img.arms {
+ position: absolute;
+}
+
+#controls {
+ position:relative;
+ width: 256px;
+}
+
+button {
+ width: 25px;
+ height: 25px;
+}
+
+button#random {
+ width: 250px;
+}
+
+button#export {
+ width: 250px;
+}
+
+span.name {
+ display: inline-block;
+ width: 200px;
+ text-align: center;
+ background: #D3D3D3;
+ vertical-align: middle;
+}
+
+div#stats {
+ font-size: 0.5em;
+}
+
+canvas {
+ height: 300px;
+ width: 300px;
+}
+
+p#exportSaveMessage {
+ font-size: 0.5em;
+}
+
+input#fullNeomojiName {
+ width: 250px;
+}
+
+a.links {
+ color: black;
+}
\ No newline at end of file
diff --git a/neomojimixer.js b/neomojimixer.js
new file mode 100644
index 0000000..2ef4968
--- /dev/null
+++ b/neomojimixer.js
@@ -0,0 +1,230 @@
+//global variables
+
+//Arrays to hold the parts
+let eyes = [];
+let body = [];
+let mouth = [];
+let arms = [];
+
+//Index to easily find when to roll back to the first/last element in the list
+let inex_eyes = 0;
+let index_body = 0;
+let index_mouth = 0;
+let index_arms = 0;
+
+//shotnames for HTML elements to interact with
+
+//images
+const body_image = document.getElementById("body_img");
+const eyes_image = document.getElementById("eyes_img");
+const mouth_image = document.getElementById("mouth_img");
+const arms_image = document.getElementById("arms_img");
+
+const canvas = document.getElementById("canvas_export");
+const neomoji_name = document.getElementById("fullNeomojiName");
+
+//names
+const body_name = document.getElementById("body_name");
+const eyes_name = document.getElementById("eyes_name");
+const mouth_name = document.getElementById("mouth_name");
+const arms_name = document.getElementById("arms_name");
+
+//Stats
+const stats = document.getElementById("stats");
+
+
+// Loading the JSON and getting all the available parts
+async function getData() {
+
+ fetch('./parts.json')
+ .then(function(response) {
+ return response.json();
+ })
+ .then(function(data) {
+ loadParts(data);
+ })
+ .catch(function(error) {
+ console.log('An error occurred:', error);
+ });
+}
+
+function loadParts(parts) {
+ //Load parts into Arrays
+ parts.type.eyes.forEach(fillArrayEyes);
+ parts.type.body.forEach(fillArrayBody);
+ parts.type.mouth.forEach(fillArrayMouth);
+ parts.type.arms.forEach(fillArrayArms);
+
+ //Randomize initial view
+ randomize();
+
+ //Show little statistic
+ var sum = body.length + eyes.length + mouth.length + arms.length;
+ var variety = body.length * eyes.length * mouth.length * arms.length;
+
+ stats.innerHTML = "There are " + sum + " Elements available,
with " + new Intl.NumberFormat("de-DE").format(variety) + " possible combinations.";
+
+ //Activate the buttons after everything is loaded in
+ document.getElementById("body_left").disabled = false;
+ document.getElementById("body_right").disabled = false;
+ document.getElementById("eyes_left").disabled = false;
+ document.getElementById("eyes_right").disabled = false;
+ document.getElementById("mouth_left").disabled = false;
+ document.getElementById("mouth_right").disabled = false;
+ document.getElementById("arms_left").disabled = false;
+ document.getElementById("arms_right").disabled = false;
+ document.getElementById("random").disabled = false;
+ document.getElementById("export").disabled = false;
+
+}
+
+function fillArrayEyes(item){
+ var name = item.name;
+ var url = item.url;
+ eyes.push ([name, url]); //Two dimensional array, Second dimension holds name on index 0 and url at index 1
+}
+
+function fillArrayBody(item){
+ var name = item.name;
+ var url = item.url;
+ body.push ([name, url]); //Two dimensional array, Second dimension holds name on index 0 and url at index 1
+}
+
+function fillArrayMouth(item){
+ var name = item.name;
+ var url = item.url;
+ mouth.push ([name, url]); //Two dimensional array, Second dimension holds name on index 0 and url at index 1
+}
+
+function fillArrayArms(item){
+ var name = item.name;
+ var url = item.url;
+ arms.push ([name, url]); //Two dimensional array, Second dimension holds name on index 0 and url at index 1
+}
+
+function onClick_body_next(){
+ index_body++;
+
+ if (index_body == body.length) {index_body = 0;} //check if index is too big for the array
+
+ body_image.src = "." + body[index_body][1]; //Change URL of picture
+ body_name.innerHTML = body[index_body][0]; //Change name in controls
+}
+
+function onClick_body_prev(){
+ index_body--;
+
+ if (index_body < 0) {index_body = (body.length-1);} //check if index is too big for the array
+
+ body_image.src = "." + body[index_body][1]; //Change URL of picture
+ body_name.innerHTML = body[index_body][0]; //Change name in controls
+}
+
+function onClick_eyes_next(){
+ index_eyes++;
+
+ if (index_eyes == eyes.length) {index_eyes = 0;} //check if index is too big for the array
+
+ eyes_image.src = "." + eyes[index_eyes][1]; //Change URL of picture
+ eyes_name.innerHTML = eyes[index_eyes][0]; //Change name in controls
+}
+
+function onClick_eyes_prev(){
+ index_eyes--;
+
+ if (index_eyes < 0) {index_eyes = (eyes.length-1);} //check if index is too big for the array
+
+ eyes_image.src = "." + eyes[index_eyes][1]; //Change URL of picture
+ eyes_name.innerHTML = eyes[index_eyes][0]; //Change name in controls
+}
+
+function onClick_mouth_next(){
+ index_mouth++;
+
+ if (index_mouth == mouth.length) {index_mouth = 0;} //check if index is too big for the array
+
+ mouth_image.src = "." + mouth[index_mouth][1]; //Change URL of picture
+ mouth_name.innerHTML = mouth[index_mouth][0]; //Change name in controls
+}
+
+function onClick_mouth_prev(){
+ index_mouth--;
+
+ if (index_mouth < 0) {index_mouth = (mouth.length-1);} //check if index is too big for the array
+
+ mouth_image.src = "." + mouth[index_mouth][1]; //Change URL of picture
+ mouth_name.innerHTML = mouth[index_mouth][0]; //Change name in controls
+}
+
+function onClick_arms_next(){
+ index_arms++;
+
+ if (index_arms == arms.length) {index_arms = 0;} //check if index is too big for the array
+
+ arms_image.src = "." + arms[index_arms][1]; //Change URL of picture
+ arms_name.innerHTML = arms[index_arms][0]; //Change name in controls
+}
+
+function onClick_arms_prev(){
+ index_arms--;
+
+ if (index_arms < 0) {index_arms = (arms.length-1);} //check if index is too big for the array
+
+ arms_image.src = "." + arms[index_arms][1]; //Change URL of picture
+ arms_name.innerHTML = arms[index_arms][0]; //Change name in controls
+}
+
+function randomize(){ //Randomize which parts are shown
+ index_body = Math.floor(Math.random() * body.length);
+ index_eyes = Math.floor(Math.random() * eyes.length);
+ index_mouth = Math.floor(Math.random() * mouth.length);
+ index_arms = Math.floor(Math.random() * arms.length);
+
+ body_image.src = "." + body[index_body][1];
+ eyes_image.src = "." + eyes[index_eyes][1];
+ mouth_image.src = "." + mouth[index_mouth][1];
+ arms_image.src = "." + arms[index_arms][1];
+
+ body_name.innerHTML = body[index_body][0];
+ eyes_name.innerHTML = eyes[index_eyes][0];
+ mouth_name.innerHTML = mouth[index_mouth][0];
+ arms_name.innerHTML = arms[index_arms][0];
+}
+
+function exportImage(){ //Export image so it can be saved as one PNG
+ var ctx=canvas.getContext("2d");
+
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ var body_export = new Image();
+ var eyes_export = new Image();
+ var mouth_export = new Image();
+ var arms_export = new Image();
+
+ body_export.src = "." + body[index_body][1];
+ body_export.onload = function() {
+ ctx.drawImage(body_export, 0, 0, 256, 256);
+ eyes_export.src = "." + eyes[index_eyes][1];
+ eyes_export.onload = function() {
+ ctx.drawImage(eyes_export, 0, 0, 256, 256);
+ mouth_export.src = "." + mouth[index_mouth][1];
+ mouth_export.onload = function() {
+ ctx.drawImage(mouth_export, 0, 0, 256, 256);
+ arms_export.src = "." + arms[index_arms][1];
+ arms_export.onload = function() {
+ ctx.drawImage(arms_export, 0, 0, 256, 256);
+ }
+ }
+ }
+ };
+
+ neomoji_name.value = body[index_body][0] + "_" + eyes[index_eyes][0] + "_" + mouth[index_mouth][0] + "_" + arms[index_arms][0];
+
+ canvas.hidden = false;
+ neomoji_name.hidden = false;
+ document.getElementById("exportSaveMessage").hidden = false;
+}
+
+//Main Programm
+document.getElementById("noJSmessage").hidden = true;
+getData();
\ No newline at end of file
diff --git a/parts.json b/parts.json
new file mode 100644
index 0000000..e18ef51
--- /dev/null
+++ b/parts.json
@@ -0,0 +1,121 @@
+{
+ "type": {
+ "eyes": [
+ {"name": "cute", "url": "/parts/eyes_cute.png"},
+ {"name": "normal", "url": "/parts/eyes_normal.png"},
+ {"name": "googly", "url": "/parts/eyes_googly.png"},
+ {"name": "woozy", "url": "/parts/eyes_woozy.png"},
+ {"name": "googly_woozy", "url": "/parts/eyes_googly_woozy.png"},
+ {"name": "baa", "url": "/parts/eyes_baa.png"},
+ {"name": "pleading", "url": "/parts/eyes_pleading.png"},
+ {"name": "dizzy", "url": "/parts/eyes_dizzy.png"},
+ {"name": "0_0", "url": "/parts/eyes_0_0.png"},
+ {"name": "devil", "url": "/parts/eyes_devil.png"},
+ {"name": "drowsy", "url": "/parts/eyes_drowsy.png"},
+ {"name": "evil", "url": "/parts/eyes_evil.png"},
+ {"name": ">_<", "url": "/parts/eyes_><.png"},
+ {"name": "cry", "url": "/parts/eyes_cry.png"},
+ {"name": "owo", "url": "/parts/eyes_owo.png"},
+ {"name": "sad", "url": "/parts/eyes_sad.png"},
+ {"name": "glare", "url": "/parts/eyes_glare.png"},
+ {"name": "hyper", "url": "/parts/eyes_hyper.png"},
+ {"name": "kisser", "url": "/parts/eyes_kisser.png"},
+ {"name": "laugh", "url": "/parts/eyes_laugh.png"},
+ {"name": "laugh_sweat", "url": "/parts/eyes_laugh_sweat.png"},
+ {"name": "glasses", "url": "/parts/eyes_glasses.png"},
+ {"name": "sunglasses", "url": "/parts/eyes_sunglasses.png"},
+ {"name": "shy", "url": "/parts/eyes_shy.png"},
+ {"name": "smug", "url": "/parts/eyes_smug.png"},
+ {"name": "sob", "url": "/parts/eyes_sob.png"},
+ {"name": "thinking", "url": "/parts/eyes_thinking.png"},
+ {"name": "wink", "url": "/parts/eyes_wink.png"},
+ {"name": "x_x", "url": "/parts/eyes_x_x.png"},
+ {"name": "vr", "url": "/parts/eyes_vr.png"},
+ {"name": "confused", "url": "/parts/eyes_confused.png"},
+ {"name": "blank", "url": "/parts/blank.png"}
+ ],
+ "body": [
+ {"name": "neofox_floof","url": "/parts/neofox_floofy.png"},
+ {"name": "neofox_comfy","url": "/parts/neofox_comfy.png"},
+ {"name": "neofox_trans","url": "/parts/neofox_trans.png"},
+ {"name": "neofox_angel","url": "/parts/neofox_angel.png"},
+ {"name": "neofox_devil","url": "/parts/neofox_devil.png"},
+ {"name": "neofox_police","url": "/parts/neofox_police.png"},
+ {"name": "neofox_rainbow","url": "/parts/neofox_rainbow.png"},
+ {"name": "neofox_santa","url": "/parts/neofox_santa.png"},
+ {"name": "neofox_devil_floof","url": "/parts/neofox_devil_floof.png"},
+ {"name": "neofox_mask","url": "/parts/neofox_mask.png"},
+ {"name": "neocat","url": "/parts/neocat.png"},
+ {"name": "neocat_comfy","url": "/parts/neocat_comfy.png"},
+ {"name": "neocat_comfy","url": "/parts/neocat_floof.png"},
+ {"name": "neocat_devil","url": "/parts/neocat_devil.png"},
+ {"name": "neocat_devil_floof","url": "/parts/neocat_devil_floof.png"},
+ {"name": "neocat_rainbow","url": "/parts/neocat_rainbow.png"},
+ {"name": "neocat_police","url": "/parts/neocat_police.png"},
+ {"name": "neocat_santa","url": "/parts/neocat_santa.png"},
+ {"name": "neocat_mask","url": "/parts/neocat_mask.png"},
+ {"name": "neofox","url": "/parts/neofox.png"}
+ ],
+ "mouth": [
+ {"name": "baa","url": "/parts/mouth_drool.png"},
+ {"name": "normal","url": "/parts/mouth_normal.png"},
+ {"name": "blep","url": "/parts/mouth_blep.png"},
+ {"name": "scream","url": "/parts/mouth_scream.png"},
+ {"name": "drowsy","url": "/parts/mouth_drowsy.png"},
+ {"name": "sad","url": "/parts/mouth_sad.png"},
+ {"name": "kisser","url": "/parts/mouth_kisser.png"},
+ {"name": "pout","url": "/parts/mouth_pout.png"},
+ {"name": "sip","url": "/parts/mouth_sip.png"},
+ {"name": "what","url": "/parts/mouth_what.png"},
+ {"name": "surprised","url": "/parts/mouth_surprised.png"},
+ {"name": "shocked","url": "/parts/mouth_shocked.png"},
+ {"name": "nom_bread","url": "/parts/mouth_nom_bread.png"},
+ {"name": "nom_cookie","url": "/parts/mouth_nom_cookie.png"},
+ {"name": "nom_donut","url": "/parts/mouth_nom_donut.png"},
+ {"name": "nom_egg","url": "/parts/mouth_nom_egg.png"},
+ {"name": "nom_watermelon","url": "/parts/mouth_nom_watermelon.png"},
+ {"name": "nom_pita","url": "/parts/mouth_nom_pita.png"},
+ {"name": "nom_pizza","url": "/parts/mouth_nom_pizza.png"},
+ {"name": "nom_toblerone","url": "/parts/mouth_nom_toblerone.png"},
+ {"name": "nom_verified","url": "/parts/mouth_nom_verified.png"},
+ {"name": "nom_waffle","url": "/parts/mouth_nom_waffle.png"},
+ {"name": "blank", "url": "/parts/blank.png"}
+ ],
+ "arms": [
+ {"name": "hide","url": "/parts/arms_hide.png"},
+ {"name": "aww","url": "/parts/arms_aww.png"},
+ {"name": "pleading","url": "/parts/arms_pleading.png"},
+ {"name": "reach","url": "/parts/arms_reach.png"},
+ {"name": "3c","url": "/parts/arms_3c.png"},
+ {"name": "facepalm","url": "/parts/arms_facepalm.png"},
+ {"name": "mug","url": "/parts/arms_mug.png"},
+ {"name": "knife","url": "/parts/arms_knife.png"},
+ {"name": "phone","url": "/parts/arms_phone.png"},
+ {"name": "fingerguns","url": "/parts/arms_fingerguns.png"},
+ {"name": "science","url": "/parts/arms_science.png"},
+ {"name": "sign_no","url": "/parts/arms_sign_no.png"},
+ {"name": "sign_aaa","url": "/parts/arms_sign_aaa.png"},
+ {"name": "sign_nya","url": "/parts/arms_sign_nya.png"},
+ {"name": "sign_thx","url": "/parts/arms_sign_thx.png"},
+ {"name": "sign_yes","url": "/parts/arms_sign_yes.png"},
+ {"name": "sign_yip","url": "/parts/arms_sign_yip.png"},
+ {"name": "sign_boobs","url": "/parts/arms_sign_boobs.png"},
+ {"name": "sign_butts","url": "/parts/arms_sign_butts.png"},
+ {"name": "sign_heart","url": "/parts/arms_heart.png"},
+ {"name": "solder","url": "/parts/arms_solder.png"},
+ {"name": "redlos","url": "/parts/arms_redlos.png"},
+ {"name": "think","url": "/parts/arms_think.png"},
+ {"name": "sweat","url": "/parts/arms_sweat.png"},
+ {"name": "verified","url": "/parts/arms_verified.png"},
+ {"name": "shocked","url": "/parts/arms_shocked.png"},
+ {"name": "thumbsdown","url": "/parts/arms_thumbsdown.png"},
+ {"name": "thumbsup","url": "/parts/arms_thumbsup.png"},
+ {"name": "book","url": "/parts/arms_book.png"},
+ {"name": "boop","url": "/parts/arms_boop.png"},
+ {"name": "sip","url": "/parts/arms_sip.png"},
+ {"name": "hold_burger","url": "/parts/arms_hold_burger.png"},
+ {"name": "blank", "url": "/parts/blank.png"}
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/parts/arms_3c.png b/parts/arms_3c.png
new file mode 100644
index 0000000..5542561
Binary files /dev/null and b/parts/arms_3c.png differ
diff --git a/parts/arms_aww.png b/parts/arms_aww.png
new file mode 100644
index 0000000..19eef38
Binary files /dev/null and b/parts/arms_aww.png differ
diff --git a/parts/arms_book.png b/parts/arms_book.png
new file mode 100644
index 0000000..bd3ffca
Binary files /dev/null and b/parts/arms_book.png differ
diff --git a/parts/arms_boop.png b/parts/arms_boop.png
new file mode 100644
index 0000000..d94a6f5
Binary files /dev/null and b/parts/arms_boop.png differ
diff --git a/parts/arms_facepalm.png b/parts/arms_facepalm.png
new file mode 100644
index 0000000..6d5ea3b
Binary files /dev/null and b/parts/arms_facepalm.png differ
diff --git a/parts/arms_fingerguns.png b/parts/arms_fingerguns.png
new file mode 100644
index 0000000..f49b56c
Binary files /dev/null and b/parts/arms_fingerguns.png differ
diff --git a/parts/arms_heart.png b/parts/arms_heart.png
new file mode 100644
index 0000000..ba5fd71
Binary files /dev/null and b/parts/arms_heart.png differ
diff --git a/parts/arms_hide.png b/parts/arms_hide.png
new file mode 100644
index 0000000..eeb8882
Binary files /dev/null and b/parts/arms_hide.png differ
diff --git a/parts/arms_hold_burger.png b/parts/arms_hold_burger.png
new file mode 100644
index 0000000..530dbc8
Binary files /dev/null and b/parts/arms_hold_burger.png differ
diff --git a/parts/arms_knife.png b/parts/arms_knife.png
new file mode 100644
index 0000000..6f72782
Binary files /dev/null and b/parts/arms_knife.png differ
diff --git a/parts/arms_mug.png b/parts/arms_mug.png
new file mode 100644
index 0000000..51de349
Binary files /dev/null and b/parts/arms_mug.png differ
diff --git a/parts/arms_phone.png b/parts/arms_phone.png
new file mode 100644
index 0000000..66db37b
Binary files /dev/null and b/parts/arms_phone.png differ
diff --git a/parts/arms_pleading.png b/parts/arms_pleading.png
new file mode 100644
index 0000000..67acde1
Binary files /dev/null and b/parts/arms_pleading.png differ
diff --git a/parts/arms_reach.png b/parts/arms_reach.png
new file mode 100644
index 0000000..7d3e528
Binary files /dev/null and b/parts/arms_reach.png differ
diff --git a/parts/arms_redlos.png b/parts/arms_redlos.png
new file mode 100644
index 0000000..29010c5
Binary files /dev/null and b/parts/arms_redlos.png differ
diff --git a/parts/arms_science.png b/parts/arms_science.png
new file mode 100644
index 0000000..5bf7b0c
Binary files /dev/null and b/parts/arms_science.png differ
diff --git a/parts/arms_shocked.png b/parts/arms_shocked.png
new file mode 100644
index 0000000..8feb579
Binary files /dev/null and b/parts/arms_shocked.png differ
diff --git a/parts/arms_sign_aaa.png b/parts/arms_sign_aaa.png
new file mode 100644
index 0000000..096e77c
Binary files /dev/null and b/parts/arms_sign_aaa.png differ
diff --git a/parts/arms_sign_boobs.png b/parts/arms_sign_boobs.png
new file mode 100644
index 0000000..19cd1b7
Binary files /dev/null and b/parts/arms_sign_boobs.png differ
diff --git a/parts/arms_sign_butts.png b/parts/arms_sign_butts.png
new file mode 100644
index 0000000..f902045
Binary files /dev/null and b/parts/arms_sign_butts.png differ
diff --git a/parts/arms_sign_no.png b/parts/arms_sign_no.png
new file mode 100644
index 0000000..6e111ef
Binary files /dev/null and b/parts/arms_sign_no.png differ
diff --git a/parts/arms_sign_nya.png b/parts/arms_sign_nya.png
new file mode 100644
index 0000000..b60ae2c
Binary files /dev/null and b/parts/arms_sign_nya.png differ
diff --git a/parts/arms_sign_thx.png b/parts/arms_sign_thx.png
new file mode 100644
index 0000000..89d0b94
Binary files /dev/null and b/parts/arms_sign_thx.png differ
diff --git a/parts/arms_sign_yes.png b/parts/arms_sign_yes.png
new file mode 100644
index 0000000..49d7eb9
Binary files /dev/null and b/parts/arms_sign_yes.png differ
diff --git a/parts/arms_sign_yip.png b/parts/arms_sign_yip.png
new file mode 100644
index 0000000..bfa14d7
Binary files /dev/null and b/parts/arms_sign_yip.png differ
diff --git a/parts/arms_sip.png b/parts/arms_sip.png
new file mode 100644
index 0000000..d329f68
Binary files /dev/null and b/parts/arms_sip.png differ
diff --git a/parts/arms_solder.png b/parts/arms_solder.png
new file mode 100644
index 0000000..a2b17d5
Binary files /dev/null and b/parts/arms_solder.png differ
diff --git a/parts/arms_sweat.png b/parts/arms_sweat.png
new file mode 100644
index 0000000..1131f8d
Binary files /dev/null and b/parts/arms_sweat.png differ
diff --git a/parts/arms_think.png b/parts/arms_think.png
new file mode 100644
index 0000000..dadb7e0
Binary files /dev/null and b/parts/arms_think.png differ
diff --git a/parts/arms_thumbsdown.png b/parts/arms_thumbsdown.png
new file mode 100644
index 0000000..b336a74
Binary files /dev/null and b/parts/arms_thumbsdown.png differ
diff --git a/parts/arms_thumbsup.png b/parts/arms_thumbsup.png
new file mode 100644
index 0000000..6d6529a
Binary files /dev/null and b/parts/arms_thumbsup.png differ
diff --git a/parts/arms_verified.png b/parts/arms_verified.png
new file mode 100644
index 0000000..bc4bf95
Binary files /dev/null and b/parts/arms_verified.png differ
diff --git a/parts/blank.png b/parts/blank.png
new file mode 100644
index 0000000..5bfcd4a
Binary files /dev/null and b/parts/blank.png differ
diff --git a/parts/eyes_0_0.png b/parts/eyes_0_0.png
new file mode 100644
index 0000000..481d46b
Binary files /dev/null and b/parts/eyes_0_0.png differ
diff --git a/parts/eyes_><.png b/parts/eyes_><.png
new file mode 100644
index 0000000..7a66d10
Binary files /dev/null and b/parts/eyes_><.png differ
diff --git a/parts/eyes_baa.png b/parts/eyes_baa.png
new file mode 100644
index 0000000..2257736
Binary files /dev/null and b/parts/eyes_baa.png differ
diff --git a/parts/eyes_confused.png b/parts/eyes_confused.png
new file mode 100644
index 0000000..5ff3832
Binary files /dev/null and b/parts/eyes_confused.png differ
diff --git a/parts/eyes_cry.png b/parts/eyes_cry.png
new file mode 100644
index 0000000..2e22117
Binary files /dev/null and b/parts/eyes_cry.png differ
diff --git a/parts/eyes_cute.png b/parts/eyes_cute.png
new file mode 100644
index 0000000..0a0d61a
Binary files /dev/null and b/parts/eyes_cute.png differ
diff --git a/parts/eyes_devil.png b/parts/eyes_devil.png
new file mode 100644
index 0000000..7ee636f
Binary files /dev/null and b/parts/eyes_devil.png differ
diff --git a/parts/eyes_dizzy.png b/parts/eyes_dizzy.png
new file mode 100644
index 0000000..b6e05e9
Binary files /dev/null and b/parts/eyes_dizzy.png differ
diff --git a/parts/eyes_drowsy.png b/parts/eyes_drowsy.png
new file mode 100644
index 0000000..2622c87
Binary files /dev/null and b/parts/eyes_drowsy.png differ
diff --git a/parts/eyes_evil.png b/parts/eyes_evil.png
new file mode 100644
index 0000000..db0cb21
Binary files /dev/null and b/parts/eyes_evil.png differ
diff --git a/parts/eyes_glare.png b/parts/eyes_glare.png
new file mode 100644
index 0000000..20d6849
Binary files /dev/null and b/parts/eyes_glare.png differ
diff --git a/parts/eyes_glasses.png b/parts/eyes_glasses.png
new file mode 100644
index 0000000..f2543e5
Binary files /dev/null and b/parts/eyes_glasses.png differ
diff --git a/parts/eyes_googly.png b/parts/eyes_googly.png
new file mode 100644
index 0000000..f772635
Binary files /dev/null and b/parts/eyes_googly.png differ
diff --git a/parts/eyes_googly_woozy.png b/parts/eyes_googly_woozy.png
new file mode 100644
index 0000000..6ec2835
Binary files /dev/null and b/parts/eyes_googly_woozy.png differ
diff --git a/parts/eyes_hyper.png b/parts/eyes_hyper.png
new file mode 100644
index 0000000..896866c
Binary files /dev/null and b/parts/eyes_hyper.png differ
diff --git a/parts/eyes_kisser.png b/parts/eyes_kisser.png
new file mode 100644
index 0000000..4e06e8c
Binary files /dev/null and b/parts/eyes_kisser.png differ
diff --git a/parts/eyes_laugh.png b/parts/eyes_laugh.png
new file mode 100644
index 0000000..a4210ea
Binary files /dev/null and b/parts/eyes_laugh.png differ
diff --git a/parts/eyes_laugh_sweat.png b/parts/eyes_laugh_sweat.png
new file mode 100644
index 0000000..ca235ed
Binary files /dev/null and b/parts/eyes_laugh_sweat.png differ
diff --git a/parts/eyes_normal.png b/parts/eyes_normal.png
new file mode 100644
index 0000000..d377bb4
Binary files /dev/null and b/parts/eyes_normal.png differ
diff --git a/parts/eyes_owo.png b/parts/eyes_owo.png
new file mode 100644
index 0000000..3f2fe47
Binary files /dev/null and b/parts/eyes_owo.png differ
diff --git a/parts/eyes_pleading.png b/parts/eyes_pleading.png
new file mode 100644
index 0000000..8f6486d
Binary files /dev/null and b/parts/eyes_pleading.png differ
diff --git a/parts/eyes_sad.png b/parts/eyes_sad.png
new file mode 100644
index 0000000..6b63199
Binary files /dev/null and b/parts/eyes_sad.png differ
diff --git a/parts/eyes_shy.png b/parts/eyes_shy.png
new file mode 100644
index 0000000..f6c8aa2
Binary files /dev/null and b/parts/eyes_shy.png differ
diff --git a/parts/eyes_smug.png b/parts/eyes_smug.png
new file mode 100644
index 0000000..61e6541
Binary files /dev/null and b/parts/eyes_smug.png differ
diff --git a/parts/eyes_sob.png b/parts/eyes_sob.png
new file mode 100644
index 0000000..230a930
Binary files /dev/null and b/parts/eyes_sob.png differ
diff --git a/parts/eyes_sunglasses.png b/parts/eyes_sunglasses.png
new file mode 100644
index 0000000..eb54194
Binary files /dev/null and b/parts/eyes_sunglasses.png differ
diff --git a/parts/eyes_thinking.png b/parts/eyes_thinking.png
new file mode 100644
index 0000000..9066067
Binary files /dev/null and b/parts/eyes_thinking.png differ
diff --git a/parts/eyes_vr.png b/parts/eyes_vr.png
new file mode 100644
index 0000000..c149b90
Binary files /dev/null and b/parts/eyes_vr.png differ
diff --git a/parts/eyes_wink.png b/parts/eyes_wink.png
new file mode 100644
index 0000000..4f85070
Binary files /dev/null and b/parts/eyes_wink.png differ
diff --git a/parts/eyes_woozy.png b/parts/eyes_woozy.png
new file mode 100644
index 0000000..7264537
Binary files /dev/null and b/parts/eyes_woozy.png differ
diff --git a/parts/eyes_x_x.png b/parts/eyes_x_x.png
new file mode 100644
index 0000000..55f5410
Binary files /dev/null and b/parts/eyes_x_x.png differ
diff --git a/parts/mouth_blep.png b/parts/mouth_blep.png
new file mode 100644
index 0000000..b46c49b
Binary files /dev/null and b/parts/mouth_blep.png differ
diff --git a/parts/mouth_drool.png b/parts/mouth_drool.png
new file mode 100644
index 0000000..59349f6
Binary files /dev/null and b/parts/mouth_drool.png differ
diff --git a/parts/mouth_drowsy.png b/parts/mouth_drowsy.png
new file mode 100644
index 0000000..fe29945
Binary files /dev/null and b/parts/mouth_drowsy.png differ
diff --git a/parts/mouth_kisser.png b/parts/mouth_kisser.png
new file mode 100644
index 0000000..528b4ed
Binary files /dev/null and b/parts/mouth_kisser.png differ
diff --git a/parts/mouth_nom_bread.png b/parts/mouth_nom_bread.png
new file mode 100644
index 0000000..90f1cd6
Binary files /dev/null and b/parts/mouth_nom_bread.png differ
diff --git a/parts/mouth_nom_cookie.png b/parts/mouth_nom_cookie.png
new file mode 100644
index 0000000..30a98b0
Binary files /dev/null and b/parts/mouth_nom_cookie.png differ
diff --git a/parts/mouth_nom_donut.png b/parts/mouth_nom_donut.png
new file mode 100644
index 0000000..22094f1
Binary files /dev/null and b/parts/mouth_nom_donut.png differ
diff --git a/parts/mouth_nom_egg.png b/parts/mouth_nom_egg.png
new file mode 100644
index 0000000..d3eb05b
Binary files /dev/null and b/parts/mouth_nom_egg.png differ
diff --git a/parts/mouth_nom_pita.png b/parts/mouth_nom_pita.png
new file mode 100644
index 0000000..7077ef2
Binary files /dev/null and b/parts/mouth_nom_pita.png differ
diff --git a/parts/mouth_nom_pizza.png b/parts/mouth_nom_pizza.png
new file mode 100644
index 0000000..3ee22a9
Binary files /dev/null and b/parts/mouth_nom_pizza.png differ
diff --git a/parts/mouth_nom_toblerone.png b/parts/mouth_nom_toblerone.png
new file mode 100644
index 0000000..7456350
Binary files /dev/null and b/parts/mouth_nom_toblerone.png differ
diff --git a/parts/mouth_nom_verified.png b/parts/mouth_nom_verified.png
new file mode 100644
index 0000000..3b49c49
Binary files /dev/null and b/parts/mouth_nom_verified.png differ
diff --git a/parts/mouth_nom_waffle.png b/parts/mouth_nom_waffle.png
new file mode 100644
index 0000000..90b85a9
Binary files /dev/null and b/parts/mouth_nom_waffle.png differ
diff --git a/parts/mouth_nom_watermelon.png b/parts/mouth_nom_watermelon.png
new file mode 100644
index 0000000..245d364
Binary files /dev/null and b/parts/mouth_nom_watermelon.png differ
diff --git a/parts/mouth_normal.png b/parts/mouth_normal.png
new file mode 100644
index 0000000..8403a92
Binary files /dev/null and b/parts/mouth_normal.png differ
diff --git a/parts/mouth_pout.png b/parts/mouth_pout.png
new file mode 100644
index 0000000..b767bb0
Binary files /dev/null and b/parts/mouth_pout.png differ
diff --git a/parts/mouth_sad.png b/parts/mouth_sad.png
new file mode 100644
index 0000000..f897185
Binary files /dev/null and b/parts/mouth_sad.png differ
diff --git a/parts/mouth_scream.png b/parts/mouth_scream.png
new file mode 100644
index 0000000..f7d80ec
Binary files /dev/null and b/parts/mouth_scream.png differ
diff --git a/parts/mouth_shocked.png b/parts/mouth_shocked.png
new file mode 100644
index 0000000..713f580
Binary files /dev/null and b/parts/mouth_shocked.png differ
diff --git a/parts/mouth_sip.png b/parts/mouth_sip.png
new file mode 100644
index 0000000..6f2aa38
Binary files /dev/null and b/parts/mouth_sip.png differ
diff --git a/parts/mouth_surprised.png b/parts/mouth_surprised.png
new file mode 100644
index 0000000..752a4de
Binary files /dev/null and b/parts/mouth_surprised.png differ
diff --git a/parts/mouth_what.png b/parts/mouth_what.png
new file mode 100644
index 0000000..fa397df
Binary files /dev/null and b/parts/mouth_what.png differ
diff --git a/parts/neocat.png b/parts/neocat.png
new file mode 100644
index 0000000..4b88214
Binary files /dev/null and b/parts/neocat.png differ
diff --git a/parts/neocat_comfy.png b/parts/neocat_comfy.png
new file mode 100644
index 0000000..8686813
Binary files /dev/null and b/parts/neocat_comfy.png differ
diff --git a/parts/neocat_devil.png b/parts/neocat_devil.png
new file mode 100644
index 0000000..03f8a00
Binary files /dev/null and b/parts/neocat_devil.png differ
diff --git a/parts/neocat_devil_floof.png b/parts/neocat_devil_floof.png
new file mode 100644
index 0000000..bb7413d
Binary files /dev/null and b/parts/neocat_devil_floof.png differ
diff --git a/parts/neocat_floof.png b/parts/neocat_floof.png
new file mode 100644
index 0000000..33e862b
Binary files /dev/null and b/parts/neocat_floof.png differ
diff --git a/parts/neocat_mask.png b/parts/neocat_mask.png
new file mode 100644
index 0000000..de4b7a1
Binary files /dev/null and b/parts/neocat_mask.png differ
diff --git a/parts/neocat_police.png b/parts/neocat_police.png
new file mode 100644
index 0000000..ace7d47
Binary files /dev/null and b/parts/neocat_police.png differ
diff --git a/parts/neocat_rainbow.png b/parts/neocat_rainbow.png
new file mode 100644
index 0000000..bfb73c4
Binary files /dev/null and b/parts/neocat_rainbow.png differ
diff --git a/parts/neocat_santa.png b/parts/neocat_santa.png
new file mode 100644
index 0000000..fce6c93
Binary files /dev/null and b/parts/neocat_santa.png differ
diff --git a/parts/neofox.png b/parts/neofox.png
new file mode 100644
index 0000000..188e934
Binary files /dev/null and b/parts/neofox.png differ
diff --git a/parts/neofox_angel.png b/parts/neofox_angel.png
new file mode 100644
index 0000000..5f9ebf6
Binary files /dev/null and b/parts/neofox_angel.png differ
diff --git a/parts/neofox_comfy.png b/parts/neofox_comfy.png
new file mode 100644
index 0000000..14f0a89
Binary files /dev/null and b/parts/neofox_comfy.png differ
diff --git a/parts/neofox_devil.png b/parts/neofox_devil.png
new file mode 100644
index 0000000..4e57e24
Binary files /dev/null and b/parts/neofox_devil.png differ
diff --git a/parts/neofox_devil_floof.png b/parts/neofox_devil_floof.png
new file mode 100644
index 0000000..fcd7847
Binary files /dev/null and b/parts/neofox_devil_floof.png differ
diff --git a/parts/neofox_floofy.png b/parts/neofox_floofy.png
new file mode 100644
index 0000000..32c1b94
Binary files /dev/null and b/parts/neofox_floofy.png differ
diff --git a/parts/neofox_mask.png b/parts/neofox_mask.png
new file mode 100644
index 0000000..43c7d69
Binary files /dev/null and b/parts/neofox_mask.png differ
diff --git a/parts/neofox_police.png b/parts/neofox_police.png
new file mode 100644
index 0000000..abcaac2
Binary files /dev/null and b/parts/neofox_police.png differ
diff --git a/parts/neofox_rainbow.png b/parts/neofox_rainbow.png
new file mode 100644
index 0000000..60be233
Binary files /dev/null and b/parts/neofox_rainbow.png differ
diff --git a/parts/neofox_santa.png b/parts/neofox_santa.png
new file mode 100644
index 0000000..c705d4f
Binary files /dev/null and b/parts/neofox_santa.png differ
diff --git a/parts/neofox_trans.png b/parts/neofox_trans.png
new file mode 100644
index 0000000..d939510
Binary files /dev/null and b/parts/neofox_trans.png differ