diff --git a/assets/accessories_1/horns.png b/assets/accessories_1/horns.png new file mode 100644 index 0000000..77bb74c Binary files /dev/null and b/assets/accessories_1/horns.png differ diff --git a/assets/accessories_1/horns2.png b/assets/accessories_1/horns2.png new file mode 100644 index 0000000..e2ba6e1 Binary files /dev/null and b/assets/accessories_1/horns2.png differ diff --git a/assets/accessories_2/bells.png b/assets/accessories_2/bells.png new file mode 100644 index 0000000..f92fe86 Binary files /dev/null and b/assets/accessories_2/bells.png differ diff --git a/assets/accessories_2/button.png b/assets/accessories_2/button.png new file mode 100644 index 0000000..bd8bd96 Binary files /dev/null and b/assets/accessories_2/button.png differ diff --git a/assets/accessories_2/collar.png b/assets/accessories_2/collar.png new file mode 100644 index 0000000..a951ce9 Binary files /dev/null and b/assets/accessories_2/collar.png differ diff --git a/assets/accessories_2/ribbon.png b/assets/accessories_2/ribbon.png new file mode 100644 index 0000000..2fb8418 Binary files /dev/null and b/assets/accessories_2/ribbon.png differ diff --git a/assets/bangs/chunky.png b/assets/bangs/chunky.png new file mode 100644 index 0000000..f3eb3c5 Binary files /dev/null and b/assets/bangs/chunky.png differ diff --git a/assets/bangs/framed.png b/assets/bangs/framed.png new file mode 100644 index 0000000..2c5d6e7 Binary files /dev/null and b/assets/bangs/framed.png differ diff --git a/assets/bangs/hime.png b/assets/bangs/hime.png new file mode 100644 index 0000000..988069d Binary files /dev/null and b/assets/bangs/hime.png differ diff --git a/assets/bangs/messy.png b/assets/bangs/messy.png new file mode 100644 index 0000000..7ae3207 Binary files /dev/null and b/assets/bangs/messy.png differ diff --git a/assets/bangs/part.png b/assets/bangs/part.png new file mode 100644 index 0000000..70aef4b Binary files /dev/null and b/assets/bangs/part.png differ diff --git a/assets/bangs/prince.png b/assets/bangs/prince.png new file mode 100644 index 0000000..71171f4 Binary files /dev/null and b/assets/bangs/prince.png differ diff --git a/assets/bangs/swoop.png b/assets/bangs/swoop.png new file mode 100644 index 0000000..f268340 Binary files /dev/null and b/assets/bangs/swoop.png differ diff --git a/assets/bodies/feral_body.png b/assets/bodies/feral_body.png new file mode 100644 index 0000000..b34f5dc Binary files /dev/null and b/assets/bodies/feral_body.png differ diff --git a/assets/bodies/normal_body.png b/assets/bodies/normal_body.png new file mode 100644 index 0000000..b8998d9 Binary files /dev/null and b/assets/bodies/normal_body.png differ diff --git a/assets/body/feral_body.png b/assets/body/feral_body.png new file mode 100644 index 0000000..b34f5dc Binary files /dev/null and b/assets/body/feral_body.png differ diff --git a/assets/body/normal_body.png b/assets/body/normal_body.png new file mode 100644 index 0000000..b8998d9 Binary files /dev/null and b/assets/body/normal_body.png differ diff --git a/assets/config.json b/assets/config.json new file mode 100644 index 0000000..6722dbf --- /dev/null +++ b/assets/config.json @@ -0,0 +1,29 @@ +{ + "categories": { + "body": ["feral_body", "normal_body"], + "markings": ["feral_h", "feral_ombre", "feral_patchy", "feral_stripes", "normal_h", "normal_ombre", "normal_patchy", "normal_stripes"], + "skin": ["skin_1", "skin_2", "skin_3", "skin_4", "skin_5", "skin_6", "skin_7"], + "tails": ["bob", "long", "medium", "thick", "thin"], + "tail_markings": ["bob_bottom", "bob_top", "long_h", "long_ombre", "long_stripe", "long_tip", "medium_h", "medium_ombre", "medium_stripe", "medium_tip", "thick_h", "thick_ombre", "thick_stripe", "thin_ombre", "thin_spots", "thin_stripes"], + "eyes": ["eye1", "eye2", "eye3", "eye4", "eye5"], + "mouths": ["grin", "pout", "smile"], + "ears": ["big", "bun", "cat", "fox", "lop", "mouse"], + "hair": ["long", "messy", "pigtails", "fluffy", "swoop"], + "bangs": ["hime", "messy", "chunky", "part", "prince", "framed"], + "hair_highlights": ["long_h", "long_ombre", "long_split", "long_streak", "messy_h", "messy_ombre", "messy_split", "messy_streak", "pigtails_h", "pigtails_ombre", "pigtails_split", "pigtails_streak", "fluffy_h", "fluffy_ombre", "fluffy_split", "fluffy_streak", "swoop_h", "swoop_ombre", "swoop_split", "swoop_streak"], + "accessories_1": ["horns", "horns2"], + "accessories_2": ["bells", "button", "collar", "ribbon"] + + }, + "dependencies": { + "tail_markings": "tails", + "hair_highlights": "hair", + "markings": "body" + }, + "colors": { + "eyes": [] + }, + "layers": ["tails", "tail_markings", "skin", "body", "markings", "eyes", "mouths", "ears", "accessories_2", "bangs", "hair", "hair_highlights", "accessories_1"] +} + + \ No newline at end of file diff --git a/assets/ears/big.png b/assets/ears/big.png new file mode 100644 index 0000000..a612d25 Binary files /dev/null and b/assets/ears/big.png differ diff --git a/assets/ears/bun.png b/assets/ears/bun.png new file mode 100644 index 0000000..f707fab Binary files /dev/null and b/assets/ears/bun.png differ diff --git a/assets/ears/cat.png b/assets/ears/cat.png new file mode 100644 index 0000000..700d567 Binary files /dev/null and b/assets/ears/cat.png differ diff --git a/assets/ears/fox.png b/assets/ears/fox.png new file mode 100644 index 0000000..42ce182 Binary files /dev/null and b/assets/ears/fox.png differ diff --git a/assets/ears/lop.png b/assets/ears/lop.png new file mode 100644 index 0000000..85f7e8a Binary files /dev/null and b/assets/ears/lop.png differ diff --git a/assets/ears/mouse.png b/assets/ears/mouse.png new file mode 100644 index 0000000..463b7a2 Binary files /dev/null and b/assets/ears/mouse.png differ diff --git a/assets/eyes/eye1.png b/assets/eyes/eye1.png new file mode 100644 index 0000000..eef6cfc Binary files /dev/null and b/assets/eyes/eye1.png differ diff --git a/assets/eyes/eye2.png b/assets/eyes/eye2.png new file mode 100644 index 0000000..a3659db Binary files /dev/null and b/assets/eyes/eye2.png differ diff --git a/assets/eyes/eye3.png b/assets/eyes/eye3.png new file mode 100644 index 0000000..1891311 Binary files /dev/null and b/assets/eyes/eye3.png differ diff --git a/assets/eyes/eye4.png b/assets/eyes/eye4.png new file mode 100644 index 0000000..192badd Binary files /dev/null and b/assets/eyes/eye4.png differ diff --git a/assets/eyes/eye5.png b/assets/eyes/eye5.png new file mode 100644 index 0000000..d8e30c2 Binary files /dev/null and b/assets/eyes/eye5.png differ diff --git a/assets/grass.png b/assets/grass.png new file mode 100644 index 0000000..68181c9 Binary files /dev/null and b/assets/grass.png differ diff --git a/assets/hair/fluffy.png b/assets/hair/fluffy.png new file mode 100644 index 0000000..e119b90 Binary files /dev/null and b/assets/hair/fluffy.png differ diff --git a/assets/hair/long.png b/assets/hair/long.png new file mode 100644 index 0000000..b22c82f Binary files /dev/null and b/assets/hair/long.png differ diff --git a/assets/hair/medium.png b/assets/hair/medium.png new file mode 100644 index 0000000..a23d7e0 Binary files /dev/null and b/assets/hair/medium.png differ diff --git a/assets/hair/messy.png b/assets/hair/messy.png new file mode 100644 index 0000000..fb18739 Binary files /dev/null and b/assets/hair/messy.png differ diff --git a/assets/hair/pigtails.png b/assets/hair/pigtails.png new file mode 100644 index 0000000..19f4bd6 Binary files /dev/null and b/assets/hair/pigtails.png differ diff --git a/assets/hair/swoop.png b/assets/hair/swoop.png new file mode 100644 index 0000000..1f3aa97 Binary files /dev/null and b/assets/hair/swoop.png differ diff --git a/assets/hair_highlights/fluffy_h.png b/assets/hair_highlights/fluffy_h.png new file mode 100644 index 0000000..b89dabd Binary files /dev/null and b/assets/hair_highlights/fluffy_h.png differ diff --git a/assets/hair_highlights/fluffy_ombre.png b/assets/hair_highlights/fluffy_ombre.png new file mode 100644 index 0000000..82b48a6 Binary files /dev/null and b/assets/hair_highlights/fluffy_ombre.png differ diff --git a/assets/hair_highlights/fluffy_split.png b/assets/hair_highlights/fluffy_split.png new file mode 100644 index 0000000..7eeea93 Binary files /dev/null and b/assets/hair_highlights/fluffy_split.png differ diff --git a/assets/hair_highlights/fluffy_streak.png b/assets/hair_highlights/fluffy_streak.png new file mode 100644 index 0000000..c74dd67 Binary files /dev/null and b/assets/hair_highlights/fluffy_streak.png differ diff --git a/assets/hair_highlights/long_h.png b/assets/hair_highlights/long_h.png new file mode 100644 index 0000000..c213b52 Binary files /dev/null and b/assets/hair_highlights/long_h.png differ diff --git a/assets/hair_highlights/long_ombre.png b/assets/hair_highlights/long_ombre.png new file mode 100644 index 0000000..6a48b89 Binary files /dev/null and b/assets/hair_highlights/long_ombre.png differ diff --git a/assets/hair_highlights/long_split.png b/assets/hair_highlights/long_split.png new file mode 100644 index 0000000..19d64c0 Binary files /dev/null and b/assets/hair_highlights/long_split.png differ diff --git a/assets/hair_highlights/long_streak.png b/assets/hair_highlights/long_streak.png new file mode 100644 index 0000000..dd99d2c Binary files /dev/null and b/assets/hair_highlights/long_streak.png differ diff --git a/assets/hair_highlights/medium_h.png b/assets/hair_highlights/medium_h.png new file mode 100644 index 0000000..b46f5e4 Binary files /dev/null and b/assets/hair_highlights/medium_h.png differ diff --git a/assets/hair_highlights/medium_ombre.png b/assets/hair_highlights/medium_ombre.png new file mode 100644 index 0000000..2000f5e Binary files /dev/null and b/assets/hair_highlights/medium_ombre.png differ diff --git a/assets/hair_highlights/medium_split.png b/assets/hair_highlights/medium_split.png new file mode 100644 index 0000000..498a51d Binary files /dev/null and b/assets/hair_highlights/medium_split.png differ diff --git a/assets/hair_highlights/medium_streak.png b/assets/hair_highlights/medium_streak.png new file mode 100644 index 0000000..b97157d Binary files /dev/null and b/assets/hair_highlights/medium_streak.png differ diff --git a/assets/hair_highlights/messy_h.png b/assets/hair_highlights/messy_h.png new file mode 100644 index 0000000..4c3f564 Binary files /dev/null and b/assets/hair_highlights/messy_h.png differ diff --git a/assets/hair_highlights/messy_ombre.png b/assets/hair_highlights/messy_ombre.png new file mode 100644 index 0000000..7b33232 Binary files /dev/null and b/assets/hair_highlights/messy_ombre.png differ diff --git a/assets/hair_highlights/messy_split.png b/assets/hair_highlights/messy_split.png new file mode 100644 index 0000000..4cd423e Binary files /dev/null and b/assets/hair_highlights/messy_split.png differ diff --git a/assets/hair_highlights/messy_streak.png b/assets/hair_highlights/messy_streak.png new file mode 100644 index 0000000..fb31538 Binary files /dev/null and b/assets/hair_highlights/messy_streak.png differ diff --git a/assets/hair_highlights/pigtails_h.png b/assets/hair_highlights/pigtails_h.png new file mode 100644 index 0000000..7ef6a50 Binary files /dev/null and b/assets/hair_highlights/pigtails_h.png differ diff --git a/assets/hair_highlights/pigtails_ombre.png b/assets/hair_highlights/pigtails_ombre.png new file mode 100644 index 0000000..fe00f62 Binary files /dev/null and b/assets/hair_highlights/pigtails_ombre.png differ diff --git a/assets/hair_highlights/pigtails_split.png b/assets/hair_highlights/pigtails_split.png new file mode 100644 index 0000000..cd152d4 Binary files /dev/null and b/assets/hair_highlights/pigtails_split.png differ diff --git a/assets/hair_highlights/pigtails_streak.png b/assets/hair_highlights/pigtails_streak.png new file mode 100644 index 0000000..0aa8740 Binary files /dev/null and b/assets/hair_highlights/pigtails_streak.png differ diff --git a/assets/hair_highlights/swoop_h.png b/assets/hair_highlights/swoop_h.png new file mode 100644 index 0000000..6b907ca Binary files /dev/null and b/assets/hair_highlights/swoop_h.png differ diff --git a/assets/hair_highlights/swoop_ombre.png b/assets/hair_highlights/swoop_ombre.png new file mode 100644 index 0000000..d2004a5 Binary files /dev/null and b/assets/hair_highlights/swoop_ombre.png differ diff --git a/assets/hair_highlights/swoop_split.png b/assets/hair_highlights/swoop_split.png new file mode 100644 index 0000000..f59498d Binary files /dev/null and b/assets/hair_highlights/swoop_split.png differ diff --git a/assets/hair_highlights/swoop_streak.png b/assets/hair_highlights/swoop_streak.png new file mode 100644 index 0000000..4520b25 Binary files /dev/null and b/assets/hair_highlights/swoop_streak.png differ diff --git a/assets/leaf.png b/assets/leaf.png new file mode 100644 index 0000000..2d1fcd1 Binary files /dev/null and b/assets/leaf.png differ diff --git a/assets/markings/feral_h.png b/assets/markings/feral_h.png new file mode 100644 index 0000000..3081f8b Binary files /dev/null and b/assets/markings/feral_h.png differ diff --git a/assets/markings/feral_ombre.png b/assets/markings/feral_ombre.png new file mode 100644 index 0000000..ef5eb55 Binary files /dev/null and b/assets/markings/feral_ombre.png differ diff --git a/assets/markings/feral_patchy.png b/assets/markings/feral_patchy.png new file mode 100644 index 0000000..150fae7 Binary files /dev/null and b/assets/markings/feral_patchy.png differ diff --git a/assets/markings/feral_stripes.png b/assets/markings/feral_stripes.png new file mode 100644 index 0000000..8a3a094 Binary files /dev/null and b/assets/markings/feral_stripes.png differ diff --git a/assets/markings/normal_h.png b/assets/markings/normal_h.png new file mode 100644 index 0000000..3e56d5a Binary files /dev/null and b/assets/markings/normal_h.png differ diff --git a/assets/markings/normal_ombre.png b/assets/markings/normal_ombre.png new file mode 100644 index 0000000..87dc63e Binary files /dev/null and b/assets/markings/normal_ombre.png differ diff --git a/assets/markings/normal_patchy.png b/assets/markings/normal_patchy.png new file mode 100644 index 0000000..575f5da Binary files /dev/null and b/assets/markings/normal_patchy.png differ diff --git a/assets/markings/normal_stripes.png b/assets/markings/normal_stripes.png new file mode 100644 index 0000000..c4aa26d Binary files /dev/null and b/assets/markings/normal_stripes.png differ diff --git a/assets/mouths/grin.png b/assets/mouths/grin.png new file mode 100644 index 0000000..67aeec5 Binary files /dev/null and b/assets/mouths/grin.png differ diff --git a/assets/mouths/pout.png b/assets/mouths/pout.png new file mode 100644 index 0000000..bcd867f Binary files /dev/null and b/assets/mouths/pout.png differ diff --git a/assets/mouths/smile.png b/assets/mouths/smile.png new file mode 100644 index 0000000..400a410 Binary files /dev/null and b/assets/mouths/smile.png differ diff --git a/assets/none.png b/assets/none.png new file mode 100644 index 0000000..0e6815b Binary files /dev/null and b/assets/none.png differ diff --git a/assets/skin/skin_1.png b/assets/skin/skin_1.png new file mode 100644 index 0000000..a345a45 Binary files /dev/null and b/assets/skin/skin_1.png differ diff --git a/assets/skin/skin_2.png b/assets/skin/skin_2.png new file mode 100644 index 0000000..e647672 Binary files /dev/null and b/assets/skin/skin_2.png differ diff --git a/assets/skin/skin_3.png b/assets/skin/skin_3.png new file mode 100644 index 0000000..209e973 Binary files /dev/null and b/assets/skin/skin_3.png differ diff --git a/assets/skin/skin_4.png b/assets/skin/skin_4.png new file mode 100644 index 0000000..ed63348 Binary files /dev/null and b/assets/skin/skin_4.png differ diff --git a/assets/skin/skin_5.png b/assets/skin/skin_5.png new file mode 100644 index 0000000..69af636 Binary files /dev/null and b/assets/skin/skin_5.png differ diff --git a/assets/skin/skin_6.png b/assets/skin/skin_6.png new file mode 100644 index 0000000..266dd80 Binary files /dev/null and b/assets/skin/skin_6.png differ diff --git a/assets/skin/skin_7.png b/assets/skin/skin_7.png new file mode 100644 index 0000000..0791661 Binary files /dev/null and b/assets/skin/skin_7.png differ diff --git a/assets/tail_markings/bob_bottom.png b/assets/tail_markings/bob_bottom.png new file mode 100644 index 0000000..4a58ae8 Binary files /dev/null and b/assets/tail_markings/bob_bottom.png differ diff --git a/assets/tail_markings/bob_top.png b/assets/tail_markings/bob_top.png new file mode 100644 index 0000000..36f9b68 Binary files /dev/null and b/assets/tail_markings/bob_top.png differ diff --git a/assets/tail_markings/long_h.png b/assets/tail_markings/long_h.png new file mode 100644 index 0000000..f02e4f9 Binary files /dev/null and b/assets/tail_markings/long_h.png differ diff --git a/assets/tail_markings/long_ombre.png b/assets/tail_markings/long_ombre.png new file mode 100644 index 0000000..eef616c Binary files /dev/null and b/assets/tail_markings/long_ombre.png differ diff --git a/assets/tail_markings/long_stripe.png b/assets/tail_markings/long_stripe.png new file mode 100644 index 0000000..56ccfc3 Binary files /dev/null and b/assets/tail_markings/long_stripe.png differ diff --git a/assets/tail_markings/long_tip.png b/assets/tail_markings/long_tip.png new file mode 100644 index 0000000..5771b6e Binary files /dev/null and b/assets/tail_markings/long_tip.png differ diff --git a/assets/tail_markings/medium_h.png b/assets/tail_markings/medium_h.png new file mode 100644 index 0000000..7951b46 Binary files /dev/null and b/assets/tail_markings/medium_h.png differ diff --git a/assets/tail_markings/medium_ombre.png b/assets/tail_markings/medium_ombre.png new file mode 100644 index 0000000..acf9a1e Binary files /dev/null and b/assets/tail_markings/medium_ombre.png differ diff --git a/assets/tail_markings/medium_stripe.png b/assets/tail_markings/medium_stripe.png new file mode 100644 index 0000000..1d3a4d7 Binary files /dev/null and b/assets/tail_markings/medium_stripe.png differ diff --git a/assets/tail_markings/medium_tip.png b/assets/tail_markings/medium_tip.png new file mode 100644 index 0000000..4cab650 Binary files /dev/null and b/assets/tail_markings/medium_tip.png differ diff --git a/assets/tail_markings/thick_h.png b/assets/tail_markings/thick_h.png new file mode 100644 index 0000000..0de5c04 Binary files /dev/null and b/assets/tail_markings/thick_h.png differ diff --git a/assets/tail_markings/thick_ombre.png b/assets/tail_markings/thick_ombre.png new file mode 100644 index 0000000..cd709c8 Binary files /dev/null and b/assets/tail_markings/thick_ombre.png differ diff --git a/assets/tail_markings/thick_stripe.png b/assets/tail_markings/thick_stripe.png new file mode 100644 index 0000000..85bfea5 Binary files /dev/null and b/assets/tail_markings/thick_stripe.png differ diff --git a/assets/tail_markings/thin_ombre.png b/assets/tail_markings/thin_ombre.png new file mode 100644 index 0000000..0199ac5 Binary files /dev/null and b/assets/tail_markings/thin_ombre.png differ diff --git a/assets/tail_markings/thin_spots.png b/assets/tail_markings/thin_spots.png new file mode 100644 index 0000000..c8b3520 Binary files /dev/null and b/assets/tail_markings/thin_spots.png differ diff --git a/assets/tail_markings/thin_stripes.png b/assets/tail_markings/thin_stripes.png new file mode 100644 index 0000000..284baeb Binary files /dev/null and b/assets/tail_markings/thin_stripes.png differ diff --git a/assets/tails/bob.png b/assets/tails/bob.png new file mode 100644 index 0000000..f50dfc3 Binary files /dev/null and b/assets/tails/bob.png differ diff --git a/assets/tails/long.png b/assets/tails/long.png new file mode 100644 index 0000000..a7a911c Binary files /dev/null and b/assets/tails/long.png differ diff --git a/assets/tails/medium.png b/assets/tails/medium.png new file mode 100644 index 0000000..bb83e7d Binary files /dev/null and b/assets/tails/medium.png differ diff --git a/assets/tails/thick.png b/assets/tails/thick.png new file mode 100644 index 0000000..2435c0e Binary files /dev/null and b/assets/tails/thick.png differ diff --git a/assets/tails/thin.png b/assets/tails/thin.png new file mode 100644 index 0000000..6673e3e Binary files /dev/null and b/assets/tails/thin.png differ diff --git a/assets/thumbnails/accessories_1/horns2_thumb.png b/assets/thumbnails/accessories_1/horns2_thumb.png new file mode 100644 index 0000000..c56614e Binary files /dev/null and b/assets/thumbnails/accessories_1/horns2_thumb.png differ diff --git a/assets/thumbnails/accessories_1/horns_thumb.png b/assets/thumbnails/accessories_1/horns_thumb.png new file mode 100644 index 0000000..c291237 Binary files /dev/null and b/assets/thumbnails/accessories_1/horns_thumb.png differ diff --git a/assets/thumbnails/accessories_2/bells_thumb.png b/assets/thumbnails/accessories_2/bells_thumb.png new file mode 100644 index 0000000..0ee5c98 Binary files /dev/null and b/assets/thumbnails/accessories_2/bells_thumb.png differ diff --git a/assets/thumbnails/accessories_2/button_thumb.png b/assets/thumbnails/accessories_2/button_thumb.png new file mode 100644 index 0000000..76dc547 Binary files /dev/null and b/assets/thumbnails/accessories_2/button_thumb.png differ diff --git a/assets/thumbnails/accessories_2/collar_thumb.png b/assets/thumbnails/accessories_2/collar_thumb.png new file mode 100644 index 0000000..ff10685 Binary files /dev/null and b/assets/thumbnails/accessories_2/collar_thumb.png differ diff --git a/assets/thumbnails/accessories_2/ribbon_thumb.png b/assets/thumbnails/accessories_2/ribbon_thumb.png new file mode 100644 index 0000000..01dfbdf Binary files /dev/null and b/assets/thumbnails/accessories_2/ribbon_thumb.png differ diff --git a/assets/thumbnails/bangs/chunky_thumb.png b/assets/thumbnails/bangs/chunky_thumb.png new file mode 100644 index 0000000..e712175 Binary files /dev/null and b/assets/thumbnails/bangs/chunky_thumb.png differ diff --git a/assets/thumbnails/bangs/framed_thumb.png b/assets/thumbnails/bangs/framed_thumb.png new file mode 100644 index 0000000..88ea11e Binary files /dev/null and b/assets/thumbnails/bangs/framed_thumb.png differ diff --git a/assets/thumbnails/bangs/hime_thumb.png b/assets/thumbnails/bangs/hime_thumb.png new file mode 100644 index 0000000..6ec7944 Binary files /dev/null and b/assets/thumbnails/bangs/hime_thumb.png differ diff --git a/assets/thumbnails/bangs/messy_thumb.png b/assets/thumbnails/bangs/messy_thumb.png new file mode 100644 index 0000000..8886f2b Binary files /dev/null and b/assets/thumbnails/bangs/messy_thumb.png differ diff --git a/assets/thumbnails/bangs/part_thumb.png b/assets/thumbnails/bangs/part_thumb.png new file mode 100644 index 0000000..37535d8 Binary files /dev/null and b/assets/thumbnails/bangs/part_thumb.png differ diff --git a/assets/thumbnails/bangs/prince_thumb.png b/assets/thumbnails/bangs/prince_thumb.png new file mode 100644 index 0000000..64a32fc Binary files /dev/null and b/assets/thumbnails/bangs/prince_thumb.png differ diff --git a/assets/thumbnails/body/feral_body_thumb.png b/assets/thumbnails/body/feral_body_thumb.png new file mode 100644 index 0000000..bc66991 Binary files /dev/null and b/assets/thumbnails/body/feral_body_thumb.png differ diff --git a/assets/thumbnails/body/normal_body_thumb.png b/assets/thumbnails/body/normal_body_thumb.png new file mode 100644 index 0000000..22d7b4a Binary files /dev/null and b/assets/thumbnails/body/normal_body_thumb.png differ diff --git a/assets/thumbnails/ears/big_thumb.png b/assets/thumbnails/ears/big_thumb.png new file mode 100644 index 0000000..7ba6166 Binary files /dev/null and b/assets/thumbnails/ears/big_thumb.png differ diff --git a/assets/thumbnails/ears/bun_thumb.png b/assets/thumbnails/ears/bun_thumb.png new file mode 100644 index 0000000..d665cfc Binary files /dev/null and b/assets/thumbnails/ears/bun_thumb.png differ diff --git a/assets/thumbnails/ears/cat_thumb.png b/assets/thumbnails/ears/cat_thumb.png new file mode 100644 index 0000000..5b2a561 Binary files /dev/null and b/assets/thumbnails/ears/cat_thumb.png differ diff --git a/assets/thumbnails/ears/fox_thumb.png b/assets/thumbnails/ears/fox_thumb.png new file mode 100644 index 0000000..cde07b4 Binary files /dev/null and b/assets/thumbnails/ears/fox_thumb.png differ diff --git a/assets/thumbnails/ears/lop_thumb.png b/assets/thumbnails/ears/lop_thumb.png new file mode 100644 index 0000000..c960dae Binary files /dev/null and b/assets/thumbnails/ears/lop_thumb.png differ diff --git a/assets/thumbnails/ears/mouse_thumb.png b/assets/thumbnails/ears/mouse_thumb.png new file mode 100644 index 0000000..9ae68ff Binary files /dev/null and b/assets/thumbnails/ears/mouse_thumb.png differ diff --git a/assets/thumbnails/eyes/eye1_thumb.png b/assets/thumbnails/eyes/eye1_thumb.png new file mode 100644 index 0000000..8ca285f Binary files /dev/null and b/assets/thumbnails/eyes/eye1_thumb.png differ diff --git a/assets/thumbnails/eyes/eye2_thumb.png b/assets/thumbnails/eyes/eye2_thumb.png new file mode 100644 index 0000000..b86b453 Binary files /dev/null and b/assets/thumbnails/eyes/eye2_thumb.png differ diff --git a/assets/thumbnails/eyes/eye3_thumb.png b/assets/thumbnails/eyes/eye3_thumb.png new file mode 100644 index 0000000..d867e78 Binary files /dev/null and b/assets/thumbnails/eyes/eye3_thumb.png differ diff --git a/assets/thumbnails/eyes/eye4_thumb.png b/assets/thumbnails/eyes/eye4_thumb.png new file mode 100644 index 0000000..19e8246 Binary files /dev/null and b/assets/thumbnails/eyes/eye4_thumb.png differ diff --git a/assets/thumbnails/eyes/eye5_thumb.png b/assets/thumbnails/eyes/eye5_thumb.png new file mode 100644 index 0000000..fe5277e Binary files /dev/null and b/assets/thumbnails/eyes/eye5_thumb.png differ diff --git a/assets/thumbnails/hair/fluffy_thumb.png b/assets/thumbnails/hair/fluffy_thumb.png new file mode 100644 index 0000000..83fe4aa Binary files /dev/null and b/assets/thumbnails/hair/fluffy_thumb.png differ diff --git a/assets/thumbnails/hair/long_thumb.png b/assets/thumbnails/hair/long_thumb.png new file mode 100644 index 0000000..54a219a Binary files /dev/null and b/assets/thumbnails/hair/long_thumb.png differ diff --git a/assets/thumbnails/hair/medium_thumb.png b/assets/thumbnails/hair/medium_thumb.png new file mode 100644 index 0000000..c89ab02 Binary files /dev/null and b/assets/thumbnails/hair/medium_thumb.png differ diff --git a/assets/thumbnails/hair/messy_thumb.png b/assets/thumbnails/hair/messy_thumb.png new file mode 100644 index 0000000..7e200e0 Binary files /dev/null and b/assets/thumbnails/hair/messy_thumb.png differ diff --git a/assets/thumbnails/hair/pigtails_thumb.png b/assets/thumbnails/hair/pigtails_thumb.png new file mode 100644 index 0000000..bb89ae0 Binary files /dev/null and b/assets/thumbnails/hair/pigtails_thumb.png differ diff --git a/assets/thumbnails/hair/swoop_thumb.png b/assets/thumbnails/hair/swoop_thumb.png new file mode 100644 index 0000000..5288c1d Binary files /dev/null and b/assets/thumbnails/hair/swoop_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/fluffy_h_thumb.png b/assets/thumbnails/hair_highlights/fluffy_h_thumb.png new file mode 100644 index 0000000..685c7e9 Binary files /dev/null and b/assets/thumbnails/hair_highlights/fluffy_h_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/fluffy_ombre_thumb.png b/assets/thumbnails/hair_highlights/fluffy_ombre_thumb.png new file mode 100644 index 0000000..b727cd3 Binary files /dev/null and b/assets/thumbnails/hair_highlights/fluffy_ombre_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/fluffy_split_thumb.png b/assets/thumbnails/hair_highlights/fluffy_split_thumb.png new file mode 100644 index 0000000..439dc13 Binary files /dev/null and b/assets/thumbnails/hair_highlights/fluffy_split_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/fluffy_streak_thumb.png b/assets/thumbnails/hair_highlights/fluffy_streak_thumb.png new file mode 100644 index 0000000..73c7f92 Binary files /dev/null and b/assets/thumbnails/hair_highlights/fluffy_streak_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/long_h_thumb.png b/assets/thumbnails/hair_highlights/long_h_thumb.png new file mode 100644 index 0000000..6c32271 Binary files /dev/null and b/assets/thumbnails/hair_highlights/long_h_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/long_ombre_thumb.png b/assets/thumbnails/hair_highlights/long_ombre_thumb.png new file mode 100644 index 0000000..b0409bb Binary files /dev/null and b/assets/thumbnails/hair_highlights/long_ombre_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/long_split_thumb.png b/assets/thumbnails/hair_highlights/long_split_thumb.png new file mode 100644 index 0000000..5b841a6 Binary files /dev/null and b/assets/thumbnails/hair_highlights/long_split_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/long_streak_thumb.png b/assets/thumbnails/hair_highlights/long_streak_thumb.png new file mode 100644 index 0000000..4c17c4d Binary files /dev/null and b/assets/thumbnails/hair_highlights/long_streak_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/medium_h_thumb.png b/assets/thumbnails/hair_highlights/medium_h_thumb.png new file mode 100644 index 0000000..48f1235 Binary files /dev/null and b/assets/thumbnails/hair_highlights/medium_h_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/medium_ombre_thumb.png b/assets/thumbnails/hair_highlights/medium_ombre_thumb.png new file mode 100644 index 0000000..cc2f344 Binary files /dev/null and b/assets/thumbnails/hair_highlights/medium_ombre_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/medium_split_thumb.png b/assets/thumbnails/hair_highlights/medium_split_thumb.png new file mode 100644 index 0000000..57b3f47 Binary files /dev/null and b/assets/thumbnails/hair_highlights/medium_split_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/medium_streak_thumb.png b/assets/thumbnails/hair_highlights/medium_streak_thumb.png new file mode 100644 index 0000000..f60b7cf Binary files /dev/null and b/assets/thumbnails/hair_highlights/medium_streak_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/messy_h_thumb.png b/assets/thumbnails/hair_highlights/messy_h_thumb.png new file mode 100644 index 0000000..672ad0c Binary files /dev/null and b/assets/thumbnails/hair_highlights/messy_h_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/messy_ombre_thumb.png b/assets/thumbnails/hair_highlights/messy_ombre_thumb.png new file mode 100644 index 0000000..ff17c75 Binary files /dev/null and b/assets/thumbnails/hair_highlights/messy_ombre_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/messy_split_thumb.png b/assets/thumbnails/hair_highlights/messy_split_thumb.png new file mode 100644 index 0000000..bb5f72c Binary files /dev/null and b/assets/thumbnails/hair_highlights/messy_split_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/messy_streak_thumb.png b/assets/thumbnails/hair_highlights/messy_streak_thumb.png new file mode 100644 index 0000000..e98592d Binary files /dev/null and b/assets/thumbnails/hair_highlights/messy_streak_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/pigtails_h_thumb.png b/assets/thumbnails/hair_highlights/pigtails_h_thumb.png new file mode 100644 index 0000000..9c46bb4 Binary files /dev/null and b/assets/thumbnails/hair_highlights/pigtails_h_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/pigtails_ombre_thumb.png b/assets/thumbnails/hair_highlights/pigtails_ombre_thumb.png new file mode 100644 index 0000000..ac9d3fc Binary files /dev/null and b/assets/thumbnails/hair_highlights/pigtails_ombre_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/pigtails_split_thumb.png b/assets/thumbnails/hair_highlights/pigtails_split_thumb.png new file mode 100644 index 0000000..15912b1 Binary files /dev/null and b/assets/thumbnails/hair_highlights/pigtails_split_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/pigtails_streak_thumb.png b/assets/thumbnails/hair_highlights/pigtails_streak_thumb.png new file mode 100644 index 0000000..d2cdb41 Binary files /dev/null and b/assets/thumbnails/hair_highlights/pigtails_streak_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/swoop_h_thumb.png b/assets/thumbnails/hair_highlights/swoop_h_thumb.png new file mode 100644 index 0000000..799fd02 Binary files /dev/null and b/assets/thumbnails/hair_highlights/swoop_h_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/swoop_ombre_thumb.png b/assets/thumbnails/hair_highlights/swoop_ombre_thumb.png new file mode 100644 index 0000000..7eb9fc3 Binary files /dev/null and b/assets/thumbnails/hair_highlights/swoop_ombre_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/swoop_split_thumb.png b/assets/thumbnails/hair_highlights/swoop_split_thumb.png new file mode 100644 index 0000000..fdb5efd Binary files /dev/null and b/assets/thumbnails/hair_highlights/swoop_split_thumb.png differ diff --git a/assets/thumbnails/hair_highlights/swoop_streak_thumb.png b/assets/thumbnails/hair_highlights/swoop_streak_thumb.png new file mode 100644 index 0000000..c98412d Binary files /dev/null and b/assets/thumbnails/hair_highlights/swoop_streak_thumb.png differ diff --git a/assets/thumbnails/markings/feral_h_thumb.png b/assets/thumbnails/markings/feral_h_thumb.png new file mode 100644 index 0000000..1f41111 Binary files /dev/null and b/assets/thumbnails/markings/feral_h_thumb.png differ diff --git a/assets/thumbnails/markings/feral_ombre_thumb.png b/assets/thumbnails/markings/feral_ombre_thumb.png new file mode 100644 index 0000000..803ee33 Binary files /dev/null and b/assets/thumbnails/markings/feral_ombre_thumb.png differ diff --git a/assets/thumbnails/markings/feral_patchy_thumb.png b/assets/thumbnails/markings/feral_patchy_thumb.png new file mode 100644 index 0000000..c8f7469 Binary files /dev/null and b/assets/thumbnails/markings/feral_patchy_thumb.png differ diff --git a/assets/thumbnails/markings/feral_stripes_thumb.png b/assets/thumbnails/markings/feral_stripes_thumb.png new file mode 100644 index 0000000..00cb31e Binary files /dev/null and b/assets/thumbnails/markings/feral_stripes_thumb.png differ diff --git a/assets/thumbnails/markings/normal_h_thumb.png b/assets/thumbnails/markings/normal_h_thumb.png new file mode 100644 index 0000000..c2c39e9 Binary files /dev/null and b/assets/thumbnails/markings/normal_h_thumb.png differ diff --git a/assets/thumbnails/markings/normal_ombre_thumb.png b/assets/thumbnails/markings/normal_ombre_thumb.png new file mode 100644 index 0000000..40a5df9 Binary files /dev/null and b/assets/thumbnails/markings/normal_ombre_thumb.png differ diff --git a/assets/thumbnails/markings/normal_patchy_thumb.png b/assets/thumbnails/markings/normal_patchy_thumb.png new file mode 100644 index 0000000..d31694e Binary files /dev/null and b/assets/thumbnails/markings/normal_patchy_thumb.png differ diff --git a/assets/thumbnails/markings/normal_stripes_thumb.png b/assets/thumbnails/markings/normal_stripes_thumb.png new file mode 100644 index 0000000..ca8cebd Binary files /dev/null and b/assets/thumbnails/markings/normal_stripes_thumb.png differ diff --git a/assets/thumbnails/mouths/grin_thumb.png b/assets/thumbnails/mouths/grin_thumb.png new file mode 100644 index 0000000..35f5f5a Binary files /dev/null and b/assets/thumbnails/mouths/grin_thumb.png differ diff --git a/assets/thumbnails/mouths/pout_thumb.png b/assets/thumbnails/mouths/pout_thumb.png new file mode 100644 index 0000000..f20667c Binary files /dev/null and b/assets/thumbnails/mouths/pout_thumb.png differ diff --git a/assets/thumbnails/mouths/smile_thumb.png b/assets/thumbnails/mouths/smile_thumb.png new file mode 100644 index 0000000..26297bc Binary files /dev/null and b/assets/thumbnails/mouths/smile_thumb.png differ diff --git a/assets/thumbnails/skin/skin_1_thumb.png b/assets/thumbnails/skin/skin_1_thumb.png new file mode 100644 index 0000000..4cd6679 Binary files /dev/null and b/assets/thumbnails/skin/skin_1_thumb.png differ diff --git a/assets/thumbnails/skin/skin_2_thumb.png b/assets/thumbnails/skin/skin_2_thumb.png new file mode 100644 index 0000000..c22cb09 Binary files /dev/null and b/assets/thumbnails/skin/skin_2_thumb.png differ diff --git a/assets/thumbnails/skin/skin_3_thumb.png b/assets/thumbnails/skin/skin_3_thumb.png new file mode 100644 index 0000000..4e96791 Binary files /dev/null and b/assets/thumbnails/skin/skin_3_thumb.png differ diff --git a/assets/thumbnails/skin/skin_4_thumb.png b/assets/thumbnails/skin/skin_4_thumb.png new file mode 100644 index 0000000..2cd3259 Binary files /dev/null and b/assets/thumbnails/skin/skin_4_thumb.png differ diff --git a/assets/thumbnails/skin/skin_5_thumb.png b/assets/thumbnails/skin/skin_5_thumb.png new file mode 100644 index 0000000..d3e18d4 Binary files /dev/null and b/assets/thumbnails/skin/skin_5_thumb.png differ diff --git a/assets/thumbnails/skin/skin_6_thumb.png b/assets/thumbnails/skin/skin_6_thumb.png new file mode 100644 index 0000000..72f7741 Binary files /dev/null and b/assets/thumbnails/skin/skin_6_thumb.png differ diff --git a/assets/thumbnails/skin/skin_7_thumb.png b/assets/thumbnails/skin/skin_7_thumb.png new file mode 100644 index 0000000..d089f46 Binary files /dev/null and b/assets/thumbnails/skin/skin_7_thumb.png differ diff --git a/assets/thumbnails/tail_markings/bob_bottom_thumb.png b/assets/thumbnails/tail_markings/bob_bottom_thumb.png new file mode 100644 index 0000000..a30dea0 Binary files /dev/null and b/assets/thumbnails/tail_markings/bob_bottom_thumb.png differ diff --git a/assets/thumbnails/tail_markings/bob_top_thumb.png b/assets/thumbnails/tail_markings/bob_top_thumb.png new file mode 100644 index 0000000..96c5b06 Binary files /dev/null and b/assets/thumbnails/tail_markings/bob_top_thumb.png differ diff --git a/assets/thumbnails/tail_markings/long_h_thumb.png b/assets/thumbnails/tail_markings/long_h_thumb.png new file mode 100644 index 0000000..b9ec744 Binary files /dev/null and b/assets/thumbnails/tail_markings/long_h_thumb.png differ diff --git a/assets/thumbnails/tail_markings/long_ombre_thumb.png b/assets/thumbnails/tail_markings/long_ombre_thumb.png new file mode 100644 index 0000000..c5c9cf5 Binary files /dev/null and b/assets/thumbnails/tail_markings/long_ombre_thumb.png differ diff --git a/assets/thumbnails/tail_markings/long_stripe_thumb.png b/assets/thumbnails/tail_markings/long_stripe_thumb.png new file mode 100644 index 0000000..84c9fe2 Binary files /dev/null and b/assets/thumbnails/tail_markings/long_stripe_thumb.png differ diff --git a/assets/thumbnails/tail_markings/long_tip_thumb.png b/assets/thumbnails/tail_markings/long_tip_thumb.png new file mode 100644 index 0000000..098b0f9 Binary files /dev/null and b/assets/thumbnails/tail_markings/long_tip_thumb.png differ diff --git a/assets/thumbnails/tail_markings/medium_h_thumb.png b/assets/thumbnails/tail_markings/medium_h_thumb.png new file mode 100644 index 0000000..7c26999 Binary files /dev/null and b/assets/thumbnails/tail_markings/medium_h_thumb.png differ diff --git a/assets/thumbnails/tail_markings/medium_ombre_thumb.png b/assets/thumbnails/tail_markings/medium_ombre_thumb.png new file mode 100644 index 0000000..34277d8 Binary files /dev/null and b/assets/thumbnails/tail_markings/medium_ombre_thumb.png differ diff --git a/assets/thumbnails/tail_markings/medium_stripe_thumb.png b/assets/thumbnails/tail_markings/medium_stripe_thumb.png new file mode 100644 index 0000000..0591dde Binary files /dev/null and b/assets/thumbnails/tail_markings/medium_stripe_thumb.png differ diff --git a/assets/thumbnails/tail_markings/medium_tip_thumb.png b/assets/thumbnails/tail_markings/medium_tip_thumb.png new file mode 100644 index 0000000..76ee0ac Binary files /dev/null and b/assets/thumbnails/tail_markings/medium_tip_thumb.png differ diff --git a/assets/thumbnails/tail_markings/thick_h_thumb.png b/assets/thumbnails/tail_markings/thick_h_thumb.png new file mode 100644 index 0000000..edf02ce Binary files /dev/null and b/assets/thumbnails/tail_markings/thick_h_thumb.png differ diff --git a/assets/thumbnails/tail_markings/thick_ombre_thumb.png b/assets/thumbnails/tail_markings/thick_ombre_thumb.png new file mode 100644 index 0000000..2c46d50 Binary files /dev/null and b/assets/thumbnails/tail_markings/thick_ombre_thumb.png differ diff --git a/assets/thumbnails/tail_markings/thick_stripe_thumb.png b/assets/thumbnails/tail_markings/thick_stripe_thumb.png new file mode 100644 index 0000000..a909569 Binary files /dev/null and b/assets/thumbnails/tail_markings/thick_stripe_thumb.png differ diff --git a/assets/thumbnails/tail_markings/thin_ombre_thumb.png b/assets/thumbnails/tail_markings/thin_ombre_thumb.png new file mode 100644 index 0000000..d4b6322 Binary files /dev/null and b/assets/thumbnails/tail_markings/thin_ombre_thumb.png differ diff --git a/assets/thumbnails/tail_markings/thin_spots_thumb.png b/assets/thumbnails/tail_markings/thin_spots_thumb.png new file mode 100644 index 0000000..f926806 Binary files /dev/null and b/assets/thumbnails/tail_markings/thin_spots_thumb.png differ diff --git a/assets/thumbnails/tail_markings/thin_stripes_thumb.png b/assets/thumbnails/tail_markings/thin_stripes_thumb.png new file mode 100644 index 0000000..c5f6c87 Binary files /dev/null and b/assets/thumbnails/tail_markings/thin_stripes_thumb.png differ diff --git a/assets/thumbnails/tails/bob_thumb.png b/assets/thumbnails/tails/bob_thumb.png new file mode 100644 index 0000000..df8d98f Binary files /dev/null and b/assets/thumbnails/tails/bob_thumb.png differ diff --git a/assets/thumbnails/tails/long_thumb.png b/assets/thumbnails/tails/long_thumb.png new file mode 100644 index 0000000..96f0592 Binary files /dev/null and b/assets/thumbnails/tails/long_thumb.png differ diff --git a/assets/thumbnails/tails/medium_thumb.png b/assets/thumbnails/tails/medium_thumb.png new file mode 100644 index 0000000..03889b8 Binary files /dev/null and b/assets/thumbnails/tails/medium_thumb.png differ diff --git a/assets/thumbnails/tails/thick_thumb.png b/assets/thumbnails/tails/thick_thumb.png new file mode 100644 index 0000000..c6e9030 Binary files /dev/null and b/assets/thumbnails/tails/thick_thumb.png differ diff --git a/assets/thumbnails/tails/thin_thumb.png b/assets/thumbnails/tails/thin_thumb.png new file mode 100644 index 0000000..bc1b240 Binary files /dev/null and b/assets/thumbnails/tails/thin_thumb.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..b7fe58e --- /dev/null +++ b/index.html @@ -0,0 +1,29 @@ + + + + + + Build-A-Borrower + + + + +

