diff --git a/clean.sh b/clean.sh
new file mode 100755
index 0000000..6698dca
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cargo run --bin clean -- "$1"
+xmllint "$1" --format --output "$1"
diff --git a/species/blobamber/assets/owo.svg b/species/blobamber/assets/owo.svg
new file mode 100644
index 0000000..482e06e
--- /dev/null
+++ b/species/blobamber/assets/owo.svg
@@ -0,0 +1,46 @@
+
+
diff --git a/species/blobamber/species.toml b/species/blobamber/species.toml
index c6009b3..acb5569 100644
--- a/species/blobamber/species.toml
+++ b/species/blobamber/species.toml
@@ -1,2 +1,9 @@
name = "blobamber"
base = "../blobcat/"
+
+[vars]
+body_color = "#6a6862"
+ear_color = "#313131"
+ear_fluff_color = "#474747"
+hand_color = "#6a6862"
+tail_color = "#6a6862"
diff --git a/species/blobamber/templates/eyes.mustache b/species/blobamber/templates/eyes.mustache
index cff1a5f..b9efa84 100644
--- a/species/blobamber/templates/eyes.mustache
+++ b/species/blobamber/templates/eyes.mustache
@@ -1,3 +1,14 @@
+
+
+{{#blobamber.owo}}#blobamber-owo-defs{{/blobamber.owo}}
{{#blobamber.base}}#blobamber-defs{{/blobamber.base}}
-
-{{>blobcat.eyes}}
+
+{{#tags.eyes-owo}}
+
+ {{#owo}}#left-eye{{/owo}}
+ {{#owo}}#right-eye{{/owo}}
+
+{{/tags.eyes-owo}}
+{{^tags.eyes-owo}}
+ {{>blobcat.eyes}}
+{{/tags.eyes-owo}}
diff --git a/species/blobamber/templates/hands.mustache b/species/blobamber/templates/hands.mustache
index 342d878..1371796 100644
--- a/species/blobamber/templates/hands.mustache
+++ b/species/blobamber/templates/hands.mustache
@@ -7,9 +7,7 @@
{{/tags.holding}}
{{/tags.hand-3c}}
-{{#set-fill}}
- #6a6862 | {{>blobfox.hands}}
-{{/set-fill}}
+{{>blobcat.hands}}
{{#tags.hand-3c}}
diff --git a/species/blobcat/species.toml b/species/blobcat/species.toml
index 5e598ca..b712f45 100644
--- a/species/blobcat/species.toml
+++ b/species/blobcat/species.toml
@@ -1,2 +1,9 @@
name = "blobcat"
base = "../blobfox/"
+
+[vars]
+body_color = "#fcc21b"
+ear_color = "#e9ae20"
+ear_fluff_color = "#8a6135"
+hand_color = "#fcc21b"
+tail_color = "#fcc21b"
diff --git a/species/blobcat/templates/body-snug.mustache b/species/blobcat/templates/body-snug.mustache
index 6d06a08..aa2ab12 100644
--- a/species/blobcat/templates/body-snug.mustache
+++ b/species/blobcat/templates/body-snug.mustache
@@ -3,7 +3,10 @@
{{#base}}#left-ear{{/base}}
- {{#set-fill}}#fcc21b|{{#snug}}#body{{/snug}}{{/set-fill}}
+ {{#set-fill}}
+ {{vars.body_color}}
+ | {{#snug}}#body{{/snug}}
+ {{/set-fill}}
{{#base}}#right-ear{{/base}}
diff --git a/species/blobcat/templates/hands.mustache b/species/blobcat/templates/hands.mustache
index c49edc3..d4457ed 100644
--- a/species/blobcat/templates/hands.mustache
+++ b/species/blobcat/templates/hands.mustache
@@ -1,3 +1,3 @@
{{#set-fill}}
- #fcc21b | {{>blobfox.hands}}
+ {{vars.hand_color}} | {{>blobfox.hands}}
{{/set-fill}}
diff --git a/species/blobcat/templates/tail.mustache b/species/blobcat/templates/tail.mustache
index 21ef72c..640f6fe 100644
--- a/species/blobcat/templates/tail.mustache
+++ b/species/blobcat/templates/tail.mustache
@@ -1 +1,4 @@
-{{#set-fill}}#fcc21b|{{>blobfox.tail}}{{/set-fill}}
+{{#set-fill}}
+ {{vars.tail_color}}
+ | {{>blobfox.tail}}
+{{/set-fill}}
diff --git a/species/blobfox/species.toml b/species/blobfox/species.toml
index bad6c59..7a9949e 100644
--- a/species/blobfox/species.toml
+++ b/species/blobfox/species.toml
@@ -1,6 +1,13 @@
# Add options in here as needs be
name = "blobfox"
+[vars]
+body_color = "#ff8702"
+ear_color = "#313131"
+ear_fluff_color = "#3bdccc"
+hand_color = "#ff8702"
+tail_color = "#ff8702"
+
[variants]
base = ["body-basic", "eyes-basic", "mouth-w"]
happy = ["body-basic", "eyes-happy", "mouth-w"]
diff --git a/src/parse.rs b/src/parse.rs
index 3567cbd..a4aef5c 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -34,6 +34,9 @@ pub struct SpeciesDecl {
#[serde(default)]
pub variants: HashMap>,
+ #[serde(default)]
+ pub vars: HashMap,
+
#[serde(skip)]
pub template_paths: HashMap,
@@ -73,6 +76,11 @@ pub fn load_species(path: impl AsRef) -> Result {
res.variant_paths = base.variant_paths.clone();
res.asset_paths = base.asset_paths.clone();
res.variants = base.variants.clone();
+ for (key, value) in base.vars.iter() {
+ if !res.vars.contains_key(key) {
+ res.vars.insert(key.clone(), value.clone());
+ }
+ }
res.parent = Some(Box::new(base));
}
diff --git a/src/template.rs b/src/template.rs
index 58013cc..471efa9 100644
--- a/src/template.rs
+++ b/src/template.rs
@@ -124,6 +124,8 @@ impl RenderingContext {
}
});
+ builder = builder.insert("vars", &self.species.vars).unwrap();
+
if include_parent {
let mut this = self.clone();
diff --git a/vector/blobamber_owo.svg b/vector/blobamber_owo.svg
new file mode 100644
index 0000000..cb524e7
--- /dev/null
+++ b/vector/blobamber_owo.svg
@@ -0,0 +1,250 @@
+
+