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 @@ + + + + + Neomojimixer + + + + + +

Neomojimixer

+

Mix your Neomoji parts as you like.

+

Please active JavaScript to use the Neomojimixer!

+
+ + + + +
+
+
name body
+
name eyes
+
name mouth
+
name arms
+
+
+
+
stats
+ + + +

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