Build-A-Borrower

+
+
+
+
+
+ +
+
+ +
+
+
+ + +
+ + + diff --git a/scripts.js b/scripts.js new file mode 100644 index 0000000..24d9fcf --- /dev/null +++ b/scripts.js @@ -0,0 +1,310 @@ +let configData = {}; +let currentTab = 'body'; +const currentFilename = {}; +const palettes = {}; + +// Tab switching and palette rendering +function showTab(tab) { + currentTab = tab; + + // Activate corresponding tab content + document.querySelectorAll('.tab-content').forEach(c => + c.classList.remove('active') + ); + document.getElementById(tab)?.classList.add('active'); + + // Activate corresponding tab button + document.querySelectorAll('.tab-button').forEach(b => + b.classList.remove('active') + ); + document + .querySelector(`.tab-button[data-tab="${tab}"]`) + ?.classList.add('active'); + + renderPalette(); + + const dependencyKey = configData.dependencies?.[tab]; + if (dependencyKey) { + filterDependentThumbnails(tab, dependencyKey); + } + } + + +function renderPalette() { + const palette = document.getElementById('colorPalette'); + palette.innerHTML = ''; + + const colors = palettes[currentTab] || []; + + if (colors.length) { + palette.style.display = 'flex'; + + colors.forEach(color => { + const btn = document.createElement('button'); + btn.className = 'color-swatch'; + btn.style.background = color; + btn.onclick = () => applyColor(color); + palette.appendChild(btn); + }); + } else { + palette.style.display = 'none'; + } +} + +function filterDependentThumbnails(tabId, dependsOn) { + const raw = currentFilename[dependsOn] || ''; + const base = raw.split('_')[0].toLowerCase(); + + const thumbs = document.querySelectorAll(`#${tabId} .thumbnail`); + thumbs.forEach(img => { + const name = img.src.split('/').pop().split('.')[0].toLowerCase(); + if ( + name === 'none' || + !base || + name.startsWith(base + '_') + ) { + img.style.display = ''; + } else { + img.style.display = 'none'; + } + }); +} + +function pickRandom(arr) { + return arr[Math.floor(Math.random() * arr.length)] || null; +} + +function randomizeAvatar() { + const baseLayers = Object.keys(configData.categories) + .filter(cat => !Object.keys(configData.dependencies || {}).includes(cat)); + + // Step 1: Randomize base layers + baseLayers.forEach(feature => { + const validImages = configData.categories[feature] + .filter(name => name !== 'none'); + + const choice = pickRandom(validImages); + + if (choice) { + const fullImagePath = `assets/${feature}/${choice}.png`; + updateLayer(feature, fullImagePath); + } else { + const fallbackImage = `assets/${feature}/default.png`; + updateLayer(feature, fallbackImage); + } + }); + + // Step 2: Wait a moment before applying dependent layers + setTimeout(() => { + const dependents = configData.dependencies || {}; + Object.entries(dependents).forEach(([depTab, baseTab]) => { + const raw = currentFilename[baseTab] || ''; + const base = raw.split('_')[0].toLowerCase(); + const options = configData.categories[depTab] || []; + const valid = options.filter(opt => opt.startsWith(base + '_')); + + const choice = pickRandom(valid); + if (choice) { + const fullImagePath = `assets/${depTab}/${choice}.png`; + updateLayer(depTab, fullImagePath); + } else { + removeLayer(depTab); + } + }); + }, 100); // Slight delay ensures base layers have updated currentFilename + } + + +async function loadAssetConfig() { + const response = await fetch('assets/config.json'); + const config = await response.json(); + configData = config; + + Object.assign(palettes, config.colors || {}); + const tabWrapper = document.getElementById('tabs'); + const contentWrapper = document.getElementById('tabContents'); + + Object.keys(config.categories).forEach((category, index) => { + // Create tab button + const btn = document.createElement('button'); + btn.className = 'tab-button'; + btn.textContent = category.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()); + btn.onclick = () => showTab(category); + if (index === 0) btn.classList.add('active'); + tabWrapper.appendChild(btn); + btn.setAttribute('data-tab', category); + + // Create tab content div + const div = document.createElement('div'); + div.id = category; + div.className = 'tab-content'; + if (index === 0) div.classList.add('active'); + contentWrapper.appendChild(div); + + // Add 'none' thumbnail + const noneImg = document.createElement('img'); + noneImg.src = `assets/none.png`; + noneImg.classList.add('thumbnail'); + noneImg.onclick = () => removeLayer(category); + div.appendChild(noneImg); + + // Add each asset + config.categories[category].forEach(name => { + const fullSrc = `assets/${category}/${name}.png`; + const thumbSrc = `assets/thumbnails/${category}/${name}_thumb.png`; + + const thumbImg = document.createElement('img'); + thumbImg.src = thumbSrc; + thumbImg.classList.add('thumbnail'); + thumbImg.onclick = () => updateLayer(category, fullSrc); + div.appendChild(thumbImg); + + // Fallback for thumbnail not loading + thumbImg.onerror = () => { + thumbImg.src = fullSrc; + }; + }); + + + + }); + const avatarContainer = document.getElementById('avatarContainer'); + avatarContainer.innerHTML = ''; // Clear any existing layers + + config.layers.forEach(layer => { + const img = document.createElement('img'); + img.id = 'layer-' + layer; + img.src = ''; + img.style.display = 'none'; // hide by default + img.alt = layer.replace(/_/g, ' '); + avatarContainer.appendChild(img); + }); + randomizeAvatar(); + } + function updateLayer(layer, src) { + const img = document.getElementById('layer-' + layer); + if (img) { + const newFilename = src.split('/').pop().split('.')[0]; + currentFilename[layer] = newFilename; + img.src = src; + img.style.display = ''; + + // Check and fix dependent layers if any + Object.entries(configData.dependencies || {}).forEach(([dependent, base]) => { + if (base === layer) { + const dependentImg = document.getElementById('layer-' + dependent); + const dependentFilename = currentFilename[dependent] || ''; + const basePrefix = newFilename.split('_')[0].toLowerCase(); + + // If dependent layer is incompatible, reset it + if ( + dependentFilename && + dependentFilename !== 'none' && + !dependentFilename.startsWith(basePrefix + '_') + ) { + removeLayer(dependent); + currentFilename[dependent] = 'none'; + } + } + }); + } else { + console.error(`Layer ${layer} not found`); + } + } + + + function removeLayer(layer) { + const img = document.getElementById('layer-' + layer); + if (img) { + img.style.display = 'none'; + currentFilename[layer] = 'none'; + } + } + + +function applyColor(color) { + const fname = currentFilename[currentTab]; + document.getElementById('layer-' + currentTab).src = `assets/${currentTab}/${fname}_${color}.png`; +} + +function scrollTabs(dir) { + document.getElementById('tabs').scrollLeft += dir * 100; +} + +function downloadAvatar() { + const orderedLayers = configData.layers || []; + + const srcs = orderedLayers + .map(id => document.getElementById('layer-' + id)) + .filter(el => el && el.src && !el.src.endsWith('none.png') && el.style.display !== 'none') + .map(el => el.src); + + + if (!srcs.length) { + alert("Nothing to download!"); + return; + } + + const first = new Image(); + first.onload = () => { + const W = first.naturalWidth; + const H = first.naturalHeight; + const canvas = document.createElement('canvas'); + canvas.width = W; + canvas.height = H; + const ctx = canvas.getContext('2d'); + + const draws = srcs.map(src => + new Promise((res, rej) => { + const img = new Image(); + img.onload = () => { + ctx.drawImage(img, 0, 0, W, H); + res(); + }; + img.onerror = rej; + img.src = src; + }) + ); + + Promise.all(draws).then(() => { + canvas.toBlob(blob => { + const link = document.createElement('a'); + link.download = 'avatar.png'; + link.href = URL.createObjectURL(blob); + link.click(); + }); + }); + }; + first.onerror = () => alert("Failed to load image."); + first.src = srcs[0]; +} + +// Initialize the app +window.addEventListener('DOMContentLoaded', () => { + loadAssetConfig(); +}); + +// Leaf animation remains unchanged... + + + // Falling leaf animation + function createLeaf() { + const leaf = document.createElement('div'); + leaf.classList.add('leaf'); + leaf.style.left = Math.random() * window.innerWidth + 'px'; + leaf.style.animationDuration = (5 + Math.random() * 5) + 's'; + leaf.style.animationDelay = Math.random() * 5 + 's'; + document.body.appendChild(leaf); + } + + // Spawn initial leaves + for (let i = 0; i < 15; i++) { + createLeaf(); + } + + // Maintain leaf count + setInterval(() => { + if (document.querySelectorAll('.leaf').length < 30) { + createLeaf(); + } + }, 1000); \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..1e80241 --- /dev/null +++ b/styles.css @@ -0,0 +1,277 @@ +/* Variables */ +:root { + --primary-green: #88b378; + --light-green: #eaf5ea; + --dark-green: #2e7031; + --off-white: #f9fdf9; +} + +/* Global Styles */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +body { + background: linear-gradient(135deg, #a8d5a2, #e6f2e6); + background-attachment: fixed; + color: #2f4f2f; + font-family: 'Inter', sans-serif; + margin: 0; + min-height: 100vh; + overflow-x: hidden; + padding: 20px; + position: relative; +} + +h1 { + font-family: 'Poppins', sans-serif; + font-size: 2.2rem; + margin-bottom: 30px; + text-align: center; +} + +/* Avatar Container */ +.avatar-wrapper { + margin: 0 auto; + position: relative; + width: 100%; + max-width: 340px; + z-index: 1; +} + +.avatar-container { + background: var(--off-white); + border: 4px solid var(--primary-green); + border-radius: 16px; + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); + width: 100%; + aspect-ratio: 1678 / 2497; + overflow: hidden; + position: relative; +} + +.avatar-container img { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +/* Color Palette */ +.color-palette { + display: flex; + flex-direction: column; + gap: 6px; + position: absolute; + right: -60px; + top: 50%; + transform: translateY(-50%); +} + +.color-swatch { + border: 2px solid #888; + border-radius: 6px; + cursor: pointer; + height: 28px; + width: 28px; +} + +/* Tabs */ +.tabs-wrapper { + margin: 30px auto 20px; + position: relative; + width: 340px; +} + +.tabs { + background: var(--light-green); + border-radius: 10px; + display: flex; + gap: 6px; + overflow-x: auto; + padding: 8px; + scroll-behavior: smooth; + scrollbar-width: none; +} + +.tabs::-webkit-scrollbar { + display: none; +} + +.tab-button { + background: #cfe7cf; + border: none; + border-radius: 10px; + color: var(--dark-green); + cursor: pointer; + font-weight: 600; + padding: 6px 12px; + white-space: nowrap; + transition: background 0.3s ease, color 0.3s ease, transform 0.2s ease; +} + +.tab-button:hover, +.tab-button.active { + background: var(--primary-green); + color: white; +} + +/* Scroll Arrows */ +.scroll-arrow { + background: none; + border: none; + color: var(--dark-green); + cursor: pointer; + font-size: 1.5rem; + position: absolute; + top: 50%; + transform: translateY(-50%); +} + +.scroll-arrow:first-of-type { + left: -30px; +} + +.scroll-arrow:last-of-type { + right: -30px; +} + +/* Tab Content */ +.tab-content { + background: rgba(255, 255, 255, 0.6); + backdrop-filter: blur(8px); + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + display: none; + flex-wrap: wrap; + justify-content: center; + margin: 0 auto 20px; + padding: 12px; + width: 340px; +} + +.tab-content.active { + display: flex; +} + +/* Thumbnails */ +.thumbnail { + border: 2px solid transparent; + border-radius: 8px; + cursor: pointer; + height: 64px; + margin: 4px; + transition: border 0.3s ease, transform 0.3s ease; + width: 64px; +} + +.thumbnail:hover { + border-color: var(--dark-green); + transform: scale(1.05); +} + +/* Buttons */ +.buttons-wrapper { + display: flex; + justify-content: center; + gap: 12px; + margin: 20px auto; + width: fit-content; +} + +.download-button, +.random-button { + border: none; + border-radius: 12px; + box-shadow: 0 6px 14px rgba(0, 0, 0, 0.1); + color: white; + cursor: pointer; + display: inline-block; + font-size: 1rem; + font-weight: bold; + margin: 0; + padding: 14px 28px; + transition: background 0.3s; +} + +.download-button { + background: var(--dark-green); +} + +.download-button:hover { + background: #245725; +} + +.random-button { + background: var(--primary-green); +} + +.random-button:hover { + background: #6f9a5a; +} + +/* Falling Leaves */ +.leaf { + animation: fallAndSway linear infinite; + background: url('assets/leaf.png') no-repeat center/contain; + height: 24px; + opacity: 0.8; + pointer-events: none; + position: fixed; + top: -40px; + width: 24px; + z-index: -1; +} + +/* Animations */ +@keyframes fallAndSway { + 0% { + opacity: 0; + transform: translateX(0) translateY(-40px) rotate(0deg); + } + 10% { + opacity: 1; + } + 50% { + transform: translateX(15px) translateY(50vh) rotate(180deg); + } + 100% { + opacity: 0; + transform: translateX(0) translateY(100vh) rotate(360deg); + } +} + +/* Responsive */ +@media (max-width: 480px) { + .avatar-wrapper, + .tabs-wrapper, + .tab-content { + width: 90vw; + } + + .color-palette { + flex-direction: row; + justify-content: center; + margin-top: 10px; + position: static; + transform: none; + } + + .scroll-arrow { + display: none; + } +} + +.tab-content .thumbnail { + width: 64px; + height: 64px; + background: var(--off-white); +} + +/* Hide any “none.png” layers in the preview */ +.avatar-container img[src$="none.png"] { + display: none; +}