From 18546d0ba51642dc25ed9acc4768b85e667c4703 Mon Sep 17 00:00:00 2001 From: Snowram Date: Sat, 25 Jul 2020 01:30:08 +0200 Subject: [PATCH 01/12] Skeleton rework with rough offsets --- voxygen/src/anim/Cargo.toml | 2 +- voxygen/src/anim/src/critter/idle.rs | 16 ++-- voxygen/src/anim/src/critter/jump.rs | 16 ++-- voxygen/src/anim/src/critter/mod.rs | 59 ++++++------ voxygen/src/anim/src/critter/run.rs | 16 ++-- voxygen/src/anim/src/dragon/idle.rs | 4 +- voxygen/src/anim/src/dragon/mod.rs | 14 +-- voxygen/src/anim/src/quadruped_small/idle.rs | 20 ++--- voxygen/src/anim/src/quadruped_small/jump.rs | 20 ++--- voxygen/src/anim/src/quadruped_small/mod.rs | 94 ++++++++++---------- voxygen/src/anim/src/quadruped_small/run.rs | 20 ++--- 11 files changed, 141 insertions(+), 140 deletions(-) diff --git a/voxygen/src/anim/Cargo.toml b/voxygen/src/anim/Cargo.toml index ab4d0e2bfe..92ce71acb0 100644 --- a/voxygen/src/anim/Cargo.toml +++ b/voxygen/src/anim/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" name = "voxygen_anim" # Uncomment to use animation hot reloading # Note: this breaks `cargo test` -# crate-type = ["lib", "cdylib"] +crate-type = ["lib", "cdylib"] [features] use-dyn-lib = ["libloading", "notify", "lazy_static", "tracing", "find_folder"] diff --git a/voxygen/src/anim/src/critter/idle.rs b/voxygen/src/anim/src/critter/idle.rs index b4adcdb537..ea9a108365 100644 --- a/voxygen/src/anim/src/critter/idle.rs +++ b/voxygen/src/anim/src/critter/idle.rs @@ -37,10 +37,10 @@ impl Animation for IdleAnimation { .sin() * 0.25, ); - next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 18.0; + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); next.head.ori = Quaternion::rotation_z(rat_head_look.x) * Quaternion::rotation_x(rat_head_look.y + wave * 0.03); - next.head.scale = Vec3::one() / 18.0; + next.head.scale = Vec3::one(); next.chest.offset = Vec3::new( 0.0, @@ -50,18 +50,18 @@ impl Animation for IdleAnimation { next.chest.ori = Quaternion::rotation_y(wave_slow * 0.06); next.chest.scale = Vec3::one() / 18.0; - next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1) / 18.0; + next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1 + 3.0); next.feet_f.ori = Quaternion::rotation_z(0.0); - next.feet_f.scale = Vec3::one() / 18.0; + next.feet_f.scale = Vec3::one(); - next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1) / 18.0; + next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1 + 3.0); next.feet_b.ori = Quaternion::rotation_x(0.0); - next.feet_b.scale = Vec3::one() / 18.0; + next.feet_b.scale = Vec3::one(); next.tail.offset = - Vec3::new(0.0, skeleton_attr.tail.0 + wave * 0.2, skeleton_attr.tail.1) / 18.0; + Vec3::new(0.0, skeleton_attr.tail.0 + wave * 0.2, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_y(wave_slow * 0.05); - next.tail.scale = Vec3::one() / 18.0; + next.tail.scale = Vec3::one(); next } diff --git a/voxygen/src/anim/src/critter/jump.rs b/voxygen/src/anim/src/critter/jump.rs index b4c5a0b57f..8279d321bb 100644 --- a/voxygen/src/anim/src/critter/jump.rs +++ b/voxygen/src/anim/src/critter/jump.rs @@ -21,25 +21,25 @@ impl Animation for JumpAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 18.0; + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); next.head.ori = Quaternion::rotation_z(0.8) * Quaternion::rotation_x(0.5); - next.head.scale = Vec3::one() / 18.0; + next.head.scale = Vec3::one(); next.chest.offset = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) / 18.0; next.chest.ori = Quaternion::rotation_y(0.0); next.chest.scale = Vec3::one() / 18.0; - next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1) / 18.0; + next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); next.feet_f.ori = Quaternion::rotation_z(0.0); - next.feet_f.scale = Vec3::one() / 18.0; + next.feet_f.scale = Vec3::one(); - next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1) / 18.0; + next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1); next.feet_b.ori = Quaternion::rotation_x(0.0); - next.feet_b.scale = Vec3::one() / 18.0; + next.feet_b.scale = Vec3::one(); - next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1) / 18.0; + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_y(0.0); - next.tail.scale = Vec3::one() / 18.0; + next.tail.scale = Vec3::one(); next } diff --git a/voxygen/src/anim/src/critter/mod.rs b/voxygen/src/anim/src/critter/mod.rs index b83114adc1..2fe638803e 100644 --- a/voxygen/src/anim/src/critter/mod.rs +++ b/voxygen/src/anim/src/critter/mod.rs @@ -40,13 +40,14 @@ impl Skeleton for CritterSkeleton { #[cfg_attr(feature = "be-dyn-lib", export_name = "critter_compute_mats")] fn compute_matrices_inner(&self) -> ([FigureBoneData; 16], Vec3) { + let chest_mat = self.chest.compute_base_matrix(); ( [ - FigureBoneData::new(self.head.compute_base_matrix()), - FigureBoneData::new(self.chest.compute_base_matrix()), - FigureBoneData::new(self.feet_f.compute_base_matrix()), - FigureBoneData::new(self.feet_b.compute_base_matrix()), - FigureBoneData::new(self.tail.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.head.compute_base_matrix()), + FigureBoneData::new(chest_mat), + FigureBoneData::new(chest_mat * self.feet_f.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.feet_b.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.tail.compute_base_matrix()), FigureBoneData::default(), FigureBoneData::default(), FigureBoneData::default(), @@ -109,12 +110,12 @@ impl<'a> From<&'a comp::critter::Body> for CritterAttr { use comp::critter::Species::*; Self { head: match (body.species, body.body_type) { - (Rat, _) => (6.5, 7.0), - (Axolotl, _) => (5.0, 5.0), - (Gecko, _) => (5.0, 4.0), - (Turtle, _) => (8.0, 7.0), - (Squirrel, _) => (5.0, 4.0), - (Fungome, _) => (4.0, 4.0), + (Rat, _) => (6.5, 3.0), + (Axolotl, _) => (5.0, 1.0), + (Gecko, _) => (5.0, 0.0), + (Turtle, _) => (8.0, 3.0), + (Squirrel, _) => (5.0, 0.0), + (Fungome, _) => (4.0, 0.0), }, chest: match (body.species, body.body_type) { (Rat, _) => (0.0, 6.0), @@ -125,28 +126,28 @@ impl<'a> From<&'a comp::critter::Body> for CritterAttr { (Fungome, _) => (0.0, 5.0), }, feet_f: match (body.species, body.body_type) { - (Rat, _) => (2.0, 0.5), - (Axolotl, _) => (2.0, 0.5), - (Gecko, _) => (1.0, 0.5), - (Turtle, _) => (3.0, 0.5), - (Squirrel, _) => (1.0, 0.5), - (Fungome, _) => (1.0, 0.5), + (Rat, _) => (2.0, -5.0), + (Axolotl, _) => (2.0, -5.0), + (Gecko, _) => (1.0, -2.0), + (Turtle, _) => (3.0, -5.0), + (Squirrel, _) => (1.0, -2.0), + (Fungome, _) => (1.0, -4.0), }, feet_b: match (body.species, body.body_type) { - (Rat, _) => (-2.0, 0.5), - (Axolotl, _) => (-2.0, 0.5), - (Gecko, _) => (-2.0, 0.5), - (Turtle, _) => (-2.0, 0.5), - (Squirrel, _) => (-1.0, 0.5), - (Fungome, _) => (-2.0, 0.5), + (Rat, _) => (-2.0, -5.0), + (Axolotl, _) => (-2.0, -5.0), + (Gecko, _) => (-2.0, -2.0), + (Turtle, _) => (-2.0, -5.0), + (Squirrel, _) => (-1.0, -2.0), + (Fungome, _) => (-2.0, -4.0), }, tail: match (body.species, body.body_type) { - (Rat, _) => (-8.0, 3.0), - (Axolotl, _) => (-7.0, 3.0), - (Gecko, _) => (-7.0, 2.0), - (Turtle, _) => (-6.0, 4.0), - (Squirrel, _) => (-3.0, 4.0), - (Fungome, _) => (-6.0, 3.0), + (Rat, _) => (-8.0, -1.0), + (Axolotl, _) => (-7.0, -1.0), + (Gecko, _) => (-6.5, -2.0), + (Turtle, _) => (-6.0, 0.0), + (Squirrel, _) => (-3.0, 0.0), + (Fungome, _) => (-6.0, -1.0), }, } } diff --git a/voxygen/src/anim/src/critter/run.rs b/voxygen/src/anim/src/critter/run.rs index fac82204cc..64446c270d 100644 --- a/voxygen/src/anim/src/critter/run.rs +++ b/voxygen/src/anim/src/critter/run.rs @@ -26,9 +26,9 @@ impl Animation for RunAnimation { let wave_cos = (anim_time as f32 * 13.0).sin(); let wave_slow = (anim_time as f32 * 6.5 + PI).sin(); - next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 18.0; + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + wave * 0.03); - next.head.scale = Vec3::one() / 18.0; + next.head.scale = Vec3::one(); next.chest.offset = Vec3::new( 0.0, @@ -38,18 +38,18 @@ impl Animation for RunAnimation { next.chest.ori = Quaternion::rotation_y(wave_slow * 0.3); next.chest.scale = Vec3::one() / 18.0; - next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1) / 18.0; + next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); next.feet_f.ori = Quaternion::rotation_x(wave * 1.0); - next.feet_f.scale = Vec3::one() / 18.0; + next.feet_f.scale = Vec3::one(); - next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1) / 18.0; + next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1); next.feet_b.ori = Quaternion::rotation_x(wave_cos * 1.0); - next.feet_b.scale = Vec3::one() / 18.0; + next.feet_b.scale = Vec3::one(); next.tail.offset = - Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1) / 18.0; + Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_y(wave_slow * 0.08); - next.tail.scale = Vec3::one() / 18.0; + next.tail.scale = Vec3::one(); next } diff --git a/voxygen/src/anim/src/dragon/idle.rs b/voxygen/src/anim/src/dragon/idle.rs index f7967928d0..8da82fecb5 100644 --- a/voxygen/src/anim/src/dragon/idle.rs +++ b/voxygen/src/anim/src/dragon/idle.rs @@ -102,7 +102,7 @@ impl Animation for IdleAnimation { next.wing_out_l.offset = Vec3::new( -skeleton_attr.wing_out.0, skeleton_attr.wing_out.1, - skeleton_attr.wing_out.2 - 1.4, + skeleton_attr.wing_out.2, ); next.wing_out_l.ori = Quaternion::rotation_y(-2.0); next.wing_out_l.scale = Vec3::one(); @@ -110,7 +110,7 @@ impl Animation for IdleAnimation { next.wing_out_r.offset = Vec3::new( skeleton_attr.wing_out.0, skeleton_attr.wing_out.1, - skeleton_attr.wing_out.2 - 1.4, + skeleton_attr.wing_out.2, ); next.wing_out_r.ori = Quaternion::rotation_y(2.0); next.wing_out_r.scale = Vec3::one(); diff --git a/voxygen/src/anim/src/dragon/mod.rs b/voxygen/src/anim/src/dragon/mod.rs index ba01e7a5b9..218aa3485e 100644 --- a/voxygen/src/anim/src/dragon/mod.rs +++ b/voxygen/src/anim/src/dragon/mod.rs @@ -77,10 +77,10 @@ impl Skeleton for DragonSkeleton { FigureBoneData::new( chest_front_mat * wing_in_r_mat * self.wing_out_r.compute_base_matrix(), ), - FigureBoneData::new(self.foot_fl.compute_base_matrix()), - FigureBoneData::new(self.foot_fr.compute_base_matrix()), - FigureBoneData::new(self.foot_bl.compute_base_matrix()), - FigureBoneData::new(self.foot_br.compute_base_matrix()), + FigureBoneData::new(chest_front_mat * self.foot_fl.compute_base_matrix()), + FigureBoneData::new(chest_front_mat * self.foot_fr.compute_base_matrix()), + FigureBoneData::new(chest_front_mat * self.chest_rear.compute_base_matrix() * self.foot_bl.compute_base_matrix()), + FigureBoneData::new(chest_front_mat * self.chest_rear.compute_base_matrix() * self.foot_br.compute_base_matrix()), FigureBoneData::default(), ], Vec3::default(), @@ -165,7 +165,7 @@ impl<'a> From<&'a comp::dragon::Body> for SkeletonAttr { (Reddragon, _) => (6.5, -5.0), }, chest_front: match (body.species, body.body_type) { - (Reddragon, _) => (0.0, 14.0), + (Reddragon, _) => (0.0, 15.0), }, chest_rear: match (body.species, body.body_type) { (Reddragon, _) => (-12.5, 0.0), @@ -183,10 +183,10 @@ impl<'a> From<&'a comp::dragon::Body> for SkeletonAttr { (Reddragon, _) => (23.0, 0.5, 4.0), }, feet_f: match (body.species, body.body_type) { - (Reddragon, _) => (6.0, 0.0, 1.5), + (Reddragon, _) => (6.0, 1.0, -13.0), }, feet_b: match (body.species, body.body_type) { - (Reddragon, _) => (6.0, -15.0, 3.0), + (Reddragon, _) => (6.0, -2.0, -10.5), }, height: match (body.species, body.body_type) { (Reddragon, _) => (1.0), diff --git a/voxygen/src/anim/src/quadruped_small/idle.rs b/voxygen/src/anim/src/quadruped_small/idle.rs index a9cf8d9926..2e23f6b3c3 100644 --- a/voxygen/src/anim/src/quadruped_small/idle.rs +++ b/voxygen/src/anim/src/quadruped_small/idle.rs @@ -40,10 +40,10 @@ impl Animation for IdleAnimation { ); next.head.offset = - Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 0.2) / 11.0; + Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 0.2); next.head.ori = Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y + slow_alt * 0.03); - next.head.scale = Vec3::one() / 10.5; + next.head.scale = Vec3::one(); next.chest.offset = Vec3::new( slow * 0.05, @@ -57,33 +57,33 @@ impl Animation for IdleAnimation { -skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, skeleton_attr.feet_f.2, - ) / 11.0; + ); next.leg_fl.ori = Quaternion::rotation_x(slow * 0.08); - next.leg_fl.scale = Vec3::one() / 11.0; + next.leg_fl.scale = Vec3::one(); next.leg_fr.offset = Vec3::new( skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, skeleton_attr.feet_f.2, - ) / 11.0; + ); next.leg_fr.ori = Quaternion::rotation_x(slow_alt * 0.08); - next.leg_fr.scale = Vec3::one() / 11.0; + next.leg_fr.scale = Vec3::one(); next.leg_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, skeleton_attr.feet_b.1, skeleton_attr.feet_b.2, - ) / 11.0; + ); next.leg_bl.ori = Quaternion::rotation_x(slow_alt * 0.08); - next.leg_bl.scale = Vec3::one() / 11.0; + next.leg_bl.scale = Vec3::one(); next.leg_br.offset = Vec3::new( skeleton_attr.feet_b.0, skeleton_attr.feet_b.1, skeleton_attr.feet_b.2, - ) / 11.0; + ); next.leg_br.ori = Quaternion::rotation_x(slow * 0.08); - next.leg_br.scale = Vec3::one() / 11.0; + next.leg_br.scale = Vec3::one(); next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_z(slow * 0.4); diff --git a/voxygen/src/anim/src/quadruped_small/jump.rs b/voxygen/src/anim/src/quadruped_small/jump.rs index 8a19a43d32..dfc2cc8db7 100644 --- a/voxygen/src/anim/src/quadruped_small/jump.rs +++ b/voxygen/src/anim/src/quadruped_small/jump.rs @@ -20,9 +20,9 @@ impl Animation for JumpAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 11.0; + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); next.head.ori = Quaternion::rotation_z(-0.8) * Quaternion::rotation_x(0.5); - next.head.scale = Vec3::one() / 10.5; + next.head.scale = Vec3::one(); next.chest.offset = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) / 11.0; next.chest.ori = Quaternion::rotation_y(0.0); @@ -32,33 +32,33 @@ impl Animation for JumpAnimation { -skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, skeleton_attr.feet_f.2, - ) / 11.0; + ); next.leg_fl.ori = Quaternion::rotation_x(0.0); - next.leg_fl.scale = Vec3::one() / 11.0; + next.leg_fl.scale = Vec3::one(); next.leg_fr.offset = Vec3::new( skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, skeleton_attr.feet_f.2, - ) / 11.0; + ); next.leg_fr.ori = Quaternion::rotation_x(0.0); - next.leg_fr.scale = Vec3::one() / 11.0; + next.leg_fr.scale = Vec3::one(); next.leg_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, skeleton_attr.feet_b.1, skeleton_attr.feet_b.2, - ) / 11.0; + ); next.leg_bl.ori = Quaternion::rotation_x(0.0); - next.leg_bl.scale = Vec3::one() / 11.0; + next.leg_bl.scale = Vec3::one(); next.leg_br.offset = Vec3::new( skeleton_attr.feet_b.0, skeleton_attr.feet_b.1, skeleton_attr.feet_b.2, - ) / 11.0; + ); next.leg_br.ori = Quaternion::rotation_x(0.0); - next.leg_br.scale = Vec3::one() / 11.0; + next.leg_br.scale = Vec3::one(); next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_x(-0.3); diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index e3a6aa1ac9..f5bb4cb613 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -37,12 +37,12 @@ impl Skeleton for QuadrupedSmallSkeleton { let chest_mat = self.chest.compute_base_matrix(); ( [ - FigureBoneData::new(self.head.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.head.compute_base_matrix()), FigureBoneData::new(chest_mat), - FigureBoneData::new(self.leg_fl.compute_base_matrix()), - FigureBoneData::new(self.leg_fr.compute_base_matrix()), - FigureBoneData::new(self.leg_bl.compute_base_matrix()), - FigureBoneData::new(self.leg_br.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.leg_fl.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.leg_fr.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.leg_bl.compute_base_matrix()), + FigureBoneData::new(chest_mat * self.leg_br.compute_base_matrix()), FigureBoneData::new(chest_mat * self.tail.compute_base_matrix()), FigureBoneData::default(), FigureBoneData::default(), @@ -104,25 +104,25 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { use comp::quadruped_small::Species::*; Self { head: match (body.species, body.body_type) { - (Pig, _) => (6.0, 7.0), - (Fox, _) => (8.0, 8.0), - (Sheep, _) => (8.0, 8.0), - (Boar, _) => (13.0, 8.0), - (Jackalope, _) => (6.0, 9.0), - (Skunk, _) => (7.0, 9.0), - (Cat, _) => (7.0, 8.0), - (Batfox, _) => (8.0, 9.0), - (Raccoon, _) => (9.0, 7.0), - (Quokka, _) => (10.0, 10.0), - (Dodarock, _) => (8.0, 9.0), - (Holladon, _) => (8.0, 8.0), - (Hyena, _) => (7.5, 13.0), + (Pig, _) => (5.0, 2.0), + (Fox, _) => (7.0, 3.0), + (Sheep, _) => (9.0, 3.0), + (Boar, _) => (12.0, 3.0), + (Jackalope, _) => (5.0, 4.0), + (Skunk, _) => (6.0, 4.0), + (Cat, _) => (6.0, 3.0), + (Batfox, _) => (7.0, 4.0), + (Raccoon, _) => (8.0, 2.0), + (Quokka, _) => (9.0, 5.0), + (Dodarock, _) => (7.0, 4.0), + (Holladon, _) => (7.0, 3.0), + (Hyena, _) => (7.5, 2.0), }, chest: match (body.species, body.body_type) { - (Pig, _) => (0.0, 8.0), - (Fox, _) => (1.0, 5.0), + (Pig, _) => (0.0, 7.0), + (Fox, _) => (0.0, 5.0), (Sheep, _) => (-1.0, 6.0), - (Boar, _) => (0.0, 7.0), + (Boar, _) => (0.0, 8.5), (Jackalope, _) => (-2.0, 6.0), (Skunk, _) => (0.0, 6.0), (Cat, _) => (0.0, 6.0), @@ -134,34 +134,34 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (-2.0, 9.0), }, feet_f: match (body.species, body.body_type) { - (Pig, _) => (3.0, 5.0, 2.0), - (Fox, _) => (3.0, 5.0, 3.0), - (Sheep, _) => (3.0, 3.0, 3.0), - (Boar, _) => (3.0, 5.0, 3.0), - (Jackalope, _) => (3.0, 5.0, 4.0), - (Skunk, _) => (3.0, 3.0, 4.0), - (Cat, _) => (3.0, 5.0, 3.0), - (Batfox, _) => (2.5, 5.0, 3.0), - (Raccoon, _) => (3.0, 5.0, 3.0), - (Quokka, _) => (3.0, 5.0, 3.0), - (Dodarock, _) => (3.5, 5.0, 4.0), - (Holladon, _) => (3.0, 5.0, 4.0), - (Hyena, _) => (2.5, 5.0, 6.0), + (Pig, _) => (3.5, 3.0, -5.5), + (Fox, _) => (2.5, 3.0, -2.0), + (Sheep, _) => (3.5, 2.0, -2.5), + (Boar, _) => (3.5, 4.0, -4.5), + (Jackalope, _) => (2.0, 4.0, -2.0), + (Skunk, _) => (2.0, 2.0, -2.0), + (Cat, _) => (2.0, 4.0, -3.0), + (Batfox, _) => (1.5, 4.0, -3.0), + (Raccoon, _) => (2.0, 4.0, -3.0), + (Quokka, _) => (2.0, 4.0, -3.0), + (Dodarock, _) => (2.5, 4.0, -2.0), + (Holladon, _) => (2.0, 4.0, -2.0), + (Hyena, _) => (2.5, 4.0, -4.0), }, feet_b: match (body.species, body.body_type) { - (Pig, _) => (3.0, -2.0, 2.0), - (Fox, _) => (2.5, -2.0, 3.0), - (Sheep, _) => (3.0, -4.0, 3.0), - (Boar, _) => (3.0, -3.0, 5.0), - (Jackalope, _) => (3.0, -2.0, 4.0), - (Skunk, _) => (3.0, -4.0, 4.0), - (Cat, _) => (2.0, -2.0, 3.0), - (Batfox, _) => (2.5, -2.0, 3.0), - (Raccoon, _) => (3.0, -2.0, 3.0), - (Quokka, _) => (3.0, -4.0, 3.0), - (Dodarock, _) => (4.5, -3.0, 4.0), - (Holladon, _) => (4.0, -4.0, 3.0), - (Hyena, _) => (2.5, -7.0, 6.0), + (Pig, _) => (2.0, -2.0, -5.5), + (Fox, _) => (1.5, -2.0, -1.0), + (Sheep, _) => (3.5, -4.0, -2.5), + (Boar, _) => (2.0, -3.0, -2.5), + (Jackalope, _) => (2.0, -2.0, 0.0), + (Skunk, _) => (1.0, -4.0, -2.5), + (Cat, _) => (1.5, -2.0, -3.0), + (Batfox, _) => (2.0, -2.0, -2.5), + (Raccoon, _) => (2.5, -2.0, -3.5), + (Quokka, _) => (2.5, -4.0, -3.5), + (Dodarock, _) => (2.0, -3.0, -5.5), + (Holladon, _) => (3.5, -2.0, -3.5), + (Hyena, _) => (3.0, -5.0, -4.5), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.0, 3.0), diff --git a/voxygen/src/anim/src/quadruped_small/run.rs b/voxygen/src/anim/src/quadruped_small/run.rs index 8dda9ee4e5..9dfab6b81b 100644 --- a/voxygen/src/anim/src/quadruped_small/run.rs +++ b/voxygen/src/anim/src/quadruped_small/run.rs @@ -28,10 +28,10 @@ impl Animation for RunAnimation { let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()).max(-0.7); next.head.offset = - Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 1.5) / 11.0; + Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 1.5); next.head.ori = Quaternion::rotation_x(0.2 + slow * 0.05) * Quaternion::rotation_y(slow_alt * 0.03); - next.head.scale = Vec3::one() / 10.5; + next.head.scale = Vec3::one(); next.chest.offset = Vec3::new( 0.0, @@ -45,33 +45,33 @@ impl Animation for RunAnimation { -skeleton_attr.feet_f.0, skeleton_attr.feet_f.1 + fast * 0.8, skeleton_attr.feet_f.2 + fast_alt * 1.5, - ) / 11.0; + ); next.leg_fl.ori = Quaternion::rotation_x(fast * 0.3); - next.leg_fl.scale = Vec3::one() / 11.0; + next.leg_fl.scale = Vec3::one(); next.leg_fr.offset = Vec3::new( skeleton_attr.feet_f.0, skeleton_attr.feet_f.1 + fast_alt * -0.8, skeleton_attr.feet_f.2 + fast * 1.5, - ) / 11.0; + ); next.leg_fr.ori = Quaternion::rotation_x(fast_alt * -0.3); - next.leg_fr.scale = Vec3::one() / 11.0; + next.leg_fr.scale = Vec3::one(); next.leg_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, skeleton_attr.feet_b.1 + fast_alt * -0.8, skeleton_attr.feet_b.2 + fast * 1.5, - ) / 11.0; + ); next.leg_bl.ori = Quaternion::rotation_x(fast_alt * -0.3); - next.leg_bl.scale = Vec3::one() / 11.0; + next.leg_bl.scale = Vec3::one(); next.leg_br.offset = Vec3::new( skeleton_attr.feet_b.0, skeleton_attr.feet_b.1 + fast * 0.8, skeleton_attr.feet_b.2 + fast_alt * 1.5, - ) / 11.0; + ); next.leg_br.ori = Quaternion::rotation_x(fast * 0.3); - next.leg_br.scale = Vec3::one() / 11.0; + next.leg_br.scale = Vec3::one(); next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_z(0.0); From eb5ebdce12c191986a07376c3947ed7e2c3fa2b5 Mon Sep 17 00:00:00 2001 From: Snowram Date: Sun, 26 Jul 2020 22:40:32 +0200 Subject: [PATCH 02/12] Various changes to npcs animations - Improved dragon run with tilting - New run animation for quadsmall, added tilting --- .../voxygen/voxel/dragon_center_manifest.ron | 4 +- voxygen/src/anim/src/critter/idle.rs | 4 +- voxygen/src/anim/src/critter/run.rs | 2 +- voxygen/src/anim/src/dragon/idle.rs | 68 +++++----- voxygen/src/anim/src/dragon/mod.rs | 2 +- voxygen/src/anim/src/dragon/run.rs | 126 ++++++++++++------ voxygen/src/anim/src/quadruped_small/run.rs | 100 ++++++++++---- voxygen/src/scene/figure/mod.rs | 35 ++--- 8 files changed, 220 insertions(+), 121 deletions(-) diff --git a/assets/voxygen/voxel/dragon_center_manifest.ron b/assets/voxygen/voxel/dragon_center_manifest.ron index 953e6bf35a..317e5183b1 100644 --- a/assets/voxygen/voxel/dragon_center_manifest.ron +++ b/assets/voxygen/voxel/dragon_center_manifest.ron @@ -17,7 +17,7 @@ center: ("npc.reddragon.male.chest_front"), ), chest_rear: ( - offset: (-6.5, -7.0, -7.0), + offset: (-6.5, -13.0, -7.0), center: ("npc.reddragon.male.chest_rear"), ), tail_front: ( @@ -47,7 +47,7 @@ center: ("npc.reddragon.male.chest_front"), ), chest_rear: ( - offset: (-6.5, -7.0, -7.0), + offset: (-6.5, -13.0, -7.0), center: ("npc.reddragon.male.chest_rear"), ), tail_front: ( diff --git a/voxygen/src/anim/src/critter/idle.rs b/voxygen/src/anim/src/critter/idle.rs index ea9a108365..50a85945cc 100644 --- a/voxygen/src/anim/src/critter/idle.rs +++ b/voxygen/src/anim/src/critter/idle.rs @@ -50,11 +50,11 @@ impl Animation for IdleAnimation { next.chest.ori = Quaternion::rotation_y(wave_slow * 0.06); next.chest.scale = Vec3::one() / 18.0; - next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1 + 3.0); + next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); next.feet_f.ori = Quaternion::rotation_z(0.0); next.feet_f.scale = Vec3::one(); - next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1 + 3.0); + next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1); next.feet_b.ori = Quaternion::rotation_x(0.0); next.feet_b.scale = Vec3::one(); diff --git a/voxygen/src/anim/src/critter/run.rs b/voxygen/src/anim/src/critter/run.rs index 64446c270d..9712445494 100644 --- a/voxygen/src/anim/src/critter/run.rs +++ b/voxygen/src/anim/src/critter/run.rs @@ -35,7 +35,7 @@ impl Animation for RunAnimation { skeleton_attr.chest.0 + wave * 1.0, skeleton_attr.chest.1, ) / 18.0; - next.chest.ori = Quaternion::rotation_y(wave_slow * 0.3); + next.chest.ori = Quaternion::rotation_y(0.0); next.chest.scale = Vec3::one() / 18.0; next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); diff --git a/voxygen/src/anim/src/dragon/idle.rs b/voxygen/src/anim/src/dragon/idle.rs index 8da82fecb5..b61f87fbc4 100644 --- a/voxygen/src/anim/src/dragon/idle.rs +++ b/voxygen/src/anim/src/dragon/idle.rs @@ -65,12 +65,12 @@ impl Animation for IdleAnimation { skeleton_attr.chest_front.0, skeleton_attr.chest_front.1, ); - next.chest_front.ori = Quaternion::rotation_y(slow * 0.01); + next.chest_front.ori = Quaternion::rotation_y(0.0); next.chest_front.scale = Vec3::one() * 1.05; next.chest_rear.offset = Vec3::new(0.0, skeleton_attr.chest_rear.0, skeleton_attr.chest_rear.1); - next.chest_rear.ori = Quaternion::rotation_y(slow * 0.01); + next.chest_rear.ori = Quaternion::rotation_y(0.0); next.chest_rear.scale = Vec3::one() * 1.05; next.tail_front.offset = @@ -83,38 +83,6 @@ impl Animation for IdleAnimation { next.tail_rear.ori = Quaternion::rotation_z(slowalt * 0.12) * Quaternion::rotation_x(0.05); next.tail_rear.scale = Vec3::one() * 0.98; - next.wing_in_l.offset = Vec3::new( - -skeleton_attr.wing_in.0, - skeleton_attr.wing_in.1, - skeleton_attr.wing_in.2, - ); - next.wing_in_l.ori = Quaternion::rotation_y(0.8); - next.wing_in_l.scale = Vec3::one(); - - next.wing_in_r.offset = Vec3::new( - skeleton_attr.wing_in.0, - skeleton_attr.wing_in.1, - skeleton_attr.wing_in.2, - ); - next.wing_in_r.ori = Quaternion::rotation_y(-0.8); - next.wing_in_r.scale = Vec3::one(); - - next.wing_out_l.offset = Vec3::new( - -skeleton_attr.wing_out.0, - skeleton_attr.wing_out.1, - skeleton_attr.wing_out.2, - ); - next.wing_out_l.ori = Quaternion::rotation_y(-2.0); - next.wing_out_l.scale = Vec3::one(); - - next.wing_out_r.offset = Vec3::new( - skeleton_attr.wing_out.0, - skeleton_attr.wing_out.1, - skeleton_attr.wing_out.2, - ); - next.wing_out_r.ori = Quaternion::rotation_y(2.0); - next.wing_out_r.scale = Vec3::one(); - next.foot_fl.offset = Vec3::new( -skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, @@ -147,6 +115,38 @@ impl Animation for IdleAnimation { next.foot_br.ori = Quaternion::rotation_x(0.0); next.foot_br.scale = Vec3::one(); + next.wing_in_l.offset = Vec3::new( + -skeleton_attr.wing_in.0, + skeleton_attr.wing_in.1, + skeleton_attr.wing_in.2, + ); + next.wing_in_l.ori = Quaternion::rotation_y(0.8 + slow * 0.02); + next.wing_in_l.scale = Vec3::one(); + + next.wing_in_r.offset = Vec3::new( + skeleton_attr.wing_in.0, + skeleton_attr.wing_in.1, + skeleton_attr.wing_in.2, + ); + next.wing_in_r.ori = Quaternion::rotation_y(-0.8 - slow * 0.02); + next.wing_in_r.scale = Vec3::one(); + + next.wing_out_l.offset = Vec3::new( + -skeleton_attr.wing_out.0, + skeleton_attr.wing_out.1, + skeleton_attr.wing_out.2, + ); + next.wing_out_l.ori = Quaternion::rotation_y(-2.0 + slow * 0.02); + next.wing_out_l.scale = Vec3::one(); + + next.wing_out_r.offset = Vec3::new( + skeleton_attr.wing_out.0, + skeleton_attr.wing_out.1, + skeleton_attr.wing_out.2, + ); + next.wing_out_r.ori = Quaternion::rotation_y(2.0 - slow * 0.02); + next.wing_out_r.scale = Vec3::one(); + next } } diff --git a/voxygen/src/anim/src/dragon/mod.rs b/voxygen/src/anim/src/dragon/mod.rs index 218aa3485e..a49446e606 100644 --- a/voxygen/src/anim/src/dragon/mod.rs +++ b/voxygen/src/anim/src/dragon/mod.rs @@ -168,7 +168,7 @@ impl<'a> From<&'a comp::dragon::Body> for SkeletonAttr { (Reddragon, _) => (0.0, 15.0), }, chest_rear: match (body.species, body.body_type) { - (Reddragon, _) => (-12.5, 0.0), + (Reddragon, _) => (-6.5, 0.0), }, tail_front: match (body.species, body.body_type) { (Reddragon, _) => (-6.5, 1.5), diff --git a/voxygen/src/anim/src/dragon/run.rs b/voxygen/src/anim/src/dragon/run.rs index 626728d83c..343578127e 100644 --- a/voxygen/src/anim/src/dragon/run.rs +++ b/voxygen/src/anim/src/dragon/run.rs @@ -5,7 +5,7 @@ use vek::*; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (f32, f64); + type Dependency = (f32, Vec3, Vec3, f64, Vec3); type Skeleton = DragonSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -14,13 +14,57 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "dragon_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (_velocity, global_time): Self::Dependency, + (velocity, orientation, last_ori, global_time, avg_vel): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); + let lab = 0.6; //6 + + let short = (((1.0) + / (0.72 + + 0.28 + * ((anim_time as f32 * 16.0 * lab as f32+ PI * 1.0).sin()) + .powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.0).sin()); + + // + + let shortalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.5).sin(); + + let footvert = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.0).sin(); + let footvertt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); + let footvertalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.2).sin(); + let footverttalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.6).sin(); + + let footvertf = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.3).sin(); + let footverttf = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.7).sin(); + let footvertaltf = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.5).sin(); + let footverttaltf = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.9).sin(); + + let footvertfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.6).sin(); + let footverttfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.0).sin(); + let footvertaltfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.8).sin(); + let footverttaltfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 2.2).sin(); + // + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); + let lab = 14; let wave_ultra_slow_cos = (anim_time as f32 * 3.0 + PI).cos(); @@ -42,29 +86,19 @@ impl Animation for RunAnimation { let center = (anim_time as f32 * lab as f32 + PI / 2.0).sin(); let centeroffset = (anim_time as f32 * lab as f32 + PI * 1.5).sin(); - let dragon_look = Vec2::new( - ((global_time + anim_time) as f32 / 4.0) - .floor() - .mul(7331.0) - .sin() - * 0.25, - ((global_time + anim_time) as f32 / 4.0) - .floor() - .mul(1337.0) - .sin() - * 0.125, - ); - next.head_upper.offset = - Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); - next.head_upper.ori = - Quaternion::rotation_x(dragon_look.y) * Quaternion::rotation_z(dragon_look.x); - next.head_upper.scale = Vec3::one(); + Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); + next.head_upper.ori = Quaternion::rotation_x(short * -0.03 - 0.1) + * Quaternion::rotation_z(tilt * -1.2) + * Quaternion::rotation_y(tilt * 0.8); + next.head_upper.scale = Vec3::one(); - next.head_lower.offset = - Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); - next.head_lower.ori = Quaternion::rotation_x(wave_slow * 0.05); - next.head_lower.scale = Vec3::one(); + next.head_lower.offset = + Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); + next.head_lower.ori = Quaternion::rotation_z(tilt * -0.8) + * Quaternion::rotation_x(short * -0.05) + * Quaternion::rotation_y(tilt * 0.3); + next.head_lower.scale = Vec3::one() * 1.02; next.jaw.offset = Vec3::new( 0.0, @@ -79,7 +113,8 @@ impl Animation for RunAnimation { skeleton_attr.tail_front.0, skeleton_attr.tail_front.1 + centeroffset * 0.6, ); - next.tail_front.ori = Quaternion::rotation_x(center * 0.03); + next.tail_front.ori = + Quaternion::rotation_x(center * 0.03) * Quaternion::rotation_z(tilt * 1.5); next.tail_front.scale = Vec3::one() * 0.98; next.tail_rear.offset = Vec3::new( @@ -87,20 +122,27 @@ impl Animation for RunAnimation { skeleton_attr.tail_rear.0, skeleton_attr.tail_rear.1 + centeroffset * 0.6, ); - next.tail_rear.ori = Quaternion::rotation_x(center * 0.03); + next.tail_rear.ori = + Quaternion::rotation_x(center * 0.03) * Quaternion::rotation_z(tilt * 1.5); next.tail_rear.scale = Vec3::one() * 0.98; next.chest_front.offset = Vec3::new( 0.0, - skeleton_attr.chest_front.0 + horichest * 1.25, - skeleton_attr.chest_front.1 + vertchest * -1.6 + 1.0, - ); - next.chest_front.ori = Quaternion::rotation_y(horichest * -0.09); + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1 + shortalt * 2.5 + x_tilt * 10.0,); + next.chest_front.ori = Quaternion::rotation_x(short * 0.13 + x_tilt) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(tilt * -1.5); next.chest_front.scale = Vec3::one(); - next.chest_rear.offset = - Vec3::new(0.0, skeleton_attr.chest_rear.0, skeleton_attr.chest_rear.1); - next.chest_rear.ori = Quaternion::rotation_y(horichest * -0.09); + next.chest_rear.offset = Vec3::new( + 0.0, + skeleton_attr.chest_rear.0, + skeleton_attr.chest_rear.1 + shortalt * 0.2, + ); + next.chest_rear.ori = Quaternion::rotation_x(short * 0.1) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(tilt * 1.8); next.chest_rear.scale = Vec3::one(); next.foot_fl.offset = Vec3::new( @@ -108,7 +150,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_f.1 + horilf * 2.5, skeleton_attr.feet_f.2 + vertlf * 5.0 * skeleton_attr.height - 0.5, ); - next.foot_fl.ori = Quaternion::rotation_x(horilf * 0.4); + next.foot_fl.ori = Quaternion::rotation_x(horilf * 0.6); next.foot_fl.scale = Vec3::one(); next.foot_fr.offset = Vec3::new( @@ -116,7 +158,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_f.1 + horirfoffset * 2.5, skeleton_attr.feet_f.2 + vertrfoffset * 5.0 * skeleton_attr.height - 0.5, ); - next.foot_fr.ori = Quaternion::rotation_x(horirfoffset * 0.4); + next.foot_fr.ori = Quaternion::rotation_x(horirb * 0.6); next.foot_fr.scale = Vec3::one(); next.foot_bl.offset = Vec3::new( @@ -124,7 +166,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_b.1 + horilboffset * 3.0, skeleton_attr.feet_b.2 + vertlboffset * 5.0 * skeleton_attr.height - 0.5, ); - next.foot_bl.ori = Quaternion::rotation_x(horilboffset * 0.35); + next.foot_bl.ori = Quaternion::rotation_x(horilf * 0.55); next.foot_bl.scale = Vec3::one(); next.foot_br.offset = Vec3::new( @@ -132,7 +174,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_b.1 + horirb * 3.0, skeleton_attr.feet_b.2 + vertrb * 5.0 * skeleton_attr.height - 0.5, ); - next.foot_br.ori = Quaternion::rotation_x(horirb * 0.35); + next.foot_br.ori = Quaternion::rotation_x(horirb * 0.55); next.foot_br.scale = Vec3::one(); next.wing_in_l.offset = Vec3::new( @@ -140,7 +182,7 @@ impl Animation for RunAnimation { skeleton_attr.wing_in.1, skeleton_attr.wing_in.2, ); - next.wing_in_l.ori = Quaternion::rotation_y(0.8); + next.wing_in_l.ori = Quaternion::rotation_y(0.8 + tilt * 1.0); next.wing_in_l.scale = Vec3::one(); next.wing_in_r.offset = Vec3::new( @@ -148,23 +190,23 @@ impl Animation for RunAnimation { skeleton_attr.wing_in.1, skeleton_attr.wing_in.2, ); - next.wing_in_r.ori = Quaternion::rotation_y(-0.8); + next.wing_in_r.ori = Quaternion::rotation_y(-0.8 + tilt * 1.0); next.wing_in_r.scale = Vec3::one(); next.wing_out_l.offset = Vec3::new( -skeleton_attr.wing_out.0, skeleton_attr.wing_out.1, - skeleton_attr.wing_out.2 - 1.4, + skeleton_attr.wing_out.2, ); - next.wing_out_l.ori = Quaternion::rotation_y(-2.0); + next.wing_out_l.ori = Quaternion::rotation_y(-2.0 + tilt * 1.0); next.wing_out_l.scale = Vec3::one(); next.wing_out_r.offset = Vec3::new( skeleton_attr.wing_out.0, skeleton_attr.wing_out.1, - skeleton_attr.wing_out.2 - 1.4, + skeleton_attr.wing_out.2, ); - next.wing_out_r.ori = Quaternion::rotation_y(2.0); + next.wing_out_r.ori = Quaternion::rotation_y(2.0 + tilt * 1.0); next.wing_out_r.scale = Vec3::one(); next diff --git a/voxygen/src/anim/src/quadruped_small/run.rs b/voxygen/src/anim/src/quadruped_small/run.rs index 9dfab6b81b..81812915c1 100644 --- a/voxygen/src/anim/src/quadruped_small/run.rs +++ b/voxygen/src/anim/src/quadruped_small/run.rs @@ -5,7 +5,7 @@ use vek::*; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (f32, f64, Vec3); + type Dependency = (f32, Vec3, Vec3, f64, Vec3); type Skeleton = QuadrupedSmallSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -14,12 +14,13 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (_velocity, _global_time, avg_vel): Self::Dependency, + (velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); + let speed = Vec2::::from(velocity).magnitude(); let slow = (anim_time as f32 * 14.0).sin(); let fast = (anim_time as f32 * 20.0).sin(); @@ -27,51 +28,104 @@ impl Animation for RunAnimation { let slow_alt = (anim_time as f32 * 14.0 + PI / 2.0).sin(); let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()).max(-0.7); + + let lab = 0.6; //6 + + let speedmult = if speed > 8.0 { + 1.2 * (1.0) + } else { + 0.8 * (1.0) + }; + let abssin = (((anim_time as f32 * 5.0 * speedmult + PI * 1.6).sin().abs()) - 0.2).abs().max(-0.2); + let abssint = (((anim_time as f32 * 5.0 * speedmult).sin().abs()) - 0.2).abs().max(-0.2); + let shortalt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.5).sin(); + + let footvert = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.0).sin(); + let footvertt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.4).sin(); + let footvertalt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.2).sin(); + let footverttalt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.6).sin(); + + let footvertf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.3).sin(); + let footverttf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.7).sin(); + let footvertaltf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.5).sin(); + let footverttaltf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.9).sin(); + + let footvertfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.6).sin(); + let footverttfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.0).sin(); + let footvertaltfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.8).sin(); + let footverttaltfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 2.2).sin(); + + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); + next.head.offset = - Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 1.5); - next.head.ori = - Quaternion::rotation_x(0.2 + slow * 0.05) * Quaternion::rotation_y(slow_alt * 0.03); + Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + abssint * 2.0); + next.head.ori = Quaternion::rotation_x(0.2 + slow * 0.05 + x_tilt * -0.5) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(tilt * -1.2); next.head.scale = Vec3::one(); next.chest.offset = Vec3::new( 0.0, skeleton_attr.chest.0, - skeleton_attr.chest.1 + slow_alt * 1.2, + skeleton_attr.chest.1 + abssin * 8.0 + x_tilt * 6.0, ) / 11.0; - next.chest.ori = Quaternion::rotation_x(slow * 0.1 + x_tilt); + next.chest.ori = Quaternion::rotation_x(abssin * 0.5 - 0.2 + x_tilt) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(tilt * -1.5); next.chest.scale = Vec3::one() / 11.0; next.leg_fl.offset = Vec3::new( -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1 + fast * 0.8, - skeleton_attr.feet_f.2 + fast_alt * 1.5, + skeleton_attr.feet_f.1 + footvertaltf * -1.3, + skeleton_attr.feet_f.2 + 1.0 + footverttaltf * -1.9, ); - next.leg_fl.ori = Quaternion::rotation_x(fast * 0.3); - next.leg_fl.scale = Vec3::one(); + next.leg_fl.ori = Quaternion::rotation_x(footverttaltf * -0.65) + * Quaternion::rotation_z(tilt * -0.5) + * Quaternion::rotation_y(tilt * 1.5); + next.leg_fl.scale = Vec3::one() * 1.02; next.leg_fr.offset = Vec3::new( skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1 + fast_alt * -0.8, - skeleton_attr.feet_f.2 + fast * 1.5, + skeleton_attr.feet_f.1 + footvertaltf * -1.3, + skeleton_attr.feet_f.2 + 1.0 + footvertaltf * -1.9, ); - next.leg_fr.ori = Quaternion::rotation_x(fast_alt * -0.3); - next.leg_fr.scale = Vec3::one(); + next.leg_fr.ori = Quaternion::rotation_x(footvertaltf * -0.65) + * Quaternion::rotation_z(tilt * -0.5) + * Quaternion::rotation_y(tilt * 1.5); + next.leg_fr.scale = Vec3::one() * 1.02; next.leg_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1 + fast_alt * -0.8, - skeleton_attr.feet_b.2 + fast * 1.5, + skeleton_attr.feet_b.1 + footvert * -1.7, + skeleton_attr.feet_b.2 + 1.0 + footvertt * -1.5, ); - next.leg_bl.ori = Quaternion::rotation_x(fast_alt * -0.3); - next.leg_bl.scale = Vec3::one(); + next.leg_bl.ori = Quaternion::rotation_x(footvertt * -0.45 - 0.2) + * Quaternion::rotation_y(tilt * 1.5) + * Quaternion::rotation_z(tilt * -1.5); + next.leg_bl.scale = Vec3::one() * 1.02; next.leg_br.offset = Vec3::new( skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1 + fast * 0.8, - skeleton_attr.feet_b.2 + fast_alt * 1.5, + skeleton_attr.feet_b.1 + footvertt * -1.7, + skeleton_attr.feet_b.2 + 1.0 + footvertt * -1.5, ); - next.leg_br.ori = Quaternion::rotation_x(fast * 0.3); - next.leg_br.scale = Vec3::one(); + next.leg_br.ori = Quaternion::rotation_x(footvertt * -0.45 - 0.2) + * Quaternion::rotation_y(tilt * 1.5) + * Quaternion::rotation_z(tilt * -1.5); + next.leg_br.scale = Vec3::one() * 1.02; next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_z(0.0); diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 279018068d..a2e139ba0c 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -933,7 +933,7 @@ impl FigureMgr { (true, true, false) => { anim::quadruped_small::RunAnimation::update_skeleton( &QuadrupedSmallSkeleton::new(), - (vel.0.magnitude(), time, state.avg_vel), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -1340,21 +1340,25 @@ impl FigureMgr { physics.in_fluid, // In water ) { // Standing - (true, false, false) => anim::dragon::IdleAnimation::update_skeleton( - &DragonSkeleton::new(), - time, - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ), + (true, false, false) => { + anim::dragon::IdleAnimation::update_skeleton( + &DragonSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, // Running - (true, true, false) => anim::dragon::RunAnimation::update_skeleton( - &DragonSkeleton::new(), - (vel.0.magnitude(), time), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ), + (true, true, false) => { + anim::dragon::RunAnimation::update_skeleton( + &DragonSkeleton::new(), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, // In air (false, _, false) => anim::dragon::FlyAnimation::update_skeleton( &DragonSkeleton::new(), @@ -1363,7 +1367,6 @@ impl FigureMgr { &mut state_animation_rate, skeleton_attr, ), - // TODO! _ => state.skeleton_mut().clone(), }; From 8251fcfa55ed9d3524bfdf8c0992fac1bd452e1f Mon Sep 17 00:00:00 2001 From: jshipsey Date: Mon, 27 Jul 2020 00:06:52 -0400 Subject: [PATCH 03/12] new models, anim tweaks --- .../voxygen/voxel/npc/batfox/male/chest.vox | Bin 1620 -> 1988 bytes .../voxygen/voxel/npc/batfox/male/foot_bl.vox | Bin 1196 -> 1216 bytes .../voxygen/voxel/npc/batfox/male/foot_br.vox | Bin 1196 -> 1216 bytes .../voxygen/voxel/npc/batfox/male/foot_fl.vox | Bin 1164 -> 1204 bytes .../voxygen/voxel/npc/batfox/male/foot_fr.vox | Bin 1164 -> 1204 bytes assets/voxygen/voxel/npc/batfox/male/head.vox | Bin 2024 -> 2204 bytes .../voxygen/voxel/npc/boar/female/chest.vox | Bin 2836 -> 3544 bytes .../voxygen/voxel/npc/boar/female/foot_bl.vox | Bin 1256 -> 1296 bytes .../voxygen/voxel/npc/boar/female/foot_br.vox | Bin 1256 -> 1296 bytes .../voxygen/voxel/npc/boar/female/foot_fl.vox | Bin 1272 -> 1316 bytes .../voxygen/voxel/npc/boar/female/foot_fr.vox | Bin 1272 -> 1316 bytes assets/voxygen/voxel/npc/boar/female/head.vox | Bin 2152 -> 2280 bytes assets/voxygen/voxel/npc/boar/female/tail.vox | Bin 1144 -> 1148 bytes assets/voxygen/voxel/npc/boar/male/chest.vox | Bin 2876 -> 3620 bytes .../voxygen/voxel/npc/boar/male/foot_bl.vox | Bin 1256 -> 1296 bytes .../voxygen/voxel/npc/boar/male/foot_br.vox | Bin 1256 -> 1296 bytes .../voxygen/voxel/npc/boar/male/foot_fl.vox | Bin 1272 -> 1316 bytes .../voxygen/voxel/npc/boar/male/foot_fr.vox | Bin 1272 -> 1316 bytes assets/voxygen/voxel/npc/boar/male/head.vox | Bin 2220 -> 2392 bytes assets/voxygen/voxel/npc/boar/male/tail.vox | Bin 1144 -> 1148 bytes assets/voxygen/voxel/npc/cat/female/chest.vox | Bin 1480 -> 1640 bytes .../voxygen/voxel/npc/cat/female/foot_bl.vox | Bin 1208 -> 1184 bytes .../voxygen/voxel/npc/cat/female/foot_br.vox | Bin 1208 -> 1184 bytes .../voxygen/voxel/npc/cat/female/foot_fl.vox | Bin 1168 -> 1172 bytes .../voxygen/voxel/npc/cat/female/foot_fr.vox | Bin 1168 -> 1172 bytes assets/voxygen/voxel/npc/cat/female/head.vox | Bin 1592 -> 1620 bytes assets/voxygen/voxel/npc/cat/female/tail.vox | Bin 1120 -> 1140 bytes assets/voxygen/voxel/npc/cat/male/chest.vox | Bin 1480 -> 1640 bytes assets/voxygen/voxel/npc/cat/male/foot_bl.vox | Bin 1208 -> 1184 bytes assets/voxygen/voxel/npc/cat/male/foot_br.vox | Bin 1208 -> 1184 bytes assets/voxygen/voxel/npc/cat/male/foot_fl.vox | Bin 1168 -> 1172 bytes assets/voxygen/voxel/npc/cat/male/foot_fr.vox | Bin 1168 -> 1172 bytes assets/voxygen/voxel/npc/cat/male/head.vox | Bin 1592 -> 1620 bytes assets/voxygen/voxel/npc/cat/male/tail.vox | Bin 1120 -> 1140 bytes .../voxygen/voxel/npc/dodarock/male/chest.vox | Bin 3868 -> 3608 bytes .../voxel/npc/dodarock/male/foot_bl.vox | Bin 1232 -> 1252 bytes .../voxel/npc/dodarock/male/foot_br.vox | Bin 1232 -> 1252 bytes .../voxel/npc/dodarock/male/foot_fl.vox | Bin 1548 -> 1552 bytes .../voxel/npc/dodarock/male/foot_fr.vox | Bin 1548 -> 1552 bytes .../voxygen/voxel/npc/dodarock/male/head.vox | Bin 3236 -> 3476 bytes assets/voxygen/voxel/npc/fox/female/chest.vox | Bin 1464 -> 2048 bytes .../voxygen/voxel/npc/fox/female/foot_bl.vox | Bin 1200 -> 1216 bytes .../voxygen/voxel/npc/fox/female/foot_br.vox | Bin 1200 -> 1216 bytes .../voxygen/voxel/npc/fox/female/foot_fl.vox | Bin 1156 -> 1208 bytes .../voxygen/voxel/npc/fox/female/foot_fr.vox | Bin 1156 -> 1208 bytes assets/voxygen/voxel/npc/fox/female/head.vox | Bin 1460 -> 1760 bytes assets/voxygen/voxel/npc/fox/female/tail.vox | Bin 1264 -> 1464 bytes assets/voxygen/voxel/npc/fox/male/chest.vox | Bin 1464 -> 1904 bytes assets/voxygen/voxel/npc/fox/male/foot_bl.vox | Bin 1200 -> 1216 bytes assets/voxygen/voxel/npc/fox/male/foot_br.vox | Bin 1200 -> 1216 bytes assets/voxygen/voxel/npc/fox/male/foot_fl.vox | Bin 1156 -> 1208 bytes assets/voxygen/voxel/npc/fox/male/foot_fr.vox | Bin 1156 -> 1208 bytes assets/voxygen/voxel/npc/fox/male/head.vox | Bin 1460 -> 1712 bytes assets/voxygen/voxel/npc/fox/male/tail.vox | Bin 1264 -> 1464 bytes .../voxygen/voxel/npc/holladon/male/chest.vox | Bin 2320 -> 3048 bytes .../voxel/npc/holladon/male/foot_bl.vox | Bin 1196 -> 1200 bytes .../voxel/npc/holladon/male/foot_br.vox | Bin 1196 -> 1200 bytes .../voxel/npc/holladon/male/foot_fl.vox | Bin 1184 -> 1248 bytes .../voxel/npc/holladon/male/foot_fr.vox | Bin 1184 -> 1248 bytes .../voxygen/voxel/npc/holladon/male/head.vox | Bin 1676 -> 1796 bytes .../voxel/npc/hyena/male/Jackalope-0.vox | Bin 0 -> 2168 bytes .../voxel/npc/hyena/male/Jackalope-1.vox | Bin 0 -> 1932 bytes .../voxel/npc/hyena/male/Jackalope-2.vox | Bin 0 -> 1272 bytes .../voxel/npc/hyena/male/Jackalope-3.vox | Bin 0 -> 1192 bytes .../voxel/npc/hyena/male/Jackalope-4.vox | Bin 0 -> 1272 bytes assets/voxygen/voxel/npc/hyena/male/chest.vox | Bin 2704 -> 2936 bytes .../voxygen/voxel/npc/hyena/male/foot_bl.vox | Bin 1244 -> 1272 bytes .../voxygen/voxel/npc/hyena/male/foot_br.vox | Bin 1244 -> 1272 bytes .../voxygen/voxel/npc/hyena/male/foot_fl.vox | Bin 1272 -> 1284 bytes .../voxygen/voxel/npc/hyena/male/foot_fr.vox | Bin 1272 -> 1284 bytes assets/voxygen/voxel/npc/hyena/male/head.vox | Bin 1528 -> 1640 bytes assets/voxygen/voxel/npc/hyena/male/tail.vox | Bin 1176 -> 1176 bytes .../voxel/npc/jackalope/male/chest.vox | Bin 1748 -> 2068 bytes .../voxel/npc/jackalope/male/foot_bl.vox | Bin 1296 -> 1272 bytes .../voxel/npc/jackalope/male/foot_br.vox | Bin 1296 -> 1272 bytes .../voxel/npc/jackalope/male/foot_fl.vox | Bin 1164 -> 1192 bytes .../voxel/npc/jackalope/male/foot_fr.vox | Bin 1164 -> 1192 bytes .../voxygen/voxel/npc/jackalope/male/head.vox | Bin 1628 -> 1932 bytes .../voxygen/voxel/npc/jackalope/male/tail.vox | Bin 0 -> 1196 bytes assets/voxygen/voxel/npc/pig/female/chest.vox | Bin 2728 -> 3176 bytes .../voxygen/voxel/npc/pig/female/foot_bl.vox | Bin 0 -> 1240 bytes .../voxygen/voxel/npc/pig/female/foot_br.vox | Bin 0 -> 1240 bytes .../pig/female/{foot_l.vox => foot_fl.vox} | Bin 1144 -> 1196 bytes .../pig/female/{foot_r.vox => foot_fr.vox} | Bin 1144 -> 1196 bytes assets/voxygen/voxel/npc/pig/female/head.vox | Bin 2720 -> 2576 bytes assets/voxygen/voxel/npc/pig/female/tail.vox | Bin 1120 -> 1140 bytes assets/voxygen/voxel/npc/pig/male/chest.vox | Bin 2728 -> 3176 bytes assets/voxygen/voxel/npc/pig/male/foot_bl.vox | Bin 0 -> 1240 bytes assets/voxygen/voxel/npc/pig/male/foot_br.vox | Bin 0 -> 1240 bytes .../npc/pig/male/{foot_l.vox => foot_fl.vox} | Bin 1144 -> 1196 bytes .../npc/pig/male/{foot_r.vox => foot_fr.vox} | Bin 1144 -> 1196 bytes assets/voxygen/voxel/npc/pig/male/head.vox | Bin 2720 -> 2576 bytes assets/voxygen/voxel/npc/pig/male/tail.vox | Bin 1120 -> 1140 bytes .../voxygen/voxel/npc/quokka/male/chest.vox | Bin 3928 -> 2868 bytes .../voxygen/voxel/npc/quokka/male/foot_bl.vox | Bin 1188 -> 1260 bytes .../voxygen/voxel/npc/quokka/male/foot_br.vox | Bin 1188 -> 1260 bytes .../voxygen/voxel/npc/quokka/male/foot_fl.vox | Bin 1164 -> 1204 bytes .../voxygen/voxel/npc/quokka/male/foot_fr.vox | Bin 1164 -> 1204 bytes assets/voxygen/voxel/npc/quokka/male/head.vox | Bin 1668 -> 1808 bytes assets/voxygen/voxel/npc/quokka/male/tail.vox | Bin 0 -> 1200 bytes .../voxygen/voxel/npc/raccoon/male/chest.vox | Bin 2000 -> 2944 bytes .../voxel/npc/raccoon/male/foot_bl.vox | Bin 1156 -> 1420 bytes .../voxel/npc/raccoon/male/foot_br.vox | Bin 1156 -> 1420 bytes .../voxel/npc/raccoon/male/foot_fl.vox | Bin 1128 -> 1240 bytes .../voxel/npc/raccoon/male/foot_fr.vox | Bin 1128 -> 1240 bytes .../voxygen/voxel/npc/raccoon/male/head.vox | Bin 1584 -> 2008 bytes .../voxygen/voxel/npc/raccoon/male/tail.vox | Bin 1176 -> 1664 bytes .../voxygen/voxel/npc/sheep/female/chest.vox | Bin 3336 -> 3352 bytes .../voxel/npc/sheep/female/foot_bl.vox | Bin 0 -> 1232 bytes .../sheep/female/{foot_r.vox => foot_br.vox} | Bin 1176 -> 1232 bytes .../sheep/female/{foot_l.vox => foot_fl.vox} | Bin 1176 -> 1208 bytes .../{male/foot_l.vox => female/foot_fr.vox} | Bin 1176 -> 1208 bytes .../voxygen/voxel/npc/sheep/female/head.vox | Bin 1568 -> 1744 bytes assets/voxygen/voxel/npc/sheep/male/chest.vox | Bin 3336 -> 3352 bytes .../voxygen/voxel/npc/sheep/male/foot_bl.vox | Bin 0 -> 1232 bytes .../sheep/male/{foot_r.vox => foot_br.vox} | Bin 1176 -> 1232 bytes .../voxygen/voxel/npc/sheep/male/foot_fl.vox | Bin 0 -> 1208 bytes .../voxygen/voxel/npc/sheep/male/foot_fr.vox | Bin 0 -> 1208 bytes assets/voxygen/voxel/npc/sheep/male/head.vox | Bin 1920 -> 2072 bytes assets/voxygen/voxel/npc/skunk/male/chest.vox | Bin 2280 -> 2576 bytes .../voxygen/voxel/npc/skunk/male/foot_bl.vox | Bin 1152 -> 1272 bytes .../voxygen/voxel/npc/skunk/male/foot_br.vox | Bin 1152 -> 1272 bytes .../voxygen/voxel/npc/skunk/male/foot_fl.vox | Bin 1140 -> 1196 bytes .../voxygen/voxel/npc/skunk/male/foot_fr.vox | Bin 1140 -> 1196 bytes assets/voxygen/voxel/npc/skunk/male/head.vox | Bin 1232 -> 1688 bytes assets/voxygen/voxel/npc/skunk/male/tail.vox | Bin 1808 -> 2168 bytes .../quadruped_small_central_manifest.ron | 144 ++++++------- .../quadruped_small_lateral_manifest.ron | 196 +++++++++--------- common/src/states/utils.rs | 2 +- voxygen/src/anim/src/critter/idle.rs | 3 +- voxygen/src/anim/src/critter/run.rs | 3 +- voxygen/src/anim/src/dragon/mod.rs | 12 +- voxygen/src/anim/src/dragon/run.rs | 30 +-- voxygen/src/anim/src/quadruped_small/idle.rs | 34 +-- voxygen/src/anim/src/quadruped_small/mod.rs | 187 ++++++++++++----- voxygen/src/anim/src/quadruped_small/run.rs | 78 +++---- voxygen/src/scene/figure/mod.rs | 32 ++- 137 files changed, 395 insertions(+), 326 deletions(-) create mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-0.vox create mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-1.vox create mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-2.vox create mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-3.vox create mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-4.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/pig/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/pig/female/foot_br.vox rename assets/voxygen/voxel/npc/pig/female/{foot_l.vox => foot_fl.vox} (64%) rename assets/voxygen/voxel/npc/pig/female/{foot_r.vox => foot_fr.vox} (64%) create mode 100644 assets/voxygen/voxel/npc/pig/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/pig/male/foot_br.vox rename assets/voxygen/voxel/npc/pig/male/{foot_l.vox => foot_fl.vox} (64%) rename assets/voxygen/voxel/npc/pig/male/{foot_r.vox => foot_fr.vox} (64%) create mode 100644 assets/voxygen/voxel/npc/quokka/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/sheep/female/foot_bl.vox rename assets/voxygen/voxel/npc/sheep/female/{foot_r.vox => foot_br.vox} (77%) rename assets/voxygen/voxel/npc/sheep/female/{foot_l.vox => foot_fl.vox} (74%) rename assets/voxygen/voxel/npc/sheep/{male/foot_l.vox => female/foot_fr.vox} (74%) create mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_bl.vox rename assets/voxygen/voxel/npc/sheep/male/{foot_r.vox => foot_br.vox} (77%) create mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_fr.vox diff --git a/assets/voxygen/voxel/npc/batfox/male/chest.vox b/assets/voxygen/voxel/npc/batfox/male/chest.vox index 145317c485c3efc70874f304b102b72610ff4ef2..5264d38022b18e7de26c19fae1e5e74ca4552699 100644 GIT binary patch delta 1025 zcmW-eJ#JM&428!&p8FptvH>bOHULs2iU5K8?pzTmBq^Xkbd=OQL`9P-062Og2!nrFCsSI zLNEcUYF&$5#Z0R+nOE|TBJwgkg%P$|t0jd&7$q^0Xl#h_K9^`AMR1H@dMnW*va?kU zm?2i{qSy#uFwE#BZBdm}Ct)Sw#cKn=-mrn%yr-ywd-5Hk0xaSLX$mH7tMEWr-HtI; z&=lcpL`~gVt%I)x&xS)*yaSivM(j2+%17~t2kae$RcYp}M>T8oDx?+<{4=CJviXr0RNC?zcy;B zKcLVjtY?~m!kiEUFhh=cK#Ez^Er2r`31T6@?ed}j-T(9RYWL*!z1{1(C%cOm?{~jG qf4@A|o&EXc$K9jn7rVz#KkN?6+ugx~H(xLH%Jl8o#n*pvX8!?g?s%X8 delta 654 zcmW-eJ#G|15QVE=chCRqA^|xZfS42l2WvFb64=Q05g;dI11F?t5h>yfmf!$z1jG$E z1kvynBRx%3b=RwUuYc};O~=>u>d|L2Tb>_Qe)g;}dv&-unaA5}uO4Wu8g&iSfkmz7ypVVF055i|8WJR2=ph@x3`Q`4R;zb3_1qb> zSPwc?H8CVDYJF9vm)uHPy-@48J7ty;JbAStSKDc|U0SUtpUD|+ne%dFKr}ZrwP0kx z#K9a$#9*W`NdGU9s*icGhI3SjGjBsJOCi8nT8MB2I6@R4R@6gGq6bdFEd=SvAfZa3 zios$5v4~=!1WAzY(&EI59C9(td(cs*$7hxr_!lr_Y5-mzskhwe$#L0t)EaVT`AiK5 zUicJ>D1Y5S=%(352stZ4e7P`$IvDaGLYu_P9WdDKuakY+@-2RyJ42qWBLiOcxMK zv9j|gSc!#|zhIp8!P__U_U-JJNx#0owVCOj!=Gh&95=$U@?i){bvAO-3AGI51hC2X1f#$6KY{gOlR}F)5NHgtPC-W`oBH;qd8$Q5c#)7F&2u2t+r+hqC(z02E2BcI*6ou zud1rNYOwrX5A*0CKLPne{D?J>K6x};-63DxJmk^%F*or(_YK!i^~Wzqg?E6_x`WK5pf(Fa5w*Ie}61&e{I92>qDzfZ|w8&Jv?)_eQ?- diff --git a/assets/voxygen/voxel/npc/batfox/male/foot_fl.vox b/assets/voxygen/voxel/npc/batfox/male/foot_fl.vox index 91c9bc7a317107279f6ac82cb43c2f663d8c4824..f04206f31250c7f98694d789cc1f9c7b7df95645 100644 GIT binary patch delta 273 zcmWlTy-EX75Ju;3g|Jqp6h$nA6jpW$5{nhrB==qth%toP!yJaWZcG|yLqA%$1AyK}>8#*E00!l_m`;PmM#zjQW3)Ri zkF8T?4F(Q~9DtxAfy(5Hi31UNLiR-HIW=NnlE5II7y>eQ0&z&#a)e}3<`|QZc_dpV z>^K2=L^4Oh&G}#R=lx4NOKWBwO8wQ|56Kos_UC4@dM}h l>0t5s7YpQh-gB}^q%=oE*{~OJAcllC=p)S|q8rHsaZZ p`>0&a}wDY>bs`~a82H4Fd% diff --git a/assets/voxygen/voxel/npc/batfox/male/foot_fr.vox b/assets/voxygen/voxel/npc/batfox/male/foot_fr.vox index d88a433c451ac0c24821d6f65a569a6e80e3bf21..a21101285206c1d23755f97461ab75c87beb8972 100644 GIT binary patch delta 271 zcmW-bu}T9$5QgWU*%QK9nNk!<$@DZ%U!Z)xP=ltQ@j~{l1xv4$ZF1o(IbWcQkn|WcP2S>D@53<>+SgcZF%ozQH zL4IbgGXMXIXGjpHAsh|G09;_O2N{e&5D%EynZ>$UC@>pB%>c3iMgedDvwcYH5N9L> zm~4>^@$Klh{yqKF-Q{&XUF&Ljbg3WXw|I?}di&%~w+~C*>0D{%N4l|f9^bJbkH?Lt hA7qf1UKv;AYi^Q}+SytqO;dgC#KJAcmUFS~T7PYWK6wBD delta 223 zcmdnO*~3{M<{zOjje&u|*U{4tNHJ8fFfasrM!E8UI6%Mz#LPg<3d9kSQJx+^8UzGE z1S3NcBO{|9BNIa;BO{YPBLkBkBS?&a*`I-t#UH2{D9#KNX90=>`9PY1kr61z1hfmJ zhI!)hpThsW6#q|QVEDfch_3r@b#n+43(yer`IDoWpR!%Lbm{*>*U4=xx|54p906e9G`#=- diff --git a/assets/voxygen/voxel/npc/batfox/male/head.vox b/assets/voxygen/voxel/npc/batfox/male/head.vox index bac4ba0bd146058118526ce090aa3e7be7e18bd2..cacd070c2cd3414af5840b89d563d87be75c694f 100644 GIT binary patch delta 1329 zcmXX`zpEWZ6rS^QW_I`9pur}Ml0qy@qZSX7_wpiKldF4oCQppd6e@^?kitSNEWBWv zG*63*!NNid5rU~g#Ky+T&Obp2m}lpoFn$|c`1sD8nK^ULH*@x%Gv7V6y-|*zyBk8- zTv<<`a3_WE*81jZmr7#<}+jiwGT<3|~Y%2RZ@=PHvM zJ$B<$SDGCD^aKK?DH&}aCrm~xj93`qj0Br_8rUv(?1%1rIvL zXwWL)F31!(mL^6$H;JCDI$z@TowpU zxVHh!;EXq6083W}=_;Yh1*%LU#i0@hN1|4e3slk)fPoNqRthm)wvYx@x=^86R&30o zlL;!Al>sv53@UVxQK3Q)7I2VR`iSH*UOQxtRHH)?9A@l@YZFOE0*K`Vg;HH$yksu{ z>JT2}VvENSjY~8^RjEWp_9i8%;(k-@amN{5krmgXQuEwq=oT}ohE_7AB3RQyF@bVf zwYmxB=0}-p!n<(z7`DS+vf*$jf@IyaZj))r^9CfK2-xAE&Hx;u2;M2)fZ`E8NfJTH zH%vYn%a~a<#tPOk3T>h=SVosHCLl`KL=9usut_s4jE=F*Hrm%cytr{V2eej?mg>>3 zJzA{;j;_9TCH()h+1uM|_;&xw1-ZX|xO-L~o<05JulDBi7u&5@Z?u#5zifYg`}^)x zFT6Z{_)WX^-bs7o=uTUeFWSNDpSJ6-oNFJi&bQC6ztHY}^iuorlXd&~v$6el`|bAA p2j?GLwH3)P@0{$u_P?M0VHFyFaPxt!@B8-a(eA5wZufn>_8%TtxdZ?J delta 1116 zcmXYwJ!=#}7{}-JnVp^8yNme(5o}YNHcHS7c!9XHrx6581^ozKA&9M>*r)_SJ3CQq zECqYTULhvm!D9W*V&IqOndkLCyL+!T&ZevW;KtSqrPQ_E`2wSU1f{OekM^2!;BOPE z|J=BFG=FPLRH-wFVsi9)5yj;w7GGiYpXfPzyNHgMQ@Iv%S`)9SslDrK>T9QS@@hqZ z0*aE?_JbrEGzEr^1MQ+J>PkaVZW)HKs^rRGnySE=`nu#;91B5DBJqgGNKK?R(i5EP zQxRtohpn;EGK=0YTAsklmPM$+)}uuo$wYG`=CsWdh%~3M331fbf z`Q8-_eV~oc8(_7|Q)rdzJk;bWSVg1yXl$P-3ea$a#@Sx5f=#0+muJRh1EPJ`z(l$1 zpk{eArmwKI(fAr)XA#{AudG#`g}$>an}Q&sfyAs}+$tyS`Tz~L6lk^WJS1(27h$|J zNGu4D7#^T8ZrN(TY_y?|rvM%ro|2f*8AQ$?iTNEM@jV0(K3d@$68uJ1x@$Nz1RK;g z1dR#(41_`21k_3=;PG2<w4(rdRAZtA(I=iER$#w_vj6v}N4aYK!elcj^nXg$_153gL>Rc`#% zs-2yk;rRG?`1MQ;S6_b}*6-Z~dwYIo{oQ@s9QMx-&y^ZJ!B03*YW>o0ufNIG=KkT6 uVejDKkncSj9^d~moW8sJ;jiD*_UXmr_2qCPpAXgWW^etV+FswPcK-o}=bT^w diff --git a/assets/voxygen/voxel/npc/boar/female/chest.vox b/assets/voxygen/voxel/npc/boar/female/chest.vox index b9de4541e25a28f0008b23f33d20def3fadf8b43..791e7164a8823b104e8393be54184bba930af90d 100644 GIT binary patch literal 3544 zcmb7`f2f{i8OQIR*L^?F^S*C0x9K+BPG_5Xrp&h4oM|?jLpPf>S3{2`5{ix?`5r`c z91LAaX4bMX4YIZ5d7cyDQdy&rv4#y1L}W<>AtDj|+aD4AclEiCDMnKC!gcQF{&oHM zUf=7w&+aeWJaNbvv*Vg=H!_&t4vpEhZF=jVO!!sE$B-Ji`IhNz2g?G#I~{-O(3?SQ z!>AgYVQ4e+;L}V9X)KlLq(%lvW4d5M7fon`wQVpCiET8o3&Uz02FNJSL}yzcQx~mk zy`(Nk9*0=gW9OrE;#}`Vx)5a?M8?tbZDs5kePi0_q>Y0zx;9$hibE_mjkIPEI`OVE zP3!|_y>(sm(t3vuhpxu3o@YXh%_@&w(UEQIhWJt0E(YnNcddBeMd!PaIhXLQv8~j$ zkCp91A}0Kd%q8Hfx1D#`sfah>8@|U9UybhhIl61td3<&F>hRTh*Ty&hYJGtPz1 zRcX!z-wEPILd?>+fpivejm*WIyO;y^LT4M+EP0EG9Hg;Nsmle^#5`AHN8GNKxe$oi z`#w|^n37-Y1RGmhgF%&BSIM0Bdw=Ti*;@d*hWwO2Iy`Q94q_)Q)~ne z2Wr-w7Z8> zSD7{ln6egz(gxN%*!V$_4A00%Lq0~S50P*71N#9C!ytFTgB53NV>^R?F`M2F3*U(e z9dS_3!;#@>Wtnmp9Biss^8c)>r2se`#5td-X?W};%sIY8 ziK}pIL=OQUmxvwQBN&9}+lXG5LvJhg1Nstc=np=^CqvDUg9Oe3R*^X1d<^it;tX{V zhov^DJ96qc>*s5g{6;V;wS#za6sg%z>K5*K^m%d21Rb_2wMIVC<0^OzuYHNR^c46j1Ka!3!{CHRmyckm_$H@* zK#zd`rraN4kMCHMf6m&{kLTC0QF30T-ojs(>1#vZi;cal$s2vx4~TKTcFQ+w1>X`U zemZJR9Cilua%#ZQhaEjKG~|z%#lt(krSwoR32@t&zQ7$@Z~#jSP7-BK0%t3FA~h02 zsSBj&juFhs6lF)|l$AQzGKIKM8vLbxmBJCS#R2MInTcp~sc;7W!^ z03>OpU zGPq{yIPu;IlBh4??M&2=@a`twUn#+RrpiSeOuKV0I zCd~hPW;Siwq_eZL`tDOkuYdNmu3Y#J{oBHYdg{~;Ex+ft{qn!cg3XI{$sH3q@$khu zb@&Q3Tceu2wVERzS95x?F4$r8oO_L)cfjZ+FBr{xjSlx4J)8OBpBuewN2A;CU7*vC zoUPwJe!gBiYjo#9qhCF0^r1JoyK|{7-!rMJX4mM(W1Dr^%tD=fa;dIqSLnJ|FVu5x zGrH;#bRRN$)k&k~OW5C+)f^nDd1;|Oe&Jc#e{zw&^_gX=+drWPjnU)C?~y+v2Ol(g z^an;y^+sQNk@;q$N46UM)lEj@fzKG$BjCB->v$@ z!*}bxuTATLZ|>D&{bPFOm1lL$va@vkigT50>bj{(-MIDw{q*`Nojm_sU4O|cJ@Ae5 z^yp6}^$)MD(YN2YSbv1gW3AEGUpD%u-x=Mv=OTS({{}t%{1*M|A9v}@6ASdopDolE z-&~?^>xzGmf0FpuPJ9smv)k5vbo}>h(KF9Is`}39|2zII7fk347lPN?Rk~|xg>Kle zLBD_bVZC(S5xw&9M|H{mCHm@5jlOlOQEgkDnwrvkRz9Ggzy2jP`}gUhnMHd1>GyK@ z@KU(5e7Syo^+CP*%BS?sCmz#tZ$C%h_{C~HKD|Vrnway}-w>&!i>4?W%M z{^ySAcVBu%fB2g-`lMGKlM(&9`ZGq~`SpALy+cm^ r*M7-c`IYg+i4*hV`*VG{{b28dwSS#`fBxb7@2`D${P6cjoHhRh)YQ!E literal 2836 zcmbuAf2h}28OP6g&T~HBpZDtWs#BNVuG+jBTmHx&&DJ%&ZMxiYmTh-SMr=%x(e5Q= zlZ!ELjZAE2;uf^b#`k-Pm~CcK3^5rp24jeg2ts5;^lyJe^xwPJ`5Iv{3hE0l-p~2* zd7kH-^PKbD^}s`eCqoF^H*LKi3859j&aGpk?Or2<8afl|@X*6!Td!0%27Vqxh>biQ zo6v%Go=&M6PhL%=j86QO0@m{KRE*vSwbg_u!@6$-J2Lad_@8z{sk z3eGo%#ujbx(oY_-U6lU*+=+d;lhKTNf7MA~;C;&wpp1PsXv~Flv zw<6~XyDE0WyH1`)E)GVn4n~d+R`NDyeLkHbItnqP5Gxd74TV@oAvT=#@m6NLAvREmO?;(HUf3=AAmS$#Uu`4r)OE%^=dQ7r4pyUG;7p7hjWhS6P9L_FvjZ#R zoN3icjB^I<)Cuf$#;>v8f%RG+-+;9_Pp}pW)&>cb6){`bMccH?+8DDkM!%(iztC|o#|8(> z*x+ClHaJ)f8yu{T4Gz}81_x_mgM+oO!NJM%eZTSwe`oY1@9(sus}V4 zg9T~@9L)GGP%{x?r4mTU(TW^IOIaFkF$>KAy}d|ON~W*f*0s>{8}u2IoG1J zEAEuBcbPkuc{eiehSQfyKX_k>i7#;GB(O4oms)^Ct)z06V36A6hsItX zerTsQXIyFt5=6*g)U1QGhy@8d^%S2i;!xXO>KqbpN^0T*3=;P-qp{aV9NMW#9PWlg z0&6fI5^qC7BV;h{wnOTX$74Nl?-O;$d`Mv2H3zFR7ZP^rDZc9DR%09t5_dn<_!bOO zjofO9cO^|bwn3_qTg4nm5G!JWRrmp`hyw{b^%S2KaWdmzkhps(;{yy*CQc>}IJQB` z#Bt_8g6PBn<85&;Ck`a+)Kh#qad?Lu3=(fa;(x)xAW=)X*u38f9Bc+QIK+PH84@^T zi2c+%Byh;3Jp*6hU^B=89IW4%XUwzigZF%9Q}7%AZR^*s*W~1+-aj66@5`69c;IjP z%fNsxUD~eldv)tC{v$I-=4jqygBm=zLc^yvD2!%>eNBbaA5yqHM>Dqv&3!89wqrpb zdo8HGFQ{)SXcp}`KMh*5y`^nW&D7X)v-IurAJ&%1pdBZIzH%n$*(-dzW4;#d9nzA? z?U$$LZf6 zw0Ssa_xhmyTY_Gqf5)2n+B-U=13Q-KutQh|?_K)@l_1!%8 KX8Qx?hQ9;vJ4@OC diff --git a/assets/voxygen/voxel/npc/boar/female/foot_bl.vox b/assets/voxygen/voxel/npc/boar/female/foot_bl.vox index 6dcc0cca61a653233c130ee3faff938db5a7e42f..377077053230581acff94848af272fa6fa80ac0a 100644 GIT binary patch delta 349 zcmWkoyGlb*5S-m}A4wXCHUW_vLP&^6z*~seNdyVOhzJrD#P|)O=`6LdPy%)q7WbZ7 z1bZtR|G*E>j}X>52ZoumJG(o-)rVUBXn)dt0wSBbr7T8LB#T!Ro`29cQ%wDO-88a$4GdPwR4p%$;~0TFj3UL*-gGZCo^YeUK@YA#eB9X-$mqdIGIx9=dEZydzu}xxW1WurYc{TsAiFW z1QBQj&^t$u2qKC#h(MkIS&LGMIL?7+#+fW4?SYTtJm&~i)K}1?wPO}*4At34O1J`(W;7akwX<3}Re-zjD&^!pI5Tze2*Fh4mhKHFQY zyxqjs!~w81bKsaefUX2E(L$IP41{nt=#h>iK_5xY6gYvGiEDypvb6wa4|$$r6F4Ft zd435agm_NKucg&^5VpW?gbWa97|B92K)^o+_XeQ`f$)fJ7(+9+wH@4V2zf7GCHF4Q z^!@o(zu)evJt?F0)ll=OulS~p(?mD3p>F4?CTo4oHwM**%$5_15QKN;?!}nb_()^tBZVZ55DOt13lW7BCY?qrQwUmFn$FfzIk2|Ky;{gG z@IUw;wDTvNa|hqeusgf^+WFnAE@$)l-OMgdCR2%hzg6AmLZ&U|*Ef?@uIlykM;~d7 z5Cj`Q-Z^BQYWYjS+XBO9e~<8}@ACKt|xRp4q|!N#uni zPsYF-fk$925W9j57bH>$BTp=th1V7$2Ky)wDhnf9dU#kugJytb7$H=mg3*M<7K{)! z4i!USFyi>__lj%R7y9{fr#~O}i!+%gTkEUZP3nqoYNwUyPP?gl-Iit>b?t697GE-6 m%SZ?9R4;c)Zw^SG^Uk7gPL>DFREL|14%-c#w37EHGv|L|SH8g<@ekFBW1zgjfjvG$Ii$!~_vErcx_?1S<<0TUqc4+JnK|rycK?<~*OO`UAtD#2?U<4uCvw%!hAU;@GvY~yOmAoHf-Y~D zC=k^&ifIxcy^ne?iZYiyQHw$pG%TsnM8&al>|9dN1md~(5$cnwXXg{Z3}ymjPo!8Y z-mJK%t>mSMazkB*!T7P7Z|H+|AJ6jF+fDwBPvI5!n{{31-uhZ@nkEnWTlrvbJ0I=$ b^YCPlC+CO3Y#c7J6Q1ojEU-HNwmba?qxU`c diff --git a/assets/voxygen/voxel/npc/boar/female/foot_fr.vox b/assets/voxygen/voxel/npc/boar/female/foot_fr.vox index 64acd12622a55b11973724a7e44fc246a4522ca2..c2b5b2e84004ae44877cb727440e935f3b54f127 100644 GIT binary patch delta 365 zcmWkpyGjE=6upmqBth^|1w?jPLL?%AENH||qQ#OJk$}bsLjFN)Z7pnMK`RTv+0-J~ z`xUl!HhzHJ^~}KG%$a-cxp)5RuZ_{!$uxZ=qT_>N45F2gXj06Mmb}1G08dm0rWdo~ z8|+UX5RNOR*fG}}aqJ#O&0CV#kw%Urs8}M@aOVIFh&W+&BB5gyXs%cRhL!-n(24pw ze1dF%2pJkx;OJpI~-~UUk?IHJ`6L7yz>}!hDlff=~jpUslkdx)2E#gg}B8 z4yw1`IXA8^?epc%em?HYbD1Yw>#LS0O~XH}*U4Y|u^Z gYLD#ZknFkWm3=*39<);%ZYDPDwrtW#-k)^N|D<+M`2YX_ delta 295 zcmWlSJxW7C6ov24%!|phP;6f3!y+UgLM#L|jYt9yVuA=sOl3Mj1uB|Yp@7MubLd=Rfdc%3+(%-cm_0h5NZTeC%1lWt$p#y`9qHO&(hkX z^QWJ^UJidd?6v>TC*M3h|HCWV+I!NP9_jPM>`0ym<_9a^@D0DrpU2Wh>||KzNU@n} zvtzEdpWSTj6^shT$VDD&S>)Q)hkCBQG)&fPd}mw3at+bdf^UyCh-b6aO=t8r(q+0V zm)@2u@4gxY5}YtFz)h7kRM*VCt+D7(3rOThP6N=TUwP|S=CYaLDk@O^TEZ*=wv)&Q7^No!2ychWa!>tvSAqzLT%B zDWi+wfC@2FnNo4{nJCX9O1?qN8f1!)Ci$G6Oa$`5QxwL|Muv>NdH|F(EGu<3LVS2r z68TOU*_>z5;ZeD5csfAjCL{p2UhkU2AZU`1vteHOGE|u^&*Oym{J(0 z`{*?R>XXKX@?b*dJ{Rqi{(YJSZ&Ru{L#NmF@*N`6YC36bHI_ajVhTT zo>ncu!QNQCHNH1?hX*Wyu2EA-=_qwIA;#%U#MuF-&T4Yh8Z}DIi|_nGj(+-f`|I~-+rNMQa{YH)9KZke zjqU9C=Egs>?cV9h_Tk+-+s9|8+sQjOx3dp!Uw@tt-#TgA{kyle?>}nW&!4vKxAS|~ cGrxM{{+(OfgLjX&2X}98k4}$Y^nM}#0af(;m;e9( delta 1202 zcmXYvJ!=&~6ozN!eC^&?B#2<=MMO*^#6s|^5Q&n)q);@bGGL+QO=Y)j`V0Ppotr+t zz{)>i88rW5eP%K6FvvdLqdArrS$ILWdBAJ{B8Y* zaytHWa&S*uHKi`6B#Uwppo@IrU^7h%TF`Q#$wup?T3<#5Z?PkSb!Fh6RP8ehnT^mv zv`y6JJdcX@RtsvNoopO5h@j3oSR?Rr_JM&qd%#?3bfpSJ5FvaZ@scsK+e4uOY5;Nf@$9*$Sw;Sf47M$7^e$1E`MhB7u#a3Kc; zFXW&ta*%O|ae!fN7#pUBpGmB&#HyeRex+#b$UE|myl`FzHe{MJO_`?5*fL|!ycIR2 zrqncBb+n@$?Px&@TF^lrTAoTZa8N!%t>VADvADoaAC*) z=i7QFUuR5|*OC_eZzM1AA86!%LrtasW_oJ>t&BAPE6GayH_}m=9M0q?q{Q&wSx@1A poCU-GG8cybb3F|wZ)XbRcUDvQ@2xKX-&;@Rf3T+fW^v|3MgZ+FGz$O# delta 170 zcmeyv@q)k&$I7BO_xW zkWs`0#Ec9;%ml=Y3_vzRAtNIbkj=c5kqM}diFN75f<#8H4Cns`JHr1zUz$1jHe;eZ zH#hfx31Pwi3JMDU4K~% z(S$Zw+Xmy1*hUk(Fy!t48RgmNZ0lp{qIIp8 z)CECzEbFoJQ95z1_aa@0G7ci+X!*7>_KdzUZFJJcK^a{et#8F47Mn)e;L@yk$9a6? zthcU5X-x}LWZTnc+ zJ|tqo&&XT?zIxkvhnMnKTDXuyhifU#MU>7b>G?{H8YBR9Qi&DIP1Z0=sTOxGa$whX9PQmHTHcIdegYpVAl*x z=LKHY(%KBx5l)ml#lNb=gH3!418k0n9~+?wZ zeE=Vqh#lM`7=-BCh+daNZ!7i#`VwpC4?e;tL(Pzb1kM6hkvIn24-uYmW?1|vwMpHP zQ^#4qP^;uOf>Eg*#FL{)&4yC9aL=R9lbblCmP>B1>s`qu7@64ns`L)>NsR`4aQNd5 z{?VsGw)l&^0hlB(F(q~c-vYV=zWK6N!?T5c$2@UA!{5>`%3by%V<5k=#0z(V5DOyc zuvMuw@`)Z-!DD#sOU$LGz+V~I-j^N*Cp@}*1Pks2>cSTcgqW&QQ{)1j9y>n61^Q92 z^o82c2e?zu4~F#(ILHWsD&DSQfr|h=Y`qZ3ww;{Na#rTlJH6J zE#Ys%Z^8dW9I`Nvy?{w77=opMYXbj7E`+;6z7u&Dc#z;jf+qrB1g>OwB=Ab$nZQRO zpHlpw283FW;sab4>PL!Q_%2{2)KQ{`2)#t;F{$LO_(&fT`ck4t3B5|_aYC;X`d%W& zjQtF!GIkQZHYN1adlS7l;X|TNC1T5PGQq>dS%Ies$wlxh)6+A2%WyGqE`w{PjuY>l zAc^`C-p)h~3GZ&={gooT$HLnpywk#4FTDA}yCL-64Ca}9WO`7>kK9D;MC^nY>dokkDb$@(6no2QN5zR~EOYm7e4`u0ng>8>qPx_A2pdg!jTI`@?gdg%UJ_4twR z=wFY0PcJ-ov0k}$rQYzl3-qp?8+7;eM)!Z!=;8Z~zWRjG^(&U?*43-@w)Ge5>@}C^ z&ee-`*QLw#@oUf1qqkq8Ghez|ci(ZN&fRybKDO^}-TUKb_J)ys=tOy>+4f7@J31qi?=! z^v}ODx_8$F`t<&Fdg8gw`nNys(Amcp>El12&==ocs;6}2N8_I&{);C+i2s?bYd${y zdp7IIXCGF5_r(7l{|)CX(ap%^D<^cv^h#Z~Zk_&M!(qK-%@Mug(T8>E{-yf*&y2ov zt5I!Rot~c7d(PdXU%2iiHT(DK8M9~Tv8Ue8;l5>XXT=Kr=6MJ8swu@s>Vr@9y8qdu`u&$)(;xlzq<-eUNA;?Q59{Ao literal 2876 zcmbuAeQ4cR8OP6g&N;vPo@O>pmvpvS+PWr{&A!+dS7&M)w{&*1tJW=>Wyr=F!f**v zwh$_7bXZGWt)ZK+S?jp>BC@)bSd>v}8D$K{7;%Uor3?}O^$(H#_w{pbMXC%1z3}1t zoadb1^PIQm+ynPNIB?oIw|D2*eTZ9Eb8i3G_-H*h_?4g=%JASr<6|Ed82m1J=X@o# zeHCg@PwfzjsSu0lkkA4xp=Gp!R-p#5q2S9X_zDWX zibCWYLw$`l#O!AtzMj=L!;;jDT}3lCie^9!d{=4)+LrskuoFJtU_K24-*nhTIka4+ zYAsi>R>7PL>>}Hh*ow^4m`em>t`UqmMzB0@i>xoU6ZnXNPbl~T1z$qJmr?MQ$olxM z8k;uYw!(No$~{$pykBjO9$53!MR5(^?@0$3i)+mbrtxZm7^nC}9F zT;KUD!64L`AL=_k;?NFt&N$yC2;d=sac3h~ja(40Lq~~OBM)~w=6eo-Hzibw0S1A3 zOsMbp$U{3+$wO^K2w)Y)L*Q))sD}hbZASOOGq7!LuAT8m(1#zMdj9VJ$o zxs~V#gFx+v65oPBC^5HE;9Uvrh;0x`%&lMy1n>np!3yGl736_{9Xd+Pf;@?SFbLFM zNW=hxkjRtB0}Q5{~M^M{J#MY-2M5TE?)l++_r6-W@l&h!6~PEUcRE$Js;|?Jw3X7d9U*C)v;gx zN4iIP)%WOt29B)P(3$OWqe*VEDtGo{a#woQz1L~^lTNpsbo%6LPUT6b#+=hq+Pyz_ z+Pt@>Jx_LP{Mn`Y-i42A_pH;td8e(@r}sIk_*Bf2J%q-z9gxN5^ivN$pQ9)BB%YA?>+U^Umo4{0{yE z^G`dS`=Qh2w$t0M(;jg;JL>eS2b``x;WSSB=>twDAH#pxY1fd`!EH{5cRRg^f8XYQ zO^gm|X5TuUete^5zp_=Q5AD+B?|xN(Zcb?Z>R#>GxJvhaZk--KuvL?LoaVmfbmp5* zm!5apva(-e!)x@&mfJPGd%F${_iAGE3Z1xntria6q46*6)a0Z0Y4)jyb^OQ^n)$}K zPJU-n3+?B$_~y&1)oQwV=}j6K7|@2HL2bGH6Z*`?A&u_Xp!>hDT_?YNi_ZOIP``hB zSXbX&ub0TV&~$p|4W~c;)@f#9onD;Vq${uP(qI0tU(?6Cb>e3|di}jVUDc}pdHsv8 z9F?wJ`M=k{Y11bCVCxy(vEi)lJa$xlbA5X2r%vxb?4)K>LqkJ4wED2Vc+Yvcxfv~+ zUZx8#TtCAj{oI|EEA_3l^SbNKQ+n+9bGrH9a=rVDwYo6gr&H|Nzwdt@mt#G&{~b*q zlAd{?t+`hg^!@X1>PNp>)Tf_1rn`=w(Y-&ur2VfgYGh3QDp!C diff --git a/assets/voxygen/voxel/npc/boar/male/foot_bl.vox b/assets/voxygen/voxel/npc/boar/male/foot_bl.vox index 6dcc0cca61a653233c130ee3faff938db5a7e42f..01ee07fa2c6e2266c16cc00ce67c2084c95d8d9a 100644 GIT binary patch delta 325 zcmWlTy-Gtt6ohBa-k&6mL35R;@+)A zu(z`D4SWE72w|OF_?X!}v*(=O=0mG}usiBL0od6nh7$Zewx@0qnWh*W9u;5lRi`h^ z(#n{5W9n&nMK%PkAP9^>jwuw?J+CZgoPc>S_WP@tttX#opcYh(NNU3ApHxeed2JEPUcb-Tx;PFWFL&YR z{l46?>%2EN8~V!&<);lNdkBM-Za7&(xZFf|E>_D$w>PmpKNALGy)zy5mpX5^?u`FS C(na+E delta 259 zcmWlSy$(S^5QXQ=-t|`zFQB}wj-U`BQK0izi9|xBM5R@dP1Fi|Yl$cD4&H&zBV1=U z`SzU5oS8WnzWLI4G_71kWYF#pDe}IQ%129+Bh%Tue-Bl@n5agczXuU$0?->n4-X=W zJ%~Vdfb2!7L=5LZG~!I;5%$1(F_v?LDrysG&`gcR3`1Eqf)Xx3#GvvR0m4y}KzNiW s^9uVkSfa4*q_5K?{rHXB>LJ^0R?|_h?tVISEsfpEG~7*#&xcvy51;!qO#lD@ diff --git a/assets/voxygen/voxel/npc/boar/male/foot_br.vox b/assets/voxygen/voxel/npc/boar/male/foot_br.vox index 2d042c64013e1b136fd567d18ea7a401786788f1..ea50f22c036a21c6b34e3aac9daed482cec0deb4 100644 GIT binary patch delta 326 zcmW-bF-rqM6ohBq-t8r6Br0eli9rxS1XGEfM36&_h#*lxxc?v;D@!dblz^Ru#opB- z*jw576YTXz20%Ie`6b8MWW~@=cGzSYrR++p61EdKbOpuB4l8P>?fK+*DA)|yP zl_3pQYke5KNK1ngCM_epG=&2Gaq2sTIt9vOzND5W>sl|KmQdcySHaf#X?%aajo)u~ zlO4OtdJFThzq&N}u;FwMaj@2nXB&tY+lWv3`efN1Ozket#evxD%*Ml&&g+dU_y@45 BMyCJ( delta 260 zcmWlSJ8l9&5JbCbW?4gIjz60U3lWZ4pdA>$W8fCQ04FLLP};On6y@?SW_rhBdO2=cm=6r0!T+) x3DZ$w%9|FQJQirIUaRwNTwUWjeDXVgd+Aie_agjr5V~xKrF#wsKA!&E9Cz`KH4Oj& diff --git a/assets/voxygen/voxel/npc/boar/male/foot_fl.vox b/assets/voxygen/voxel/npc/boar/male/foot_fl.vox index a5eced2e875a82f061cea9ca46dd20a4d4fb8855..1e2440e108530659312ed12f578b537deaf9be77 100644 GIT binary patch delta 340 zcmWlTF-rqM5QS&n-0meoP((0|BnBHn1Vu=&lW1`mBNEUULD1hIf|ad>jRdr^5Zv2Z z1bcslt(}E`z;1mv@R;3i-@ci@`fFowd^m1DiparEF=UfDCo(D~do$IAWfYOrsqyKg z_-3!FOR3f(G>-~O^6)Td-oktk_@MA)K0< z=5N23+PFGPpD%am=i`2Qf}6av)J&UeE7LCw=R1=6>+N*jlXSf+>ABdLcI{|(e|a(W QsqNN68m+e8pX@^a0Wk+h)Bpeg delta 270 zcmWlRJxW7C6ov0Ocjn~>3p*_>Q`lHaY(yeFhzUW^B$Zg1C8SDWV=Du$z?lss8xUNI z;1=wjX9hmLbMIm9=kRYZeV8xLKFsXyx}8b(6U^@0_2j4ydM={qi{)zF9_0GY1;`9X zHb*hCyiZSeV4dq;z_STZrWd#@U_o6_7YZl~TGT#fA{HR3i-lCCvY@LMR*gnC8|`JU zxtCdQAoLYnADjINo-us6>Av0`yWhM?uiW+~R~Oy<_AI4zc>nEB_y;g6 BHKhOm diff --git a/assets/voxygen/voxel/npc/boar/male/foot_fr.vox b/assets/voxygen/voxel/npc/boar/male/foot_fr.vox index 64acd12622a55b11973724a7e44fc246a4522ca2..fcab1209d602d5bd9f76d7f0d774bb02e94efaf4 100644 GIT binary patch delta 341 zcmWkou}VWh5Zs-8?_ClEMFi7GVz3cJP>=*Wi53rIL;@Nk2>AyQtZXf8)tVP|{$bF(6*w0c;7T$iR z+PJ!ipD%au=i|OQ!;R~#G~@QhTJ?qDVnG zcm=!P*#{ppZ-#yQIr!^OALq;S4>P;JX=f7q31*9SJvpt5#zhn-V!2wkM`@i)0W!mp z=_n-2`*ipU*1hHeo+&^ny}+dc7SsiGp@34MUzEpehy{r1Vlm27UYM&FtcpfA8|6~3 zzL%}uK1b`)!pF2?^0URt==TCt=t6gGs-q>!!GzuEN#R_hJ_CIzIWa1T|nC$ z_uXuDTlRhHJGszZE^@7f$hE5v^;~^vK-O&Bv#nvdhUjX+-D3^>*=#lGhv;p%E(e!| z2AthjV}OJw3=VixWewFe^Jr@jYt_(8y_d zq#07zL^y&*A?=WCui>Z=uRUm9CnSl_gl4r7XBP%yU^51xE@+xOvS4^6=E`HUzE@Px zT8P2)yiklzKkY|kXToG-IX^ZElK_JV&~79;FPDY}30rsu4IpQ0(LUN4$h;U!pa!u( zr7%wS(Mtj9lg7s8Avw)`F4`yk`!tK`;xnBybh-}jM#YQuunRV=h$ZP601Gs^} zcP3Wyli}LzjiDPHofyp&e=5Ul%C5%bE%f8=XFHArbqa;1C_v+dg1~3BojIuCxU;p? zU$IEoG8j5)yHW@_9YtILbymtzYt$$;$#T}nuUz~NrxWXXO|UK$WucNGNrvh5NsuYd z1Qo+iaS$_=nGkx#AniOx0m(z|;MJf0LbgBsaQgSJUr+!4^ZV^Z{?Z@b`{4BXCm-GZ ymQU_HY^O(`J~;jOMLYd`*-kI7KD&LB-@g0!!}m{*z?b*$o}PVt|JCFELf!&*sQ<$N delta 1247 zcmW-et!`977=~xQ-`On!a5yAL6d_;;DM=G(1qqZYa7FGq)KMh(O$aw|W-CA;(A)(V z&=f8KSDrbWJo~-xH#6`2oZq*<-I`vXoZkIXN_qM8=$KNzwo+alogLm7hTj1UO}m`F zJv%x#1iw4A6kW?jg01UCfG-TMc*PIw!dKdTC9^?{+Nj`7CjPYBsxnY#A2i4@iQb~? zZ1@SIDG7#)OC=l*$AaD@q>s_6aIB&B+2Yo(N2-U_u2mp)cK(s#KwZ znbPMOc_mdUFQ$-W1SA;&Nk%}D5o9G9K~|CxkTxj;EF>fdOG08`JR2BVDKg_T6Fu;yD95H@MB;`<{%t>VADvADoaAC*) z=i7QFUuUdjSCWDBOspu diff --git a/assets/voxygen/voxel/npc/cat/female/chest.vox b/assets/voxygen/voxel/npc/cat/female/chest.vox index 442986db7d97246cbf292f42e6057f357d7bb5c6..bfcaadbbe291190ea43c0f4d92f302fae4288cb7 100644 GIT binary patch delta 663 zcmW-ep>7pX5QgWUnLWEroA3$ys^%uGsX^U9K%nrLDiR(5 zi6OiIq5;DjEZ^xSU;ddnXXl^U{l0&Duzh-ba{s-V9X{L~A@-!0J>Hx>I_L?{0DF*d za(cFT-~>F^pi~P`dh^Mbm;@-fh<(zmjOK+}(d-#DK*oF2RJ2{ZXtD6wWoUAjCh4k~s$r^((>yV;XvqNP{oHE|u^2=8osv5P3^BV$lW&8IOk2Dq zcwxd4EiiQu#6VL95-NuCk(gm5a%T(IoFf{XL4a7ugRMb<8AM01xVkxC$9(Z^Z$L4* zn4(}>5|hL%*fcN-jKa}wMDye;#7Gkm#E4lR0HO~!u>|`Iee z20Zs3$gaFlEW{|k_|mC`Q*+|3i6*s95Q91cF~rDwBRK@Qx(PjQzUhPRy{Sj*+ly!G mm(LgLr`@aFi#Xr^^ZUp8@9)obz5TfR74PEf%k!Jpd8+>gKVupI delta 490 zcmW-dJxW7C6ov0ScV^y$1Z-S@d$6z+5sMUR5s)NUSlG^MEnlGLgj-js)Y{@YB-({xybQE5C<`MjDtHD6uM#BH;L+sDlp!xsCr>QgXX>mf5Fob z13=Wvyo!ayLZX-2LItJPQEUE=d0?P!WN60&sKW%-$iyJ9j0XgkDF%Thub%LrmRK_3 zK`pT)2>2tG=Dqy_zvV3EZNW_5S@qM-dbJ>_LsjPPg8g6g3 i@%3LiT=(gIvUxn-eZHUXe!u7Ihx8K9CvV$>y!3wq@IvSS diff --git a/assets/voxygen/voxel/npc/cat/female/foot_bl.vox b/assets/voxygen/voxel/npc/cat/female/foot_bl.vox index 4724fc7695791c215a54596d58faf43a0e238613..205793ce10202708545da0dc6439f58ecf16be98 100644 GIT binary patch delta 202 zcmWlSKMO%&7{$+d-BxUw7?#iM&peP|_x&AFC(_PfPlVZ?~GALzNvXBp8wfF`G zvG@kB$5X$~uQQzI?ChLOquR``0h9|~MFR6>COg$4Nuk+ld!2tPmlH@c0F4hApAd)g zp>z*aJwW%NjF9Mq;!F%k9TGYM5fMsYL}fx*3MrjTN{6UcDi&b=UjWy2kJlN~6Te~? jLDwGkf!)UAxUNR2_w#PQpNF-tO?*=;eHo5UUESgj^oB0y delta 200 zcmZ3$xr0+M%s)b58Uq7^ucN0QkYZReQBb&^1;}6n;)uv7&k~R*5XgWCCZ=2lyE_^AOH%y)_g2OKU$?mG|J=!W jlY^NuxnDiG@c+Z>tN;JMm^t}4(^Tf28JU~onIjni^~Nse delta 200 zcmWlRD-Oay5QgWmkTj?UB!UCrDzFd)sQ?5CY0=nSg{VVtf~G*~Kwt?W7%spmxCA#S z|7`MQ{>RK-qjwaqm)YP(3(8$Dr7Cdg%I{SyBf)$}U|2)=Q4YgN|W!tF_N%Of+o8Na; NJ>;b2=<=Fr&VP+nB!B<_ diff --git a/assets/voxygen/voxel/npc/cat/female/foot_fl.vox b/assets/voxygen/voxel/npc/cat/female/foot_fl.vox index a09886df4062037ea9b2fe0d74c6ec264b482d72..26bb8c503cb00b26bbe0760d95ce2695506ab4eb 100644 GIT binary patch delta 163 zcmbQhIfYX&%s)b58Uq7^ucN0QkYZ?C%^b-H0I9Maz5oCK diff --git a/assets/voxygen/voxel/npc/cat/female/foot_fr.vox b/assets/voxygen/voxel/npc/cat/female/foot_fr.vox index 806210ebdf1b059b428850963cff2efb9f813a62..a0d2f925d005bae65ce3a73c85815991383ac50d 100644 GIT binary patch delta 163 zcmbQhIfYX&%s)b58Uq7^ucN0QkYZ?yGNm#y05KzD z3IhXk8Y3f98Uq7MIwK=%IwJ!!kY-6^WMEBWU}Q{ZWMXJ$0AWVvW=2MaCZHie%+j>6 zWdlRo2pF25kvNlsD_p2ut{(pFV_5c4DGbhhyn##O0BXhGkb0i}G D1&k>R delta 147 zcmbQjIe}9!%s)b58Uq7^ucN0QkYcErC@3G|17ZPz5D+smG2}5YF;p-zF;*}#GE^`C zF(V@*kOuLY@_-6*85w{y2!qrxFy}EcvgR=|u;el_vH;o4KzY`@jU6)>Co3?EOg3Rk f;hxcK{Qu}$=l>sW2TxwiG?jUx`TWh+%#n-$s~jD~ diff --git a/assets/voxygen/voxel/npc/cat/female/head.vox b/assets/voxygen/voxel/npc/cat/female/head.vox index aa10af2503d6c2cd9c500363bf12c149f62ff285..3f23bed11fa7eab4ecb47a62fb6c0d0f0a950e62 100644 GIT binary patch delta 643 zcmW-ey=s*~5QcZ&nb}1=pqJnUcoC)$IiRr+BuQiQ{g}qeD$Rj&(pnu9Ev)QP*rd_B z5Y$=%77`op;Pcsh@bJ#g?9Si!W%XmVdH(e1-n&xDlY{jkQXbS&o~=(FuKI!R7T_uk zj*d^(cZI>XgXT6HNO>XoSmi^N4NW;2$ZRmhT+xP_G%0lMp{oeZ8QNS`98H=%{9Ljz z(dHsCm(536&gn5!^TE+96mlPAF;!xf;uSjzInw5YNV}-2lNuff}ml zHn9jc9D_&MMU?I1#PG0PLJQj(D#zz#8)!o9c9xw~wk{r`iB?D>X52?F@9VwYc|9C1 rZ_ZvUpFf=~ANQ~J-~IIV_3v-XzrR11<9IU!Gq6ievi^IT2!i delta 603 zcmW;Ju}U0a6vgp-?mc&0$d*1piabCdMQRbjEfNbMsBO~DG--t`d;(b%yF5WEo4i2Y zAf1hNmMQE~nE%Yek8kc__S}K*&-&MT`{m^9?QKMSI@o;Xh<8K8>E_~SJrDf$K(w4^ z=NFq7&1u9Xl*5$Sld{KjtO`b0-(``BOp`gAd06tC()m=*(a!BtJ14n#xt`0#%k|vL z?5S*KPpVjD#Z)kwStT-&u>j4iq8tUIp`yErjBYfu%DhK^ZCSuWL&=h435;e|vLsmo zqnVW~LBVJ!S&}S)(acJgpkVYoi+&gq-CI!(qX{I+Q7{@(kx>q#ANIk z)f(Me#e6-S!}0;m2lO~_T}>Wj!SnkJ{s<$3#V|5zEOLqv#f0w`$^ z8=#1wVF$x^Gt#GH``+=fXTBfY9_~+HoIU&$5zn6~al;^qrEM0lHl5oaKFTk!gF+1@4)! z&p9zQ2(qIo0|^zwc_3yOiQH^qEj6IY86=2>oNNtB%pe=e)oSK^o$%^?Ye2EMSfUVG z3zNbu*)%aqjM8W`qIvNZa-azaa=@$&0NI8cSpqz=;pnM)&Cz>`UX$8#5my@HGU2sb zpty2Ru_s3P#h0d*re@-%g%-6&5`!8YG33B|134tQnh8B_zUi|boE*h=`bgXE@wmNz ha{u~G?hgL^{;~c0`*YiFzg+*ykNNfO?&e*c>py{+UvvNf delta 490 zcmW-dJxW7C6ov0ScV^y$1Z-S@d$6z+5sMUR5s)NUSU7JBmaotaNKn$b0;{+M!9BPE zOAGt>O$I*By))@D?lIs diff --git a/assets/voxygen/voxel/npc/cat/male/foot_bl.vox b/assets/voxygen/voxel/npc/cat/male/foot_bl.vox index 4345564f61980a8e2737296f7b9b449ff338e68a..39680eacd0dbbddeb1708c3ceaf680be3f2e0897 100644 GIT binary patch delta 202 zcmWlSzY0NN7{;IH`#$n#kd)bAaRKTWk3|L)C8R9pIL>ZY=S<2XQ8u?A3%LNR#T^*L z;toEqw|+gpp5b}V=|ei-?+i*i04=xKmcVMAFD$f3QWy+J&GEmLD+;6uK;r?%BgCOR zDD8vF2lN!m2#F~u&O|`!h|n>Jm{0;^Dig_4MCoKwI>g;Z-G%vo0UXCUUYE?Z%dq_l iZCFj&c`dW)sWAI~-tG7Eu=cgz+|*WIX5nd~hx`F=?<+w7 delta 200 zcmZ3$xr0+M%s)b58Uq7^ucN0QkYZReQBb&^1;}6n;)uv7&k~R*5XgWCCZ<#%k;=fx zoW{t+l*YiskPZ|DV#YK^AZB0yi39nJK+FVW18GKPpgLxd9;Q@AkUS%h&&UE~1I3tF zfS47?2kK=8$$`va;7n&=1`0B>q;8xtgK@GBv&duzrWEcO&Bp(au66$Z;db!k^-NQl NCz{XS?9Lp?2mm7LBVqsm diff --git a/assets/voxygen/voxel/npc/cat/male/foot_br.vox b/assets/voxygen/voxel/npc/cat/male/foot_br.vox index 9ed12e5b65aae5a52dfd3aa234a89fb761022518..7b3c7e0acbf709e6d3765275e763532266181145 100644 GIT binary patch delta 202 zcmdnNxqwqJ%s)b58Uq7^ucN0QkYebWC@5Ud3}mnYaYSU4XADRb2*f}HBTE`1BTEV+ z14}9+15+v^6LTsfBU1_k15liSIgODCNHejfGcp3%jI3!4jLgjpOf1a|49rc8j0{Z- z3{1_842(b;h=F`Y1_q!ULsO8ulOqEQ$N~li3k!>lyE_^A{ZttKhiNkY&ot%uUt-BM jIhZMv`_+>R|3AFG`v3onnUjw*O=aGhk-0gZIg$|oaW5-D delta 200 zcmWlRI|{-;5QgWm3c)I9Y2g9vQrIdMl0q#6Nvz$?1?(+6L5NB^Eo?=^#tV1~FX0X1 zKMNo8KW6qCy`y-&%m!y7norUN2HncIyLS+6kmZ|nXDMDEu!v^@tbs%V3l&TT2eg67 za(D&;jY*0$u(JC%^b-H0Bf8a?*IS* diff --git a/assets/voxygen/voxel/npc/cat/male/foot_fr.vox b/assets/voxygen/voxel/npc/cat/male/foot_fr.vox index b81df4f286207004e7e8d4c872f2f062817a9d13..73ad602ec06506488d72e1f3cdfad474d4b30d46 100644 GIT binary patch delta 163 zcmWm6F%AJy7zE&%_ueL!LN*RSp%Jx+QmL?18+!ZJ_6{Js4nP*6at2Ykg~kmOLgNO{ zzmt5Ksb=f%{UDmmT1Nom;V6{CdKWZj({f1~f-o_uV^GC}AQynPq_TiXNG~C@w6TO| zK_*nlQKHUCWO5=*cHNv<58H52hc4|^+-guQx+<-GUJv*CKAn4?i;Ftw`!c=t^_+iz C<|SnS delta 147 zcmbQjIe}9!%s)b58Uq7^ucN0QkYcErC@3G|17ZPz5D+smF{CjtF{CpxF{U#zGNdyA zF(V@*kOuLY(trw585w{y2!qrxFsCsxvZgUIu%t3FvH;o4KzY`*jU6)>Co3?EOg3Rk f;hxcK{Qu}$=l>sW2TxwiG?jUx`TWh+%#n-$Z3Z0m diff --git a/assets/voxygen/voxel/npc/cat/male/head.vox b/assets/voxygen/voxel/npc/cat/male/head.vox index a9c36daf696782596fb6124ad160b4a4e687ceca..5e54e07dd7bd2f915f6d815707d239636c9f44e4 100644 GIT binary patch delta 643 zcmW-eJ8l#~5Qe+{s_Nmfk~sna2@Ek5x7f%4Q(5(G+t<2h^md(1nL?BQ$4dds}e~((K_El1+&Y zE)sLue3Ipy9%D5h9nC@^_fZzD5~~!i*ip!lHYY^dRaI?n+^3Nw78Y}ww*ZG~YH3^H z5DvPrn4*xF{xrRF>n% owrmdXEay+}U4HY;{og;oE`R^rEX%J?moMYJe|fjL{t>74543Au*#H0l delta 603 zcmW;JF>VuK5XJF%GjA44amfKvZ~!Cm0%BGYKjW*+7|$8_G8^NXFE`*x0U@p3(si$%X$PUSIwH|HaJ7`Ak!pcV=X6W@nCM1OQb{Ba;9C delta 110 zcmeyu@qj}x%s)b58Uq7^ucN0QkYezeC@5^e3}mnXaYSU4rwm9G2-rXbBXcT{Ol4qX zN@HMRP6G-6F;nWsj2VoRm_;UwFr{$MXg2#OBe8OPUJ&-1MHyX|wt$SxqtFleGwI_ji3<9MyZU=E$;;+fRQ94|RUW$b;< z-g`jKIh-BZxwSMdJ zT)xj`?PCw0xc21`!bA70e1;+DQV6RnYYz@>Ho>`6)V+^CT zNY$4XjC86wjJ3^kt@pBRD*7_^HrQK$h;BFdk(BeDZs(Cr1MAw`+|1^Zu)QstYUuAX z@@y)dF04ggled$x-|IpKUF5>~UKY8@TQbNZRbF;E%9{zFq@HIl3^ubSj#XI0R>KDE z%S?wdD{$BhpofPcE^=Syxwo0bv}gu=9w8qD{IfPp3Uez}9`?01(=HHKZ0~HYolULb z%wW@|0y%~FWz}gm-N;$zxhVW8T-Up0mV4IFpIe!hkYHga7o;fxac(Rc$nm)}-(Rtup;JlbDg!K$0GbhiQF3k)*f?W-|npS4gl7CG^ zj>0uOa=zeiz}G@9l>vQC8W(b_4Dn2ZT{_sjDcEW{Ekj<-!=EVMN#+_V zC&Ie2MtmeqEv0$Hr&!~LUMtilzG#b&_?3WCtC2C{Q^YsR@NQwE4SC#=d*nbS-*m{+ zjQtt@vdYx>))6@%m4_+^kdIn@tbA*lDV*kNQ=jJzdd<>U;a164>!}~=Ipb4?n~c3# zklW)MF>A=f2AO#%(*`~Qaf$=7h+%|N#g5q3e8K)!<_)$-bT!msH25Z_5#G}%Ps1Sd zSmQ@sWpY1|S4ur;N=H=E5wkc^>M7POGP>R_&zUL~6$H-)gSb zIer?P8eGPv<`i+`UW7lX@u{({IRK2g(sK-^>@eW1Sh5SpIv&cxsn2}S$q@hoy zhP5h}HzoCeUM>-t^tP0_Yk>YQg%SCJd>y5U@CFL{rN&`|Eu+9%oaDNP-oj|;5#BJN z9)x<60`Ny#fDb}H6?6(ZOSKdG0yahDX`;8Hx1iUUoA8aTrN!Q=0~GET?icPW9AvnO zLzv{RWx+ ziG^Wj#;=Twj66e5hChWzg*UBxaF^?QSZ#wtMW>=e>)Ql}8EzELlz1rID7v%(aHG|J z{82d8A&m`gY(&nCnsphPbxpdVYU`TwMlN|>y0W1qZ)o3aG_9_yuxHd-->gUek7&z1 z=B3q*z<%P64b4X6JGQ*X$hNMmD{F;sS)ykH1F}Tz0Ryr`&jJQAdzrPeL>@Cw%;WBy z`dXqsfq@Lt5^oYvU?79YdfDA4j!Wbu5TGD0;X4puOZdM;o`P8C%W$*IS)d?+yo{b@ z>|hk2z(8V6meC6g$TEHb1G0=?z`$oeb?-ev|MUOu-K&H9b-~Zyafg3v&mMp5$}9a} z`}g~A{T8pkuLSmg9Q^gu*ZRZPUgQ2q@b`kaA6a#0?*orbeCIDr|KR@QkKAv+^_+j? z`X^lT#6v#phY<64J^Bmx2OoFe^T`W-KO)1+5BW|09e?H7eZF?pRsOvb!Jj`I{IPw( zkL?M5=Z(GJi)}k6KkWWBF8tuDe&VL!XU=@czkK9MfAP@|`cseI?kg`J@atyRdvNve zUhr@(dDywy!x!G?;db-SpANo$@sxk=9pqmMew33tZwH^fd4uo&{bBc?J>hS?^|1fL zPvPx#?tcz`@h8FGcq8~rZ=&~i!T;{Jxxe$Q`yY?E{~Cw>_Nbru#Ihf~ZQ18v-1HYe z{aye0$A0CnhrjySvkoqTv*47Uz2zx?_uwn;-}t3(-_80JXMOVIS%2wi_8)k`PoF;R znB_GL;h*mB$3DLZj@AYBy?giipPqBSBEIV3%%&fFb-%y46a3(l`|9edpFDYT_x`?p`~3dZn|*EHDc?Rh^;e$$w*PefoL~O_Z~XG* k%YNz7C9ikyy6Y}qTU+yIo_WU4pFdAZ5QG2Ye}#kaZ?hI2SO5S3 literal 3868 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 delta 288 zcmW+vu}Z{H5S-l?Ij+3Q7*Is9IPA;^BnN_|&|nccJ+ONT`GW@*HkPI^2e$cuRATE# zSlSBy$K1vT^LA!-clK}oJzw0F>*IF-*Q?^j3clVJ`_Fqu*7py^>*UxwnLcqfL~G~- z@ldo7@hVXbhgM9BO07_@rU9)*#Gqcp8PKX}wHbj`^VPD{_H^pop1^s99MV!Z diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_br.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_br.vox index 1abbfcc40f532df0cbe36e4b0e8cb8e86c86796f..69108cb2a799875f989f269c3ba3158f2fe62b3a 100644 GIT binary patch delta 308 zcmW-Xze>Y!5XbL(ztqwxbPz`!gwo9rL=mE?sgxip5^ADZ1u6IdLQ))(Jb)Cs#yykx z3XTqa1;O1%I4?OkKHq&7lO^jg>JtXPAt*R}y*!8LK2?N+MH%S!p>H$dn*8 zFa?1tK+BeFDrOW6=urF4bNTT#ML#*VWqxR{Y`*Pp3yFNw>WL?_qw}#Gob1c<<*B^P wFU0qK@jOq0Adu+sOvcWxw40`Bq^@g;<5;37k~B>v3`22USEiBk`Nu!_2l|;yBme*a delta 288 zcmW+vu}Z{H5Zv7tIj+3Q7*Is9IPA;^BnN_|&|nccJ+OQ4$R9kgu(9+Cb6}efNF}y@ zgr%+Ef6Pr>78WXucN~{AxvE`wO}?v zy_vM8>P3@aPFkf_)4)wH)Fu{Gl`yaB2x*0yK|zI`zA#I8C*z!VD$a}OVX%LaP|&c1 zp$z9ECI9%j)Cu|mc)8e~+U=w)OEgWheX_+>nx;5EJHl!eQP&Yg5iy@f9ApvV9>*2#jetR{;DutL0eh(zij#Y`3iDQ~U!7Tmdkb}D zae1{Yu8kN`=KvpITo7EyGHeTONdjwBE2^0SH&!%oYm6oZ4KV(IXXUSm*&v2NC3Mg< zKw}TF9vF4%%Cov$>J711(;gvpRyC#_TziEMYO$A3@Xl(`jWEz)145*Tu-IvcgOY0q zyv%zGsTUZ}La$E12LT4uK(IF-G!X6s$baKZ)9T4#xp;JVb#Cv{?INXI%hfMCef9Xo zae4Uke))3#tbDt8S*FuznM@{SHk*~j=jY}4mu0b7l=XUD=JRtK2X$jI0_1qgTIUCZ3BJ!Oh_W1x8@YEWuf*nwsLdE#kX| zjeue1wKfa|sf7b;N!gGXz>U74H8e&5vsBzG9OU9`=IFf|pm+4nE4iZ4x^>e#VciJXvw0;UY+^_Y8%H{ z#P2UJ3%_gU^LZ?n%a=cX^L0EP$LGt7Sg(gzEQXlPhPb*K;^Slp@n5moY~pY@#OZX3 cpkVQi)K5F2y5sb)FD@d)~^f3!Us}{0aVx`ANtzwi7vQcUksWD59N@$E6 z)EMVLY{dd|<2Gwxh=)d;!w@NEu!oEw8yJIFl@|h`QTC`8ij#Ym3V4g^S7#RC-l{sY zxV$36wE>7aH{%1q1&s?KE4IchNeqo?MKx34V6{dajnHI9gMmNb+4w5}2EYcB(5a?D zHTEj#)kdAU@~keGda>9WwAYY2sTydfuDzKKhS=kic_%gKMi^+opdnI3Aa)kwVB{78 zFY{hP>S5qn=*Jxd)j8g!+eJ#bmaAVlef9Xo zae4Uke))3#tbDt8S*FuznM@{SHk*~j=jY}4mu0b7l=XUD=JRThiW=adt?(Ioi>VcG)OeYmE`fE4?%W_sSd1;Au-yLZsr^ zdjroj15cU88J*FYhk(|qjX}mBtAoMF)q94y=i+9)n4?(~l!Y~8g0mAXHAQk;+_w#m z5V$qxYz<8zwYUIl*|K3{Kr4B*3}_ZmOT4W(g9jWmRPYON{v?64U1)HSg!4L zrEIMT3QTdV3>Vx8Ibo2{j3LHjqeg2JA@T#NH0Jk&-xGdIa;52=1s(Tq$-ZbChgrna z)$77<+WCAQ%jNR*w_kr9kH_)p;yhNXAr^}vX0stKFNgRr8AALa*6Vfb_xm^=k8wC0 aVz=AHFbq*jiLUEnI-SO3GI{%){^~mdQ)^=Y diff --git a/assets/voxygen/voxel/npc/dodarock/male/head.vox b/assets/voxygen/voxel/npc/dodarock/male/head.vox index 3efb0cc31a4774f01af1ef6a51f1c8a849e11f0f..ab776aad967bf17c71d6b80b8972cb40e18710a4 100644 GIT binary patch literal 3476 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 delta 529 zcmW-eF-rqM5QX2H-MceHP|-rGSXf$ErpyI`q=-TUiNPYBf51Ne0jm?+DA-s^nskZHBNNFQz9ZITtSyhpOcX(wSx_8BCU#&Dw2&Chn1y+=5E2R{j0r*HG(?dJm~!+k z$|*KMOU!+k)zkobL-nBP458LXf`$=RLxUj!&^<^HBn%Qr^<-2{K6e!=46&Bi1gSzM za>pC_nee7t5w6_tt4?`S&Lp0y(Mh62n@ms!C?n=5Hb0jcb2I8`UMoY^*C4H=H_;O* zk^qwsGRU1j6}7uNxem1PWxqt+{sDBm-Da^^EQ{FU-b)Y7`vA>qjArwIs*{z~Ebmos n*;zO~Jg9!MQTzGxsQLOkX*NyA^UGO&&ahsutKZ_H`Yy_U44Gq6 diff --git a/assets/voxygen/voxel/npc/fox/female/foot_bl.vox b/assets/voxygen/voxel/npc/fox/female/foot_bl.vox index 3e1fda06d10520445c257406066bbe0d392083cd..f159e6fb8be1aa79519c59972b8dab51c314cc0c 100644 GIT binary patch delta 279 zcmW+wy-LJj5S;mba)uN~5Q$pIJx1CHK@N$6h1}U$_yX712=@j_B%GB^3JXC*v9P^2 z@Cj@WY)oe-pSv#1&dlzx>`T0k)AQ5WreQU}^-O2XEp z!jvEv6o3%M0tRy`7&Syx(~KHu)~fcRqZTF-_TptmSHrl5#3-r6olvPJB!0Yj|iGHxx&)I@=8yTV4;FVP^)w{R{jA?s}N*Es=#4sr`V)S zmsYM9oBbb~Ss#4NyqRU+Z+wiC*U2pX0x-&lV+y`^Npn-7navl&RY*8bL`>vFh^hk> z25ShtQ77~QW{SB4LM9->Uf2^gPGGnb<|1LIBD@WMgxt94OTV5Yy5B{XWxgni(_bvL z&mR1K0RJYI|(>4uz+l2V6d>T_&U-~BHSlHaVrti#BB>C&ai{VWEP>scHD D%(p)( diff --git a/assets/voxygen/voxel/npc/fox/female/foot_fl.vox b/assets/voxygen/voxel/npc/fox/female/foot_fl.vox index 502ad700611366e863ad5ba486c9fb8cbb8e73bd..fb09d5ff3b6a85b1bc5869b94ed3f82962d829d8 100644 GIT binary patch delta 291 zcmW+wF-yZ>6ukSAFEwN+!J$?Px{7}wqfvqsi9(0cb`$guh=^MkHzA3HI=KXOa1q4C zQSf)TR$T1nCeQcv;JABt58k^9-@E^Dc_dKF=n zK{?ppP2s*#BuOHQm+O%2yXPlqGRWg>DxdGO`ktxR>8{sbJoe(wT76*hZMVGmo;#7r o4&-tOsZJox1!Qjv%Y450kze_H{V+M(P1A_pSr$Y6r8so7mq8#VG$z%ZN)!urKcPc$lN33iXwXhMy z#!~Qi*hXwjXD83M8JIWoW*+Qb#cy#sJQ{7@0x0wTp$Hys($%REvmzXgC;jt~3VLA> z6{ImnAn6JUXC#E80;DQHS0tXqQ|KWX*_z0T8b@R#Gtxz}M{;XxDC@UE3TUh4v#Sj1T-|L4esqMXId1qN9Nz!bX(|@l)R|)_C delta 202 zcmdnN*}^Fp<{zOjje&u|*U{4tNHG*l6ckQp1u{T5A~MR;0Z4-YKbT~B!obYP#K6K3 z$-vC?gn?&Vdxi;q~v;uQ)u zHu?cfVJ9}$f;JKxEtFs*<8R-<;oLhj_nfkJry2HfA>+d47=)+-PaCq=AJQ48R}$ivwu7?Kq4LcC8E3yTwnojg)^Q*7J^ z1wIsUKuPBoU1*$)h{dfP0c87zys_x9A$B-=6gSM{R1U^hK>RMGtO#jELu^syOA_ZeHkXnJ#+8IWw=0)n1#zELZ@Lc!M|3XHn(%cXiSOLHvCbd5SZix*by(k? zN!@($pAEi9M>=J4`-ik-B&MOnyvZ+Kfiim_SCnp z4duUnd>^RpU6=agp49%K)cIqnH?PWK|NF0>^|bzb``fp5c|M<4%ohhsOG~qzeDojW C6SRo{ delta 525 zcmXYuze)o^5XNU_XHO)Gh!$FDVQFERN^(Mw6j4x+BtC$x`m`uz}Xc41pVI+(qT%bUjm~#+` zs2Ritv653O#sZX>SRA8+cxWi%rQhreDcG=31R79_L#5DwD0Mo?qzXZHAXr+OI7dE_ zVV=*Rz;|jRg#~a(Vg{rRc?8a|$WUi^M1*G!L`B3Eh>VCW5FInPgdZ;l5af1Fp>tc- z-FQyYY5S@9m_px_Eu#l*g|G+kFghNt9!GPq%#=?JKpDqeQ?jUGo6VSp&5DP8+ zBerrjYNeH&Z?o`tGjHC`?8mo%$tQ>V?P-(}--9B=n@1G?E0-8coe-UG3|w#?tZKHH!6?`hkH+F2|XEn5de Lo9Frb(w+VTUB!5Y delta 334 zcmXYsu}TCn5QhJmBr9@)h!$(5g_T%XZh0#ly2UA+AnUz=k6^i_m5mWQSu6z`x#ph0 zTDGzA3L!;G-yr@02YzP$naP)AIr?4it}fdBCjisBIcLJR1umQUWFs4fq1OI$dp&R7 za+7gL2@q8gSp?dkkf172g_$1Apyy^#?g%6by$GmWql;o#SdB1Twi@6xh@-dkjxq!l z>=zlvg9R_37sJarQ})G?Q7Ac_k)z}&IZB3-F*`k}!H?yrsw(w;pMD;Y&Yl+^e9-3O z80lq#w45QWZs5PP_N5*B)*P5}d&_rbI=X+|N$;P#X_fZ!d{NpXF~czUJ9q4FUHu1w CT~+e{ diff --git a/assets/voxygen/voxel/npc/fox/male/chest.vox b/assets/voxygen/voxel/npc/fox/male/chest.vox index 9b920f9201aba61260fc308205fd0cfc032aa4b0..82bc2ac00be3b3996c66e24944127af34a376a31 100644 GIT binary patch delta 960 zcmXYuD~}aH5QXd2-7~X16b2Aj2zVqLSaAg)NH)uYL=h|mcio+r~aLs_v7WU+32Q_YbbT7LmKVt9uxETtptM4)@M14qpO0 z|LwuU!_{?PSdq`b+ZYr?>!Y+jsOqR1HB1NVViIhq4Wd>?e+Hi~&Q z(aB^fvg!yqLM}d-IJ`|RHkjIEir>a$=93C_250!Xa0<8N=@f3&96hJ8!v*maldF$T zPj{ee8?AwKt?E9ifzt$MLSi{4MM&8|$uVc3f)K^Zc5XU~vvnX!%tNaO3k6#T8o}nA z72bk)=hX{~H8DoVQ0oT4&c|qVj7Dn|9i+1=Ew%wgtE467LlmyBwILc%5Jf~9niOnd zaCBseCz|0)!ytu0m#3j#srQx}O1hbh@=-y>z;r$i;0#L8$Sp$wb83ny)QBDA zRZT4OUMx@yWQLraB?NJoWis!L#fAXmo*~E(W(X8BmFa2PP(fqLJzlG!$_g|=42m4Y z(0>u3Jnqv+-Kja^MGu)OL^~#g0b#@gVvjs#Jj^iDqZdPd$s$hWO?VqA4cl8AcF(qc&C_*PChOy}8ozv>3_soJup7=Jzv;?{{s64| BSp;_Uq}3z3 zWKxYU&I_3E0g&gp*IIp~Jf5GyzYgF(?{feBbklsXh)z34OT| z0y>La6m|R;4vq)iQVX)BB z%GNKCRB24&8jx;?7T0Npm zCe`@tw1D~h19_f%oz+{)!>bec1VU{ez(=Uv;SE9 Ucc1#NTbVP-vdq7a(TvRHFFpl8Q2+n{ delta 231 zcmWlSF%JPj5QX3Dp5mfFA`u$b`3qM%iO3a56oN{pQHkC!P{@iXG)kR|Myb>K1ESgg zvEEGb=Dqo5Gy96~acw%DB_{yGEFaNuIn)}v62ol1$k$3(Eo~<95XxFFbTQb7FdOT^ z43JsOp;9KGgnQwhvc~fWXNnx6GadR?Zzwl@GU!z^MEWC;rfInLQM_ZR9J|mQo)d)c i3hpPFOKjII&9=P1)kE=VhHq#qeiVd diff --git a/assets/voxygen/voxel/npc/fox/male/foot_fl.vox b/assets/voxygen/voxel/npc/fox/male/foot_fl.vox index dbcbce2469c047711aff4100e233b5607fa397c3..4204e6529673b0204566b99e26f354ced5111192 100644 GIT binary patch delta 278 zcmXAkKT88a5XIly+r4-kB2i)?DQp$&E$=W_q{s;=LM}EImR6#Y&c^y~<&J!&7BM_aws_KS;M(fIlN5c&OFChmzko)|9 g_j&O0YD%t$JNigilQd0bIc`h4*=E+Z$4X`ge~i~kfdBvi delta 178 zcmdnN*}^Fp<{zOjje&u|*U{4tNHG*l6ci3&1u{T5A~MR;0Z4-YKM*rAusmgCW@KVy zVTfd8W_rrV1jLNYK$`g}1CY%C5@!UeVFa?78HyM{a$uV2>BcoOjQmp^82&GGW%$1% zh~fX;bcV^-8677}Fgr|+U@GD6T`BT^;|0n8cmKoBrix^xMsVR9FX?&NY7 FM*x>)FGBzT diff --git a/assets/voxygen/voxel/npc/fox/male/foot_fr.vox b/assets/voxygen/voxel/npc/fox/male/foot_fr.vox index 04f0ef580efdc7031483046f012b7f92ea3208cd..73068aa32adc3c0aa92fce0d5c561e0263a35dd4 100644 GIT binary patch delta 278 zcmXAkF-rqM5QX2{+r4-kB2i)?DQp$&E$=W_q{s;=LM}EImR6#Y&c^y~<!+hZlOgFlC{N_hYP delta 178 zcmdnN*}^Fp<{zOjje&u|*U{4tNHG*l6ci3&1u{T5A~MR;0Z4-YKbT~B%D~LX#K6K3 z$-vC?lz|C|8JU4J^HWA3n-L_=2voxeWHU1qF@og4G}F_KYh)Ptr#LYDU+Bv4e@76* z|GVi7ldm&6PL^PHm>j`W!ri-4|f5>UhBE*9O% Dl<6-% diff --git a/assets/voxygen/voxel/npc/fox/male/head.vox b/assets/voxygen/voxel/npc/fox/male/head.vox index 07448148a71235c87b8e944ea0553de5d1fd7c99..049f51c93d3de0ab81e42413b52583243aef0f56 100644 GIT binary patch delta 821 zcmX9+v5FKy5Ur|LRkO!>2!aYmrV8d87`S@Jd4VUKaNMk^;RPZnMsBt<(agZ2foNc0 zuAG5j?hhD?k+6}1ky-oZYrJW0SYb&K#9dYEDz`!1x@3(r0UyE%<}sR?cWFMDqEAI zn6AL{WSy#wnzp98GDf&IaJ2lvEg+3TSDw-ab&R^n^Pp}hJ;+Vy&87l3Xq+T~LSfPb zMS`Z`x~fP>njY@mp7X_>t=Vi=xK6+5mYzSkA?4k!l&?=`<@?Kr>u)y4m5bZ!%lLSG z?E3xlM=5`QmBlS7&yS=GkJ$fA%AIRc-p>DX-|w9M!GT^Fb?7kC%5*v{pAXkB;?nwY K_?mBlapxcVAed7C delta 529 zcmXYuKS~2p5XNWb&0CQu2DGu#19*T`k_bUkXe5Fpv9hw2V4o9MMQo#`of1Jkg(+f+>Zh*M9|Ng>u4VR>IoJJDo2+i|j`~o_+$zv&xHt&#%IGx(i>Mh<(Y-MN^oC?Zuz|B;WNm?}$qTBM*~nzVjTfdnG4D(=IBEY5VZ-rr;nIk9oq1{wBgUq$?$M{xt((E h`?J06Id_vm@$&pQ4FCShpB3Nc@4Y`i{W|h{{0EYjVmJT* delta 288 zcmXYqu}TAB5QJyu|L=lCNMn(J5Nn?zDNHy;4*=Ec&2-v~Swo5f`huHYV=wOntCZEw16-2@s5 zt%t_g2sE=5t!7wZ_GKgA&`LA=**gkPEdx77bqK5xRU=c)%pA>`JD^5xKlkis%-PAz zfKJ}YJ~LIz6L0YF>@wtSZCH@a_95{TwFg Ml%~DE8^=%n0~0Dn>;M1& diff --git a/assets/voxygen/voxel/npc/holladon/male/chest.vox b/assets/voxygen/voxel/npc/holladon/male/chest.vox index d76935171716148615a24ca934daf652d46b12f6..e9bb3253c321979bb31d1a137ea25dc82aa18243 100644 GIT binary patch literal 3048 zcmeH|--}&W7036FwSSy*@0|$|D+5Z__f&7zKmsvAxv}Y);u-jky|S>vCm^x>dDkxxL;;MACsSk z=r?NX2MOh35WnUvHj_*Ih9@rKPvrN+m&Crpzn0!-IOB^kPh&_^37iMNQP41YnU=P6 z9t&+9a$CDF6T38N`Y@8Nz{xjYmONzcB`)tTr_FaVn!`$Tf9| zHMUJBW?8^W7gNhw$QR?N=@NBkv`904t&Za$-fswXdU`BY6a7xqCz-yF>H7#Q@M@)= zO1^Q^OC-L^P#Wu9p86(rQqjQlFYvGQs)2jWL$H{XH)LA_KNV^h^cNR41m3j?L&<(9 zZRiqwUF*9-4{HlPeJ=D_s6pUgTj>Pu0>27oqGt*2X@-@YrC~mq37gx(IUR5Eqg>~YU(oPck-#4?qfd)La4>5l`uqJ61w97S~I zJ>lGsa-V8JGjdUHvRX|q)7rFyX8<$tt^}LMEPb>UzpK(G^oVc~{K<4>pQt^+IZ|`5 zdhK1oA8pQf_D$@AJ(D*uACcHVtZ$ip%SDWUE0${%`kYc9$LNCv_Gy;03D3l*5ym?c zXCvpa7ks6}z6e%rA9^2&l^<~64&$*R8v(ID9Ff4y%ZyYSI<%ee`f5{fdSxXMP z&z)lXO04kCaX&P0pohWy_RK!|FijKg!6y@+$ydme4ad&N>*1MO@EgqdqHl(C&c=sY z$(tJLm%Nc1d^1)naq!KBXX^o$!4aDwViL8blE?|x#Bk^tJjLU;cYd3b#aX=JU|=RN z1@1y_K?9-ofC<P&|=n)J9J^_t`VcR^wEf^MD zBQc)%K;B^S)Dz$xjJM4TwFT-8)E)6fd~w^y%2}Y-j=U9faB(g33ztHy<6h<2k5XUZ zk-)3m@vU6+@Xr52)5ff1w1NK!JS^~C z^88nblc^`RfRjyE@`#JmQ27pdzF*9I6v+_kL`AP_}-B|2)E7CA5i@Y7he0auIzKVvGIQW!pWWb^4DkenI{hF z(&eK%_rg8uRMfre)LjeeHt$yVx%a3$nDnz3oIZc+oPOqQ^51s4OyuTGr!Ty@R}cN+ zxa!ZJ(zo6^q5slzR6D2o7pJ#=>hz5_oWAlVxW9M$Pd%Xe_H(L#I;r{_3i`(ry7JLk zT|O|Y-~9ZG`trly(_eh}*ZR8qyKZeMb_?6W&gs_vXY`$8S5&)S=}RBye8-lqpWV_| zp2fd-NiSTupwLolgZsDYd*P?Iuw^?C-Lq$p{`rflJN&EaHeS?YuO89^d-v+G`|jPg z&CN|+_|{GR>JM+~!lg_4D1BVqzh74lAJ(IDb9(ypx~?xT>cYZ;9zA+gPn|lYiyzsg zPd~IzKXrIcZ``<{SFc{x<>h5vUtia=XV2==(vr^4&+Efa&*|#?IeqE$H}uN0-_f5v se@*ZF;J13`&KguYVKYw1YU%$>s(1ZWm|B43gzd^6U0RR91 literal 2320 zcmeH{-D?$e7{{OA+u6=J+Y}>v0ZWF>LLqYMaygx%)(}%$lewivy7^KgdOPPx=9!2b zLVLLgb5fXy3>!g+H@#hicp;3gMg+TvqHZF(3W6xUeSU}jiJ${te!ug3-oDTGdCu9h zb9m`_GuyFg;7JbqtJQ39U}S4s{=%mK7W{h-?;RPKjrrAVl{51`O$HYyL(wKfN38gK zkEs$us>gO;3C>Si3RNqFiswBgSM|K5Q$2ZR>R30Y2VQml~0Jk=mi0Ir@q#0A}i#tT2@0^!8I(m#~5UJ@i@*Uk`?!AZ}t>mHCkWctV_(u3fxW?RPG1WbK z7;{ZoS9nFxqfX--?kP zrVcw7%b7D^eC^fXlm_YXJu*-|U||+#Ea{+#K9o^EZUX?Br9AZ{Eaz zLi2NLiAi0i>2>S$R%fU7FIuF(dwTS(Rw;j8H0&RnE>A4g&ZYNDdrh}3NV^6lYcQm)6$>?4VY~WCb0E8ZA#FP#bv`zuEu^&bJG4^o=)$pXjVxZQ z_l8ZcZa3}kHtp#&^{yyuGu#@Z_ew7l@WD$OUTHdc@*X|EYmv_GyIY6%t<}K!K6RZ~ zE>o1`X>43Ohb4!ZkSG7dq_RsZJN?6 zZI|@3Y4#J-l`E!m*QooQ>36M>ZXT0<+$DWYL%;3Q@S_Vfv}S?ccjVBdO56B84Hmhu?vPw7thX%-CS zhp1)Cmg%P#q=oLH?Br=}xY(m>4bz6zE1GCD8tQ-ZhFoBK!qy>u0p5p{o>LSQL6VdsR+fYI;)7<80O_|{O#_j2i znk@x0by-lCq*fzhkqVhb$T~|Ik-9O7h}ckGMocnftx{(rB$fkWedj(2?z8H#5Cc}3 zS6OvA631HYV^{c&@&0Rny$zJd&xritGkkmWh(;Ssg@0m_8} zYWv$OCX)%ArzP%QmvF{oG%6L;i$w(0Ds0O_s}&>m>u?+gwr#`nJk)pdXrJt$S+$TP k2^Nb5eBVbL$60hb9k{NGQmKTqwl(_}d!I7l6!ee&0c}faDF6Tf delta 335 zcmW-cu}Z^W6ov2o|A=&JC({h#P>0ep$!o! zNM=a~!Op&dkK!X7Z+hY591izfxL<`;q15jV_TGr-yyIPn(EGf!GuaX|xVrZ4@(vQVj1&}%kPJbbL-PNz5x`tUptwr!)fzl-6}pxZTQw+*UQgR)~l`W8VDV6j*r%QB>CirH)i dV@wgF(P(p^Ua!M(ocLEA=s~0L4YiU_{sD)JZGQj& diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_br.vox b/assets/voxygen/voxel/npc/holladon/male/foot_br.vox index fa4d76e0482c8cc87e274d581a5bf5385597b75c..004b27c3a7ec0523f8ba68d6ef0b422ef389ee90 100644 GIT binary patch delta 334 zcmW+yF-yZ>5WV}7DxKO6A~$sUZ^W+8~9}MUsYsmf{c`OTnQi z864vv(qG`JKf}!*@%++*ckkW3#|`(M|HzlFF1+$H5uG2|ZAtVpD{W5Jr0}k9>_N7X zwUsrdJ_+ixBAIg`2{j-V0j*{wVCj+IA+s71^N>ghNMybmvXDEkD0K`Jy&!|wnn@&femi00w| z^-2ZJ{p}UvIEMAK#NF!>)^v(?qk&en3ePZL>N>jJ2$9=@Wmzyy6OQAcwOdB-WCtBX lN1CQck_4{nB8s9SeBXy{+o;uQIP2;2Z?X5Oq?|+co_}2;Y8(In delta 335 zcmW-dF-yZ>5Qgu*FCyLA$uxsF)S-0J3PLGu>Y!xMQX!>UbStrObomx7MIktJXhTE_ zl3CJ0u(N-`pW;t=z4YL@dwIF{hWje43Z;H`u=hqp=N<1t2EETqJCiLDgR5)rE_bBL zd1EW#98F_pN{DnqO3*Bt6IS9Y4vCa_qDhC$EGR*Tq{L_0RXH>!mMrH}B}__kR(N@K z(jklH*^j!h<9mMGM%o5m4&y)WO7@rZLbyV9B zMG@TBH6A|JaHmt827P#*2ivw$+uy}-XwdB%wA%*NszKQ?AbpD<2(VZzkYyRtG{tN- egE6Lv(P*?eP_NhFI8OYl4)mbW_=Z}^NB#kWc5Qk9 diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox b/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox index 03a98d9725a968c8461459e618ef9f38dd2689dd..7620a8fc53572e939c28ed19cd8388f7c782959a 100644 GIT binary patch delta 384 zcmW-a!Ak;B5XNWT+toa+65Tz>g47{3DTS5oV6=w}k&P{{dI-Wxur5J~c#w{=(Lsvs z?k&7`>gNAYhyIVRSqFae&3x}0-bd~?SGc+iimya;aq4wMXtOBnPD~kggy8zddrMs@ zJ8i5+%-N6(x@9s#R-#HgEvk7$q9n>`F3l+Mw#ZI8B&El!<&I?*SP7I7-was`oW7Zr zF{g$yBqS(9cKK9g#1kkDi?SSUF~h~nw|cPRK0juI6AOObihsB}*#iL^!57FtsZ_$> z9gycG=xK)5@)-4U8LgxJE%W&t?(-V=?`yczDLRb?+SMw8W)qHWqu-AZ`E9ta3&(NL x>-Eq+EMjnWfNs;qYPCX=B=CJ7Q55Ad91h`m9%{83&Ifko7rhfuXZ(RTY delta 335 zcmW-cO-lk{5XWbpXCu5RL2L`X9PA(-q6`8NT{{$eC^1;EtZuTn*DlYcL=2W74=UTi zi0vA7OZoaFVSY33nOv*U-gzOSv$}UKfu6^?wZ0|EiqO8i@~%@= zY&~_#iirhHJ(iqF3s%UYG3%HV^+<8Zq+*sCl0Gqq#7fX1E76%_Rw=TB)0%o0r^j_l zkBa?l()jON-PqGtzF$RB10D~i+p5`jT^GLZ13m#{A)n8qS*ak)Gtk2j)!7j~B0}}B zxFm`qxK9h*y)EDl1~>^?@H`K;ZKJrmg-*wy(J-jh3!0S#$?g$c9#oEr4k&+nL_RBcDekur$6P3f3v)6@Bjb+ diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_fr.vox b/assets/voxygen/voxel/npc/holladon/male/foot_fr.vox index eb73f553ec6dafc247a1c9cf8fcf24b229a5ae50..ae43f8ed1e078a5365fd6acb8854b1f21a99da1c 100644 GIT binary patch delta 384 zcmW-ZKTpC?6vgj-Z9%3&j5`BqLUa(2C?q9yz}P_yAvIN27)T6@X=zN95C`H&Y8;5B z?retL$&K%zgWuzL%S(RmoO|w{kKAvraCPYyUy11A)a{7SW>MIk8e(fVg|{E+oeOn7xO{^9O)4+Lxk zPaqwoQVD;zK%SSN$0xLw$EcUfXdUfuna}5Np4Yg0U&EQr&}lT#u2$hUo3Jel{eFbV zYr}CI*tU&cuZQ+w5reY>bek4ds}+(Yf#-RMq9~8ya0u6RQLEK(KCt31Rr%Bsj!iAk F^bZJ*Z%P0F delta 335 zcmW-aPfG$}5XNWTcO$$hL2L{CIoLrwL>UAkx^^h`P-3uRS>0rDuU+0ti5M(F9#po2 z5!*HFmh=t!9zh@EY1V-s^UO2DGryVlOs>^v@4OJvS=~FAM$hBiTHg|}BD62ByzA7J zS{GPZF|(klN1}?AR?Ac2E0~WHikpJL#zPmWR=bZO>pXdB|pKN%ranr?fgPkvk=*)@USse85`KB$+ zIykKj7BBU_NSh{l4@=Ay6K7>ANWDg8lt{8BE7Ua;d`p~@bQ(#(nmuz^;?78uRN_*R z0&i5XNlxb3z@^EvD`zsxB-~^%-A4?dTh@*jNkD2=X-b85I)x+|8jL}dMC(MYc&8yv zBev8Kc`brF#A#Bf)vSn7usV;3xzsjRs|l8XH)y))GpB~LgIGZzZKtfYgVgbWkz;@i zr?&zSO_FMo&WKQiI2G0sfZ|+$krYe}6;0`$W zhP8OB37tk!6=URL24RDkf!s=Qj18l6tVTe@g0ZVsNj0mq`}UDdL?GZG6Db|tse9=J zaWtU#AC?>|bWBjQIk>njSip@pB#Wh?5_hje&^ZcWjMm{ZOU1}5K95c?hS)%YlNBEf zAIQ9NlPb0Ur;`d+E)%B0YI$WO$9Bac#aGgZ^9vC~vGvL@#(&`cj#z#harof7m0xmZ z$9QRb#4U<=eKQ7oDe8J#+&I5E9^ai>Ii+{j$KT5_I5HLeLsKi?G&hHK?~daK_e^X& z9!K}lr?~y*Q*`g&kF!UQ#{7W;F_@i=x#{UxS{lZ%KOfz0H|FN%Vqsw+=J)T6t0(uy zh1uy?TU(3O)z#?t`!O62V|jTwdc9uE%*@2;tJ865=2|>lx)-mmKaCG}-o?+CKR$l8 G@BAM}P1Q^Q delta 807 zcmW-fOKVe66ovQeoCxKfODz}D2qK6=u_J>ZA&`hz%%H|1snOzNVCbMD2g2>7nG_T> zl;(mXA!EtVAJE_8zi_r)r-P4k_j#`yik7Dz1JiYUii1we1USOg6a&v3m!p99T zee-toT=F*2B@mHhKv)xLD2RZCQk0VcwUBTrMQIgclGyAbfXJvxlEzp{h`2{M$D0gl z5lxX=NmX&i^CYI<3<3f{1B`J(d*h)lN zMu`=hUJxQ=EqJ<*Jq#ZlAoPz`^n3j{{3CMxzf{($z-|jlA7%`-6M8{phIn@woQEp!S`e+P6EklfL)k53hW=T>5&w_SI_T Zi^an0y7t*@cKyEF?Ruxv`Exh?<^RPkW=;SA diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-0.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-0.vox new file mode 100644 index 0000000000000000000000000000000000000000..603824cd308323eb879728653d088a9dbed516c5 GIT binary patch literal 2168 zcmbtVZ)lZO7=O;c_rCXDi(1@ZHA?-In!#UOQ$ZI^L^hrO(c{YLzEFi$53=B zsaVt2G|0?EMwzCzM$rcwGDHxQB@u)SiSW~fK1B5G*YC^(2`Qo%ew^n#&pFSZ-}9V% zq;pG(3w5GYP(o*0zMu{lnVyjIoDVJDdBk{7< zv9Uoc*2Oxjn~ZUZgf6nwD;q>gOwL*tnUsx{=$sat6GJ(rnlx=HtC|#bD#N|fIYU{C z%c+p}Q$(O+aW0a;B_?eXld+5^P0B;5oC!>#sMB7ie-+YBzgkI7rEH?IyhEGTk~7+$ z_it|a!nJg!+20O zUhjQ5FY}Hwu?cy{^ONGrnvA7?rxRs$tZCOynlx)NmiK7Wma(mhb!Z|@?zE4ch#GnWjJ zWnLM^Ptyl^(9SZxj${DU+Prp`2hS1b&!_}xr2QJc< zKFGWB{mgK$S)O*uobZlMoJkr(nQo}UcoCE&`ug>{JK8TLk58!7T&107k; zq~&bdG-dj?^l$0krU?4C?31N`o8?OXmi}$Xm3-O^xg32Tit$vejOUBJBqx?Jts~fX z>*s|$SoYsK6n&>vcgh_uFGZ_eSd51&hiB>#GIriv`E1Z>TInOKmAS8p_bSX%0?rtHWpQD=@Gt z!N|}Tm^rlo3+7D0@)ydmDV~egWrD6(1t;DRTzW@PRa}I+ifLF^H4ANv=OL~rKuhH$ z99l9R{p+7Z^D7Indd*sF-QI}v23gryR8lW@F_`^U(d~WSsk`6hB_Az^&^u@d0DDY!F=gM)33Zf{vCl9P4@-LuVJ^ z*Pj~Eb}$czKFP<08-=)qDgU|t&S)-rH!s5ATM6!*Zu#H!-}$s3BfY2a-QL5Pzkd%3 zy9#mTW5La}f-_}hC@(L^=Be#ivGgLOs{`ZP#$({<-5%~N;_MU`W7qT^JU{;kHXhuE ziR&le`sdRz&|HWki)YR1Awg3_m_#I|gF!J@?{6;um|7Pc3_~<+HtDn1jd*4?-gZ{gxd(iqI-Tim& JmmhFe{seKsl7#>O literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-1.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-1.vox new file mode 100644 index 0000000000000000000000000000000000000000..ac7b26525a802e5494b85aa8f1c44e1be7add1e7 GIT binary patch literal 1932 zcmbtTZ)nw37=F*+d*^1%oYPI4YijP!ur!-9&9-#u)XnC+_qSb5B$V8}6Xga6%~C_cb(65lrj+w7n$l4^XVWT#x8yFZ zz1&yY#T|8{rBTu5BCbUdmV1upthRAQX(%;ewTT--6IN?-O|Homxgu9_u{kYba#|ey zMdzfI%1#U6#HW!1R$B3#3(qjNXB^LXp1z(rjZt;R+PG&u#z>>F>aH<1Zj7n(tj$vQtk<(1 z7uIMbu=I0AQK~viKgS%_=sFkrSkjOA<% zr4#OPHk!JouBa<3feYc)eHFs#jN%-Pmz$2WScCd$5i+?i;?8lUjS5fSeBgqTPm>{pDZbo7gGzLA8nIxyBG zETs))I1_6V&S=IlfilcTuC3urnV&heQVFfYdvbBBRA3a}9dlVNaiuw1uLI}U3t>V@ zT~jJ&62`L^=22lh$Nn7iy0AY-uy)OQ*}GEAPpn$iK5`b854(Y;!J>JI7*Q|5I4pA*k;bym?Nr?FP@*7ow=S1XDZ8P~KOG ziJ3f<94JKD$;p^?Wje;M6-?d9*gb*;mjtq!`P-wA?k6A@^RRdN81z0r4!2&O2rPRV z-6H5Gek6V+y4wWjJ`fD_3a(zDUMVtewX z+Uw^OqPe;R?e(ST**F^~x7OhE))naA5ny=mOU#&(j|HyQ$4SnmLL-O@1tZrI^Eo~jxckn~BZ%LwS zcN%@YdoXnQD6+G&F=6Z&6c-m`R;&c&GoQgrvty`UFbgYRn}@DG;)IF*MBHwthYlmB!79r3y7*|Z1) z?*_PcviX1afA4f3hI>xn``rgIfA207bQa*sXM$U61ZPT15sSsJX-X?rEWHTnY{$6F zIP@QWaEIFq`F4tmuwz;`7S2C}4g2?C!n*Oe{>3!(Ckt?hGyD7eL%%RqQ^Pf6HUZlX z_oDMeAKtro86SN&gcrB&#ll_3u>6xtXgEKF%F0UI5kR5@{(u=041e>WzG1$vf7|CT h9QkLV4By>DJ-pZO4TkHX?Q!yPwnxuA${*t^e*r>fep&zk literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-2.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-2.vox new file mode 100644 index 0000000000000000000000000000000000000000..c413d4bccffd2e1ee18e61273d62ac65b2a53338 GIT binary patch literal 1272 zcmbu8e`wTo7{{OQ=X+lO++v7*gS1L4QQ_->c`V2oj@+9(eP9p6B!Y z`22W2u`SyJqaxB$AALzles+npMH5XAIfja@a4Q~AZ0|@!Gs=#vRv5D^W^9GEEN;Xd zH!gR~xa^n_J7(D~Wmn8HuDCI-c4N!0#@NbsyQR8iso$mSz}9%9Y%E>3w5B^|Sw{1$ zxMfVcWmy{U#Av>8D@?nwRJWYETE|k`HrmrtUH752jOG}Z)88GpY=!!_Zg`!|ZI!9sh;s7yJ`)B3^vE0t6106B?^Un%qeDgUH!OkvT6p zEkgcYVdb!}`l684Ej*kOa@F>p7phvaY2KSd;&3jMOUYw2zlQm+VOuM0D8 z3)O{wqTv#DRJILapfc7<__U}Ss9^Fh_2#ZHgB9lQvKxh+BR3a;P-T z`gJ4hK5>i{o%vkRg7mrY`f|H}gERe~|S@ z#@O`13~d+Zi9{mY5|Atfe_+oGi(lQ{-=fafzpd*Ryz|c-cINJ$?YyfqgO1$uEyYXu M?$5bjUm{li0?)2CLI3~& literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-3.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-3.vox new file mode 100644 index 0000000000000000000000000000000000000000..5690feb0eee4752833d34472bd2d404d1b3392ae GIT binary patch literal 1192 zcmbu8acI%&On1BOZnj;wE$?n&ZLPWGvRm7!H(fgC-P~zIV$zNw$`NB8 zL(xlV%4*K*G*Fkx7-cS<*HQGx8Ztx>lO++v7!u)MgZ_xrPinMB1B!Zz@SLN2D_t2|Q&A4U0l8c|x(XI}+?wHlsvgSY$~oMp&$} zWEjSh8eyHFZ0#~EIUz%R$@)1VvE+meL!tSGB{yUkR)r;Gh_Yy|k*hhXv#{#e8rr_` zjpl4|t<})bfEoA4giYt?sIdLX?=~B=v+Y^`O7JWG2?c&Tjy*11hpO?8HzI*tr2k3e z;!0%BPC>g+yiZs)D!g!2$mZWqYM}68)Y0QRu#EEaBoSK`fDc&tq9?`W^Leq>OJG6d04@o|QOxqYe?+6jqgJEH`SN#E@#VhnQ z2m`IcS@k>WoJ0d|;vF7Rduy3E5af%2Eo2UNu{d{~>IyqewdHJn-NWASTKe0B#9PAn zyTZ(eLVcN&ps$kM^=pW=HWK#PiPn`evayPE&x=I1HM6687yAc?IC1JD;`<|v9_uGP zd7Swh=gH5{r=)NNE|-fMubcWc&+}@nmq1euTQ@W^`raz0K5_HYEguVasyU}MqkDwg z-wMC{AjG2{&L&=F?n(>4{oG0HWC0_e*|>Js!2;#~dH+M9wWRu5n0>#C2NTi%z5fTF zr&&y0;`?K#ST}qWN5a9)PlbECgv%ZeUayzFiUGE4nnn_Fieg1%&OE%sLr(3TvN8@= zC0W02jNX&SDd{QZ&X-kWA`Zs%%>I7Z8Pn;d z3mt`YowlW9j0-71Am*5JbLPmkw#JyN=3j07(OUm~dVV-J*I2FfY~OvK=Xsy! z`~Ked_q@@qJA5e-X{isttRz3XMB2i!rbnDW%~rS-4=HwZ#KLK1$5tzhwXEH^+)-ne zMUA-BcSVh@zRT9wfxF$ZT~W*EnsG&pEx#ILE87uEeamuslpWZ%)+rlH*Dcj?M=i@} zpVe*|6R|8y>zx|yH*STA7)yQ2(N!HwW7|Y6+fv`HeY)3TkLnnO>TTQjQoZQ;9IL6R z!Ld6d!ltvc6np;UcaMjenU=-;rSKR06S6{H@^<_19V#a{T8lKfk?x0)^N%C5Ub0$* z+@GT(z9>XL7jxLIE^C zNm7I<#rKL|6v;ke;$2~8T)2KkTo*?v!7F5?4_=H38HS{#r5-sx*uPR_@V=3v*r-{8%&-RX;?C%@k#Hsh_-ydW6SU2hM zOJ-&!E3%j4^ZBR<`l(*?6wg-%X{xJW>xNo}-(1PWhkkyzUdH^*az4;K~CllUWRX?BU9-Jmx9-&*vYAtR>aez|33i+#QSm@AKdNB+WwV z0^c4x#k#?xQ7eA|w?H;P literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/hyena/male/chest.vox b/assets/voxygen/voxel/npc/hyena/male/chest.vox index 9c061b66cbab067331fae16e1af2e045f48e16f5..4f23ed5b8051dded39e3fd7d64241bd145264898 100644 GIT binary patch delta 491 zcmXBRy-LJD6o%oMGjk@J&7aL$imkO4YpEczg$jzY?%IS{TcupE5?eK3A+qB=>}_}x zf_GqJA?O<%c=*0^2qZ%uM&IkZ7bnxrXJgFK-sG4t*O@VAli5Mu51fECq?lgLCOZj* z^ZvNIp{)#)_VMa#6lIV^$)s@*%Xlo%FqJspj9lT=?@$Auk>f5ah2hl+?5|WdUf`pVLq#|Jp zSKHFnhV;-rnYHljQ2JUSh13onw(q6X(#tHjw~gdvZf_eIn#RFa$Yf;!mr0b(9duULf{}A0LdYcbenvcPMgep zx?k7tHiyX#z-qBvo8UY2j@d+znZKOpWL Ax&QzG delta 169 zcmWm6p$!625CqVf*?(M4UIl=l5F`R{1pD(9n(r}Cz!`$01VU(nA}E0Zkj!oJGPBua zf8D3+cia8!3ShllZ5((H{q%Gjn`dDR93&%)D2pPcESj1sHkr{B#>CnxOtR2sB2~gS j??hYS9~26R!jb44$vvD=spL$NM*yN6=^Z2jK%e2!TY>Ws**(Gt+*n zZd4!lr}-VgcD31w@agN>J-r09M!1m!f7N>iFB^{1WD`OnI1$~18h>zDEhWRXB+u=Fw2AP_P@1_eLforT+B@jQns Ef1J`C`v3p{ delta 202 zcmW-ZAritc6hwD_NZR14aKHh$1d2fbjzKr7KE9?sKn<2NFmNOeQOTy6dD-{>PBN_L z*xYZA{S(0Dc)lv|o0{F`TTJIrE<c$*EkRW@=`FRV^q`Wmqj2C>hj6Wz0ZqYak>#bnkgE_saP6ZsZ?WP8`wz diff --git a/assets/voxygen/voxel/npc/hyena/male/foot_fr.vox b/assets/voxygen/voxel/npc/hyena/male/foot_fr.vox index 6654181cf4b8608dca06426386b50d459c037d9d..464a7f124a3a1d815c6ec0d6792d90fa6f6aa0ad 100644 GIT binary patch delta 195 zcmW-ZAr8Vo6hvocp{2O0DgqJ|XFw4Ipi0nPg{BuEDM8n855fgF5CVy0mQ7w}_U-=v zExK`e*dJ$i0Nd4O=fI~gr`0PppQVv-Vlc}3^`sVymQWN%jc8<$w_@&|HzXnq<@Bg9 w@ZVu1hb^W=Rjz5A>oe!Vby7PDS&0cM7+9@jQnsf5+z>g#Z8m delta 203 zcmW-ZF%H5o5CnJ6#KCl_s1Q7WPf#HWphMJLmEL`t{tc@rabHV`;Q=w>tN$ zDK)q2efI=#KAbKJ{KjUx{ua~Q3p2F9!hvc$ZaT8cWN=cenMxkzg`m!yQ0jzGhnS%q u^bHM8lT$fE&D2acs~<*zI-4!!0wtrmq)ge6B#6#{_C56$UKyV*4EzIK9vs&I diff --git a/assets/voxygen/voxel/npc/hyena/male/head.vox b/assets/voxygen/voxel/npc/hyena/male/head.vox index 9f22a35ed39327c33d069ddbfec4d1193230dfe1..d7abaeb79b7f95a74c8524a42964cf5e9a921e7d 100644 GIT binary patch delta 627 zcmXYuF;W~s3`HeRCGG z{0F<|F=t&qf&&F7hXmp&tpcfB6)+G66U4^eC2|m$c0bh+&EXBlZKP>v3OPJu)j5qk zF~JQ47iJqKv>A715lniS$?eAE++GuN7QKd6deSpZ);ZXMn5mQbnr6LNQ5m-(kFCb) z442f|_&%wLzVNwbbved>0tTVEb~Ipz8_&@qsHr>bb$qj&DHt!-G7Ik@2+2;@{fN2&-wUxx4n3ah@181)*-%1#KUHHwQLuEojLnw`?TA9WK$y!Mu}czFR^E4 z6>^YDEk^Jg*aOy!o>8o^Op;!doJ0(w#;VLAU4RaIEV$>QMeIYJHQ%kXQ>EYF7|x}2 zxOuu^Ix^kJQ0if*(u0l$9*`#Ih>A9>$(hkjoSa%z8K$Q6bc80%=Ny=2V(}1e1V?$W z(uOOn=`GV+vZ%r}oHzE}IvTCkTc;f$$^=7oQ`!Z%hNEqP1+*kX+XbQ0z?QN#u~kVo zAgaQ)hV6?S5K(DzK4;I!KK%|ulg@+T96elUy1%|$hvq*RtJUiFbifgOKgQ`(ulWZQ Cw?%CL diff --git a/assets/voxygen/voxel/npc/hyena/male/tail.vox b/assets/voxygen/voxel/npc/hyena/male/tail.vox index db934266b5f96f855cb8cfe2b15f934b05eb0432..6c2ae0a50cb1c3d8e29845d2c4f584d9668b786a 100644 GIT binary patch delta 123 zcmW-ZF%E!02n1O;O|I4_*!UECP1Ksims~7tEbkk}54uP)uvr#ruK6C0BqA+Yw|$y9 tqxxvpI099dpG0lc<`8iK9N>-s^a<$k(#4n!G%+7Pn&&EN=Q6&X6?~X75D)+W delta 123 zcmW-Yu?>JQ3SM}ppL`>tdNR^l8zY=3-ZR&`7HZ=v==anCoPY??L diff --git a/assets/voxygen/voxel/npc/jackalope/male/chest.vox b/assets/voxygen/voxel/npc/jackalope/male/chest.vox index 457c92394b984675f1d4b54a0c371559e5690349..f89cf3e2668fffaa5223d322b442a07329f74e7e 100644 GIT binary patch delta 1095 zcmXAoJ#JM&42A7u&)oY6NGyRpumXw{DS!fI<|VZBv=m6UKs0nwARC~g4PpmKbWqTz zq)LHUz~h@x9C?21WBZKf*S!z-xBhhh;L^+>aRx{ps1s z&-j1w7vo-fT68OAq-V3aHuX^LrqZ?3KD-R8r6uRC+H&=tDlJNOTYc-vrFnKQzE6mJ zht1M`#RkN}5qO25fK<02Cd-H=N32Og+dBx7M#gZ?#M&n+_q8_FN_@f(Sj+4tZ1bB) z-$$v#9dgr9sm-a}&2QX&_!1-q1yso0Zsa7KaZ8L~AFdHJAc~HPT>y>51nZdRlPl($ zmf4v?IYf9Vli6I|^GVV1WcB6iER>Qeu)P;6CsR z{583z67m*w>k-&_4zJV#h;upCeQV0nBuJ3n=bNtVjV?{hg%3koIZ2J~3U_lxDoKDZ z?3Xz!3>$GViW(9O^kXT`wk<^gLRt6@q zRBm))!iVQ^Wpk9sR7(ak8PHrhYN!J9?hN}uFmG|z!Sh7Fo4Tv zSBH-x;rR~Syh+~8y>V(XbqTo0H(uSO)r>RmIQK3!-*Vn@`LU@4F0EPi)e1rju@Ywl zCaun$a%ff%${@i7ieu;&v`V&G466;H`4Cnm_&KgVsacKG#npDy?a;`v+X8&6fg6rY z7-%?hIZ;?Cn!y6Uz|Ei{oRdkip2mQmtFI?i2Tg zSm2Yj+Z12;^z(f?{kXn=^JX}!udXjnZ(lz@eR%is=Fjl2?)UrCr$=8;4<3HI{WUiK E4_`W7AOHXW diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox index c6ed33b70fc87fa2f344aca80a8218f8d53e0599..0c0fc3be0447e8503b6192f46bb256fcff30b1bb 100644 GIT binary patch delta 308 zcmWlTtxiKh5QXQ=%=QK@4uRzXcnL(s6+rm8yKPZeOl?JzDh!I|hQ0s}gJ?rY5GXW{ zP(y;c0*719PV(i8z5n@rysUAf=LA`}Z4>hW_!d}34m)l;PgVCT=1sA~35SdORlBl)< z&`@?5pn+%$uty1I5ICFiQ?TbD%mO{|azIF8qyzRX=e$0^IjYx1%G=L%H`QT%HNMW% k**xDbAG;6zt$&_3dAoYbUw6yy-TJDo>-=^h-HYG+18i_VtpET3 delta 342 zcmW+wF-inM5UlQ=*+b6{n3)-hZs4XXEV6+oDm!y`CT1cgaL)Fp@%WIqoOjbh3Gp{N~1ILpfnQcq~7 z8Jvk2dy6VOMyR@=;1Q73Gbi^-oq0kJ=m9;(T~LQ-pZz|-c*|BLiuicAyHoR*|5a60 zS~Pe`2QqlO?$YPeSs%3-o}Y};<;8KjxjOBi^?O*BWxCsbNE@4r{?Wer54YaGy7~{> C*g72m diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_br.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_br.vox index d4cb724b7a91f0406066c10e55f9c666589e01cf..7fb0580ea3f8640ebb9e4c6c7a3714b040d04cd4 100644 GIT binary patch delta 305 zcmWkot4;(#5bWyixeY9qVEF)k0&!vm5FR^ocPJe0EP~_|2E}H>{QwSwxC*(21GsJCJ=h#J{ium||>ay`H~7!68RPymL82q=w6P;CLw zP&5qCKxivqj}puva5m*qu;(Gn5_-hT0U^Ocmv=4ayxPMls@Fxzo6l80*KvI@z0C8Q j+kD?W_85bUm=*+b7CFf%h0Zv!`7VUZ0yQQ4V$BxWKeVk}-@Xre5b${}KGWaJ+h z_!mY7W(LAo(@;}2RZaKI@5tXaz!mJyy95R>Vw{UGNW zZl#H3nJ7)hUXkEl-vt005c0J?5EFfF!NE&n0r1D#JX~jk4JmEweaV;s;WxM zMqbmQ4&HCN^!0q!M>NCplX1Gbn5Wz8)BXiN!?G;X{mx_B+Ftfg_T7KF&Hl~R|KeLZ A9smFU diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox index c1209ceb395077f3825bbd1450083641138079f1..5690feb0eee4752833d34472bd2d404d1b3392ae 100644 GIT binary patch delta 232 zcmeC-T)`fc7K=q7Ftf7pI%s|W(%E$nu z8GvdTS%GSRd@yDPvYA7J+?^a5SQs|8$1<{Ss}KKw|LEq)uNhsrLn5R9=U3GH@0vJu zvNh93?&qtv{J%eK@&EI!6DON9KNMQ%%J3iPy#FA;&CUIPN6=(H7P-j|EG(0KSR4TA CFgq&% delta 181 zcmZ3%*~2Lq<{zOjje&u|*U{4tNHJ7Q6cmnO1~OQII3hC2(*q<51cE@!$jDFxB*GY& z7$O-MnL-&Dn8Fx9VhqgTjEpRyj9_u*a0UjJPzFYpFh&L-2C8QSs%2zg4rOFy4%;{< zg^_)4bLju)OEV|4Gr4kSC;0uZDTw~xU6(#NoarOCv9a<0iRSbF>l-ed9L)TX?b4-7 Q{};MWu42)hoX+A10Iw!{iB;Fzh-ph4vCEZpI=e)ziZ;u z$<|CCxu37v^8fy{#sAN@PMmDc{7`72E5m=F>;8iPH#hhH9YK@*SmY)Mk=CF-( zQW)9yHi!OyzBF?(JCiGSc7osknu6&6-F4}c!}VP0J7IAC;$Ke diff --git a/assets/voxygen/voxel/npc/jackalope/male/head.vox b/assets/voxygen/voxel/npc/jackalope/male/head.vox index d37dabe9a27c8a1466c7f50035a14b4e1b896c08..ac7b26525a802e5494b85aa8f1c44e1be7add1e7 100644 GIT binary patch delta 1007 zcmW-gJ&P1U5QgisXU|Z-Ti?)klVeQDF(U)^{oBKL0XFEMh|h&i!atmzSv?^osR-i%AgU0$c0hQQSf(0Mj+l9)0>Zs1Zi2N z=Ag2f4eI5Su^1pLQcsh$;uqG%cGg9AM&)4ELliF*Dikc_7Mi;2(j(deA$M7M=&5_O z?!GLL3*rLd0->xVUHTv|UHjN@I7m#IgxfM}Qs~OgeH!DZ%myP*>wysVkdh)6(Wgfr zS_Z42Q7~0NG*Ww`u0bR$2V>1rQ5v5bUXgmRaW=d*^Zcy9sw|K(4hhpMQ%WUQ^e~Xu zu_^4Kju9KN5^G4G6-CdqBJEI7(u@2`{0uu&km?ZTih-$b2)JXl-qgC}&eN<@b6`kX zK=f)&pQfzwR(!@}rA?o8;iW5{pkc3c;!Q71EMBllUW3$4=V85vcY%#+t11y)`o<{a zy*dq@hZc^k5TL24c4qaivJKVVmB&Z3Flp70w^*OaG{CDRHms(1UKoZ(TI(ePCXKTW zm;mwyVU*CTOrPN4o!hr0&i^dg-QAt|j-S~BZN6^$>Ey@p_Pg)RA0IrOo*%uKUcGs{ woyWiV-%nqrlXoAcpD*8RoBVU-{hmyesE4Qdd_H}9xV>JkZ!eeFUMn~M1B6kN;s5{u delta 708 zcmXX^J!_Of5T4JSl>}^3SPIr6k|GhS2*HGq6C%5tL=ZcXyTTtJULjW6=z*OaDXc7Q zw6I9wzpzOY1uMbAZhbbmFgu^m%rpDGuP=XJo!5JZSKkrQ{?_gUigpsw{oUj3)#2a- zt!}Bn*wM35L0kTCD;CGO(~2 zHRjfM5Xp1G#f_b-V6cF>fwj1{6nQEjCL`z4#H~t(pSe)POfXo7WIobNO+ivoqZq2# zj$yk+aZk{xCQHpVHyO4D?5I8$T$+kYu1Ru9I*Psd0K4N=yz&tDVgRyvAx(`WHwK1* zW%OV)!}kDrFRZ!HMJ?(voGq{b@X4nZKC?(Ok2Lj&>D+Ug2@-;YAi?k%Nk%eZOTsHK zwsZ({F3!0*4IPC!8WTvEfq)k`E3RG-?%vrVyZB9Lb91vVm&<ky5hK&e9WJK(*gZ_x{pu}q=2}};vspv(6jrR> zFtcWk=V!$*lpD$|&8D$rO-mCCrsmDCVc5D&!|XAPyl%Ve`2KD(!#ryWP(Gd`C{d6#9yPLQ%khbB`PM;Tn9CO-L{w8F&~u|2VSX zpr}JA-7l;e6P~^-6buNDCWK<;j*CKlMcT%&LG87*lnhmtl9zqq^$fHNiPwe6w}iR( zgobh#A%7LS8`cqPYa;A-5Unp`bW=6yzGsNM*20e7T^tx1=H%)3i64kCc6@;J^a&QP zo};j^kk!SjaJ${q`aCqOdx{t8d<2_o+4f2kV{flv=3@^(UH7wevxX0K&FCKC#<#*R zKM3)tmx;u4EL>{kx1YO+ohoAVQ#)5~Ia#9OKc9cNdp)WCR_5R7;qFxQf1m&EXK9vG z7x@18X*P@;!nXFWFk(+_0Il&|5iV1uHLR2#QNdT*=Z6N(!4u+l@GpKy1Ymr5a5o06e#!u+oG`i&At6CYkmD&UcX@OpIP3jyZhXFSE~jsyRWU}SJECF K^I*I}U-=94)H5jn literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/pig/female/chest.vox b/assets/voxygen/voxel/npc/pig/female/chest.vox index ab2d98b4cad4ffe6e473103adf8646edf3682705..93ef19d5dfafe7b2822efd23ffe4e935e1bf612b 100644 GIT binary patch literal 3176 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 Dmr6wB diff --git a/assets/voxygen/voxel/npc/pig/female/foot_bl.vox b/assets/voxygen/voxel/npc/pig/female/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..1fd30d5dee8e756b9de32fc83245ec6f347bf8bf GIT binary patch literal 1240 zcmc(eZ%EvA9LGPu`(u(7Zl34vTzcJHyF159&-_!i&gpGCm)o3WdYV{lY{%gmM{FvG zur5bSY+{EqXt^~+y4!3!E-89ovSbX#7&amZ86%=cK@TE&_Ud!)Su~&ah4=5x=kxyj z`+fg(9_VsSiAY;hXupztZxQJTg@aGz3|%ILy5uoMS9ds+RL-r6+{chph9QH7NJg!U zVX~$Sv0O34oDzj$GN;94Ng0N+VM!Z?>ZTl9)Nj5b>NgCN#v55N6v~E}G(KmWw1z2d zm^I&Q)wn#(&C?vK=H~h+YcEk<%+{2c@=}NP>}pyYR)?vtuO}Xl^I%fgdtsR^w!it) zW@Blojoi8#`f6Pi2JATcUARUn@y;|LK`Rn{9J#a+S+-NyCX@^anP5kvb zrj9kU^uZhaHXEUGi=D>ma`wIA;Yep4(N-bxrZDrauy{_WEprm`RnS|zgIG%gojyB} zno`F1Y$eKheY3$Weyh2{SPoB|CS9l^Yi*C@5f4(FR;D7gb(2wL6~W z#cD6X#wrf%ZeZg5&CFkP^V2OKt9L5-RC{J;h1=f>zx*H!M?6d?{48H>=8vB{h>aC8 z{)LU}cO9%!{=fgf-|r{c9cH?xmy7*x;Yc{R`MGefM@V}-c)eZ*{JS|-*UGtrT@=TP zSvddj3`d-Lcgo5Ly0)|PrAZEtoncd733tBS%0k$|r0&_j_dgf+>fQ|99k+=cgQ4?t zBra$9D072PzFXmi6KC1^-VFObTcqRK3V}d?--kf*75s&HMY#XX!}%B;UDF@Pf9v;; ZA4i|y+B8IsbavTH*EcE9-JN5lXZ|Q#=k&In%WcjwJxwe&w&QS(BQ}*o zSeK(EHnGDQwA>1jJZGC+QuK$(k}()#*oa`r7$f>C=#Pm0d-Z(Xf3f-RKJe!G@&3G@ z=lOm<-%s2AcK5i5G}njssga+vL|Vg<&{Jlh%c9VfJfUdsh=fyW%~h%}3^^%=^r<^< zD8yo$(cKE`tRdF4SgdKoqOoC}F^sIV7|L6+W<`C&{%kwi!dTj@5+vmhAMw-8<{ohSh;;YHCO%65JaT_MBg4v;ANG zw%b`+YQ|ib!r!fnyr2VTj~n-38NSI{BxFNkPa+qeMV1}pH4BBk!lqGS+hrjqCOn-K z@-=p(h05k!ntJnyoXY2uh39BY2rVh$y*Z)(mTFsE6h}RjCj3-of)vH=ct%|Kr%EWl zww1yzq4bp29vA8s1$k5Z59A=JXOMY2XSQx&`lSMHzg7fI&!hLkg5p=j?}}8PF!!0T zG%Z}eqH$2T7!tleD6Ae4A{zI#38RNJe?n;R3EefqiAG^U^DUJwq9G3hEndbCSCDwC zn(?CzEPeboe@sOw+w7pOqJ+J#dpX=zO{_^sz9US2AS|90s)}8N{iSqOZ71GXOPk+8 zw6chi-CM|XzewajJ+YpBB#w77Ja~kG_alrB#mG#bX65R6a&vRpn7;wH+fBL8L)G>d zc%{NesIHv-yJ{KzXcKc6Jp6Xu&+5%GzR;eTDdEPC!u?-_fvA^>WPs&M4g7VdmH2QT zBj4D$a?8moC6E341AzdkjtCQ-U0mpS7iZGRwXcNRokH5{#pmL$(}Xr~}v zz{0r)cR1+Mf2X*Zkb4_DULE7m@M$)77jpC4Ei6QwjOm&E|NPB;Z|s?;qxA;yqtJhD zn&j6RKApeH=Rd9R^6@k5_;8ZFUoO&md4*sw$e;ZnIST&4x+2{D;lX?i4XyF_`Zxc1H-Wli!?oS9#bTPwW2Uj73;nmS|v literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/pig/female/foot_l.vox b/assets/voxygen/voxel/npc/pig/female/foot_fl.vox similarity index 64% rename from assets/voxygen/voxel/npc/pig/female/foot_l.vox rename to assets/voxygen/voxel/npc/pig/female/foot_fl.vox index b03920ef1ae917527c8436e67df0435b7af02bc7..d30124b8889b2e412c7d25341100bf5936345550 100644 GIT binary patch delta 226 zcmeytv4&GH%s)b58Uq7^ucN0QkYboIQBb&^8OUG*;)uv7&kT?#5J-XuMuts{Ak4&2 z!N9~&&d9{Hnvs!l3j-4n18GJ^ARokLVp_$(2*S*(8JL)XYFO4VGO++@R-hP=4HgIT znV45GFfgxSWB{sR0I6YJ73A);F@GbI{fy|C{|gcl|4TMY{y)Bm;s2FrhX1QIH2!O9 wYW~kPcKcs$?)ASvAmYDhk?8+z(;5CRbY=KoCnfb?PEPK>tAftvcxFjP0AtHLG5`Po delta 150 zcmZ3(`GZ3+%s)b58Uq7^ucN0QkYY%gC@AdC1Y|G+aYSU4rwK?D2zY>)k%3_oklF-f zR4_6!lru0gtpbX!Vq^qjAkDx4T@I2bbcX*6T^at@NlE>elau@Js-Uwuo>`I+0AjN{F8}}l delta 150 zcmZ3(`GZ3+%s)b58Uq7^ucN0QkYY%gC@AdC1Y|G+aYSU4rwK?D2zVgWCPoH^O^l2T z6%33F<&2C>s~8y=S1~XGF_30t0P;a>pg02q)5iH*nb`FW7yh^IY?>U+EGh5fvFSfU lbJc&*BGLcbrZfCs=*sZFPD<*(oSfYMCiOX+Co@Yj0swy*B;^1A diff --git a/assets/voxygen/voxel/npc/pig/female/head.vox b/assets/voxygen/voxel/npc/pig/female/head.vox index 0fe767799597d9c1477c0027f7651cec4e6e2e8b..c9b53e997aed0d7f480fb63446dbffdbbb7132b6 100644 GIT binary patch literal 2576 zcmc&!U5r&%6<&Mowf8=!sG%|pouR^XO6|H+L`tG(n{)oUfC*x=>dYs+Cd~f~$jfP2t1& zU`F1P_f=4>Q?UIZFrKHckLN?M+GRU$)YFbQLeScouY}~hZ=yQpa*d-rs?-JJ7r~lj zwqK*|PbB4cVN#{wiBGAgUywSQG?HTktDMs+dLgl_pl}4V8shdmlT2Z=y|d>{npCEH}mpjKLf+MAjM_%RV_r zw$o4tzG|U~#&2SZj1?_1M_?aAZOo;NVVTHBpJP)_+vGS;VO@@Oapp=&qP0@ysq@Y^ zp1t+r8*{EwzQLqc=NhGtI`&w!iCIor;+trnD0hK#rGIqPXFK`_;T}*HC^PZgySzWj zn9Rf6C3mId%u4oOIq#CQD~;q`<+)p)GY{Nb&)qWajpxjL)^Sfg{hTRv{N}tpcf)hm z-Yfg)X_HB-QnTFg)yC0JX|K%Zqg58UqkJPtqpwo*O%Yw~xRXU>pU6k%*T{R}omjq= z$h{+r^v@*WN+Ku^?yJ@@u&9QR-S-WwTCG9+4 zq`BL6b(*_j*2BEUxd`t<0`DVgBj$K_tbx6A?1y9Sf_IR(lLdR5=#z+5n5SSpiCBw# zKg3xON6K0`U}fxK@ei!Gx~O4=$cwM$Da<#(dKG}?%@ zybJA=TwCcM=@a=KqHBfd+c79#+DC0i%ETgH-?pUfz&Pe&D`b+;Hj*-T^05`g+R+92 zxpp*d3-f8l!Wb5P%QLPcR!2;M_Qv?$w58O0#`oEdc$9Ku93!s4Itq=FH^FbX;)nE0=I<*FW+1t}a}> zxCQz5#@Mf}OY=v%(X+P?eTSA~@YFiUXn;)K0D0}RkW1Z|zeTWUpWxukee*H?>;nAw+~=@qTCjCi@SU@Q1Mky!YcG~e^kdod5LS0auz0Eq z{YQH-bb2XPymLDi?G`M1ma$I=)?X0FH<_q}7GzZ@&>|zPJz{e04Ff`4-HI z;2h}>q>o9n&j`-`L~!wp;N7>#j|g5H75w^P!PUnFCjU~;oy z<`KcE?+GrvC|JFu7h^-quzU5LnA)@s+lRU_v1&1n-g6r|d%l42hc;kx?*o{AY8Q?i zdK?G8JC0+AC($|c9Im|m3g*q5hnp7Mh`zo)tQhRa>N`J=FRvWL==v3S@a}au_QRWT z_SJs;@!cU@eQ!B_%AB3kg3G@Z{Q38SgA)TdIWvq)Z*0Wh{s@&3{T^J! z(*Jw?!^6Xv-8qhvyLRK%z28R9Ob_1qx!{9cf_h*8gM)+EH+(m~zh*ODd}s$2PA$Z_ zm#)q5P%n39$r6nA-GRHlavYByc@8)2S%mj~c^l4+_ux2t_TT-_cK6@g!p?1%G4%v+ z;H5K|`9%jWwBE+czq^7jJ@q{9`oSsO_p=Mw_U09gjEvx~2LLHZ_y_zI!H2)Oh7X4i j&*?vs|E>S<$tS@poV&A6db9GAbXk5q-CW@7`^&!peZngP literal 2720 zcmc(gZ)l$76~^!9zMuQg^S;}tYnqzWwOOn-Nr&2|tL^Mux;AR+s;k|qja?B@G=w@E zhS(4aHmj`bx|J?O2fA8EDSO4L4_VppLoHH75RoclFp9_+eiHUUWZ$m+?x)|z?AHY@ z?my=~=UnGH=Xta1-Us^TjWOFdkKMy!e$_H&=h*n@SMq_sye3eA2X>E-?Fnr7n=iO8 zicZzQc9Jz62a>TJ2YgX>N^IW7j1GZCgE)9Ew-T1mJ0?2Q9V*~K`7Q`rl!#8wX zKI7|(y!QYb@m#j$_cql5_#)OJ!-U#{h<_wbBu^wy#4q9>@r(Ec;wJ2gcZv9k_z8RB zT_S$Py96rUCSbXX@Q=KW?0t^Y)R;Mw6W@Su;7!2h$s3wH0bbbhnS6nK0slZ8&)IYK zoJ|?)!l4H`##q!by4tZi55K%d%N|b6>XY;3{?eOHS(=UwXo#)!XcKH*dh`rMT?SX% zW^e1ry|+cDboe+{_Ab96z75n@(jTAg_&Va1d8Jn+dz;V1cf2XNv-zGpmNPud5_aRM0w`Uqor@huT<6g(-@(;`03vXK`al(mj)i|&M)nruyKILq@F0K)5_Jdi7NxH( zd@Xql+S$z21pZg>t{8 zk1nt9uBbnOiup+m=ndQwc`M>F)U3P#74;@i!8c`)vqIa11{Jj@G^nT}fr>g3aO8~C z)28+ozAbF6Y@>$>eG;=6sk4Q>qQ{XMTg*^I_sBd)I7NIS`6BsZ?iaZtu_C!6ydoSU zv10x%>9fr~=o9n&L!Mo@2Ka?MW8?|c z6yO@*9`ZMZ4uO~fPJy}ubp?1hY!$XD_Z3w6_bYSbu0Si>e7k(V=xOn>ys`W?T5KWD z3YrCa95R=z1w9G$DKslNGUw*4>D+hc_cxpJ%Kw=S8#ZWWW=5Z!FuLo-i@Lt+-}=0( zOBXI|SN?l->`zz4qLFU(Jk+PYgR3=oa-+Xk-=Yh@xL=>1p3v&+yR~WU3f=v^0X@3w zR!wd*n*E8<$)6dW|Bcc5<-HmkTB$wjZ_?D(joLNTt%-HZbnMO>w6OPPjsI}7CLg*- zGfzIKqX!?;^iRii{P3g}&OED2Z@;K^yRB;%U!%UhKCKz-*ZP}o)OXenYIM^Y-FwGI z9sl`tI{Q+;{`T&WF2BE8FOYNLw9$KS8vWx#qv?qOJwH3Fi?43czy7{cQ%4u+*dM#} z#s@vRtQG(F`iF;yHMe_QH?KLR+m0Mk&uow0dD-Zr2aR4C7|`J0p!N;lp%gjz| z$@z3;K2awtn~4C4KwJBf9<2N!|VX^V<3PC5?=X=(7WoNkCu7T{8OkFIV{K k@ZrY(iTU65kDqu#e1*+-_GN1}ewi)bU(MD8zPi8p53-m+VgLXD diff --git a/assets/voxygen/voxel/npc/pig/female/tail.vox b/assets/voxygen/voxel/npc/pig/female/tail.vox index 3d68754926a5ded7c2fc9d8b7d31a54a7fae36d3..f42417fa420a834ea536c74f5caef2cb67c6d1b5 100644 GIT binary patch delta 169 zcmaFB@r9#4%s)b58Uq7^ucN0QkYY$+VPFXMjB@1xae#moh=D?2IwCU4(*Pt01l&N( z!pyXZiJ4&&Gc)667G~znOiV1B7#W#2F@tHK93$gqW(KBB%s@KG-N_Mb5Ky0mg~k7x xnwtL)Coycyp3B5OBRb~)f`r7${LGT<<>p@h`vW2->obcoyDI2xc4wAk1OU8KBMSfk delta 162 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 DZpcK( diff --git a/assets/voxygen/voxel/npc/pig/male/foot_bl.vox b/assets/voxygen/voxel/npc/pig/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..1fd30d5dee8e756b9de32fc83245ec6f347bf8bf GIT binary patch literal 1240 zcmc(eZ%EvA9LGPu`(u(7Zl34vTzcJHyF159&-_!i&gpGCm)o3WdYV{lY{%gmM{FvG zur5bSY+{EqXt^~+y4!3!E-89ovSbX#7&amZ86%=cK@TE&_Ud!)Su~&ah4=5x=kxyj z`+fg(9_VsSiAY;hXupztZxQJTg@aGz3|%ILy5uoMS9ds+RL-r6+{chph9QH7NJg!U zVX~$Sv0O34oDzj$GN;94Ng0N+VM!Z?>ZTl9)Nj5b>NgCN#v55N6v~E}G(KmWw1z2d zm^I&Q)wn#(&C?vK=H~h+YcEk<%+{2c@=}NP>}pyYR)?vtuO}Xl^I%fgdtsR^w!it) zW@Blojoi8#`f6Pi2JATcUARUn@y;|LK`Rn{9J#a+S+-NyCX@^anP5kvb zrj9kU^uZhaHXEUGi=D>ma`wIA;Yep4(N-bxrZDrauy{_WEprm`RnS|zgIG%gojyB} zno`F1Y$eKheY3$Weyh2{SPoB|CS9l^Yi*C@5f4(FR;D7gb(2wL6~W z#cD6X#wrf%ZeZg5&CFkP^V2OKt9L5-RC{J;h1=f>zx*H!M?6d?{48H>=8vB{h>aC8 z{)LU}cO9%!{=fgf-|r{c9cH?xmy7*x;Yc{R`MGefM@V}-c)eZ*{JS|-*UGtrT@=TP zSvddj3`d-Lcgo5Ly0)|PrAZEtoncd733tBS%0k$|r0&_j_dgf+>fQ|99k+=cgQ4?t zBra$9D072PzFXmi6KC1^-VFObTcqRK3V}d?--kf*75s&HMY#XX!}%B;UDF@Pf9v;; ZA4i|y+B8IsbavTH*EcE9-JN5lXZ|Q#=k&In%WcjwJxwe&w&QS(BQ}*o zSeK(EHnGDQwA>1jJZGC+QuK$(k}()#*oa`r7$f>C=#Pm0d-Z(Xf3f-RKJe!G@&3G@ z=lOm<-%s2AcK5i5G}njssga+vL|Vg<&{Jlh%c9VfJfUdsh=fyW%~h%}3^^%=^r<^< zD8yo$(cKE`tRdF4SgdKoqOoC}F^sIV7|L6+W<`C&{%kwi!dTj@5+vmhAMw-8<{ohSh;;YHCO%65JaT_MBg4v;ANG zw%b`+YQ|ib!r!fnyr2VTj~n-38NSI{BxFNkPa+qeMV1}pH4BBk!lqGS+hrjqCOn-K z@-=p(h05k!ntJnyoXY2uh39BY2rVh$y*Z)(mTFsE6h}RjCj3-of)vH=ct%|Kr%EWl zww1yzq4bp29vA8s1$k5Z59A=JXOMY2XSQx&`lSMHzg7fI&!hLkg5p=j?}}8PF!!0T zG%Z}eqH$2T7!tleD6Ae4A{zI#38RNJe?n;R3EefqiAG^U^DUJwq9G3hEndbCSCDwC zn(?CzEPeboe@sOw+w7pOqJ+J#dpX=zO{_^sz9US2AS|90s)}8N{iSqOZ71GXOPk+8 zw6chi-CM|XzewajJ+YpBB#w77Ja~kG_alrB#mG#bX65R6a&vRpn7;wH+fBL8L)G>d zc%{NesIHv-yJ{KzXcKc6Jp6Xu&+5%GzR;eTDdEPC!u?-_fvA^>WPs&M4g7VdmH2QT zBj4D$a?8moC6E341AzdkjtCQ-U0mpS7iZGRwXcNRokH5{#pmL$(}Xr~}v zz{0r)cR1+Mf2X*Zkb4_DULE7m@M$)77jpC4Ei6QwjOm&E|NPB;Z|s?;qxA;yqtJhD zn&j6RKApeH=Rd9R^6@k5_;8ZFUoO&md4*sw$e;ZnIST&4x+2{D;lX?i4XyF_`Zxc1H-Wli!?oS9#bTPwW2Uj73;nmS|v literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/pig/male/foot_l.vox b/assets/voxygen/voxel/npc/pig/male/foot_fl.vox similarity index 64% rename from assets/voxygen/voxel/npc/pig/male/foot_l.vox rename to assets/voxygen/voxel/npc/pig/male/foot_fl.vox index 11848b935e25dced04b57f7151b05ead7397b291..d30124b8889b2e412c7d25341100bf5936345550 100644 GIT binary patch delta 230 zcmeytv4&GH%s)b58Uq7^ucN0QkYboIQBb&^8OUG*;)uv7&kT?#5J-XuMuts{Ak4&2 z!N9~&&d9{Hnvs!l3j-4n18GJ^ARokLVp_$(2*S*(8JL)XYFO4VGO++@R-hP=4HgIT znV45GFfgxSWB{sR0I6YJ73A);F@G(S^OVS_|1+Xv{x3*K{4d!o`TzJLhW}Th8UC-< z(D<*Zsrf(G*zJG0x!3>xfQbL1MWX+=O=tMO(3RnTos`snIXSuit_nJv)k%3_oklF-f zR4_6!lru0gtpbX!Vq^qjAkDx4Az&N9-IC%G*|r>EfW2|Z92pMg{}<$>!hUq%gM?8Z&IJL Jc`~ykBLF){GQR)- diff --git a/assets/voxygen/voxel/npc/pig/male/foot_r.vox b/assets/voxygen/voxel/npc/pig/male/foot_fr.vox similarity index 64% rename from assets/voxygen/voxel/npc/pig/male/foot_r.vox rename to assets/voxygen/voxel/npc/pig/male/foot_fr.vox index 1d8fe10e10fa2a9d5a474fce5b8e4eb46c37c498..479eff66452edc38ce71da184fa969e6558758b5 100644 GIT binary patch delta 230 zcmeytv4&GH%s)b58Uq7^ucN0QkYboIQBb&^8OUG*;)uv7&kT?#5J&tAftvcxFjP0CLPd AbpQYW delta 174 zcmZ3(`GZ3+%s)b58Uq7^ucN0QkYY%gC@AdC1Y|G+aYSU4rwK?D2zVgWCPoH^O^l2T z6%33F<&2C>s~8y=S1~XGF_30t0P;a>pg02q)5iH5nVhpdivH^xF8puZ+4NtsS@Qq! zMGXJ1L^J$ft)cN>Q&aPQoI>t@ACFD{8Jes9ix!Fg-!`4$|3X)W|8-JQ|K;T5{x_-5 K**uw9k`VwqXfnS5 diff --git a/assets/voxygen/voxel/npc/pig/male/head.vox b/assets/voxygen/voxel/npc/pig/male/head.vox index b54551b43fa849bede4a62bb4537c3414cc07935..c9b53e997aed0d7f480fb63446dbffdbbb7132b6 100644 GIT binary patch literal 2576 zcmc&!U5r&%6<&Mowf8=!sG%|pouR^XO6|H+L`tG(n{)oUfC*x=>dYs+Cd~f~$jfP2t1& zU`F1P_f=4>Q?UIZFrKHckLN?M+GRU$)YFbQLeScouY}~hZ=yQpa*d-rs?-JJ7r~lj zwqK*|PbB4cVN#{wiBGAgUywSQG?HTktDMs+dLgl_pl}4V8shdmlT2Z=y|d>{npCEH}mpjKLf+MAjM_%RV_r zw$o4tzG|U~#&2SZj1?_1M_?aAZOo;NVVTHBpJP)_+vGS;VO@@Oapp=&qP0@ysq@Y^ zp1t+r8*{EwzQLqc=NhGtI`&w!iCIor;+trnD0hK#rGIqPXFK`_;T}*HC^PZgySzWj zn9Rf6C3mId%u4oOIq#CQD~;q`<+)p)GY{Nb&)qWajpxjL)^Sfg{hTRv{N}tpcf)hm z-Yfg)X_HB-QnTFg)yC0JX|K%Zqg58UqkJPtqpwo*O%Yw~xRXU>pU6k%*T{R}omjq= z$h{+r^v@*WN+Ku^?yJ@@u&9QR-S-WwTCG9+4 zq`BL6b(*_j*2BEUxd`t<0`DVgBj$K_tbx6A?1y9Sf_IR(lLdR5=#z+5n5SSpiCBw# zKg3xON6K0`U}fxK@ei!Gx~O4=$cwM$Da<#(dKG}?%@ zybJA=TwCcM=@a=KqHBfd+c79#+DC0i%ETgH-?pUfz&Pe&D`b+;Hj*-T^05`g+R+92 zxpp*d3-f8l!Wb5P%QLPcR!2;M_Qv?$w58O0#`oEdc$9Ku93!s4Itq=FH^FbX;)nE0=I<*FW+1t}a}> zxCQz5#@Mf}OY=v%(X+P?eTSA~@YFiUXn;)K0D0}RkW1Z|zeTWUpWxukee*H?>;nAw+~=@qTCjCi@SU@Q1Mky!YcG~e^kdod5LS0auz0Eq z{YQH-bb2XPymLDi?G`M1ma$I=)?X0FH<_q}7GzZ@&>|zPJz{e04Ff`4-HI z;2h}>q>o9n&j`-`L~!wp;N7>#j|g5H75w^P!PUnFCjU~;oy z<`KcE?+GrvC|JFu7h^-quzU5LnA)@s+lRU_v1&1n-g6r|d%l42hc;kx?*o{AY8Q?i zdK?G8JC0+AC($|c9Im|m3g*q5hnp7Mh`zo)tQhRa>N`J=FRvWL==v3S@a}au_QRWT z_SJs;@!cU@eQ!B_%AB3kg3G@Z{Q38SgA)TdIWvq)Z*0Wh{s@&3{T^J! z(*Jw?!^6Xv-8qhvyLRK%z28R9Ob_1qx!{9cf_h*8gM)+EH+(m~zh*ODd}s$2PA$Z_ zm#)q5P%n39$r6nA-GRHlavYByc@8)2S%mj~c^l4+_ux2t_TT-_cK6@g!p?1%G4%v+ z;H5K|`9%jWwBE+czq^7jJ@q{9`oSsO_p=Mw_U09gjEvx~2LLHZ_y_zI!H2)Oh7X4i j&*?vs|E>S<$tS@poV&A6db9GAbXk5q-CW@7`^&!peZngP literal 2720 zcmc(gU5H-Q6^8fO`|O|deQin1Wa3P0G99CtnG|h)j7d%Hq{)~}G}@Rp)iDiH6di_G zGl-aB2$*T4X_^|+Fj`P!EFtt0qaMa!@gfEZB8W&TrBH&1NUsXLD5ZCApM7#Cn%fS% z?4PyQTJL(-I^XQN=f1vKW6buAqj$5I-?og|IXX7-jeOuQuL)G(zWc{UcLz57%@*7j zMWp8|3u2VO;Tt+G zpYe4?-g|(JcrM%Wdz=$v6R_Mx_($GG_CCjHYRsI;iEqF+@FrmM5tELd>!%1ywa!AeV__O$HKoXBYO+-UADs)co0AYiMj)Mi_+H? zzLq=&?QG`i0_T!g%p|-#I#*3zdJ+OLm>V>Uc|`};tZ0ZXmixrn(hJ|{h-UEiKGJV^ zqh)CJ^bBnam&hM#Q__EOdiZ-Z@aXEO!xJ;*HTMZWM~v94d47poCiH<9aU6Ac?i_JK zbI*)4_uQeqrx&jD$^=2)&OZBP zZL(j(FUOB{Y`8FE*eZ~+9>lLeqLvEy%o9F=etTxs(+8h>PtO9g>GOOtTPgUILb=b< zN0(Q4SJa^x0+~^oebb6^)zQ0_Hb{j2wn%J{O8_pYOx>l!%jfIN_ZI4tA1s!( zeMcvZ(K+x}@C7*Wl+oGW8(lbK^ue2)hmB5+7`=V3(d9>s#yCH<%jnoc+&^iwY0zlT zI-@5y8$Hkcjy1g+AL-ZBjseX+yh_tQy;ZZ1ZqkKc|4jclJ+2kkcWc9{rMmNn1A2JZ zt(w?oH1l(#lTR3(f7WR2l3tAtEz|C`H)(S7dhHtO*7%ymI=bZs&F#5aV?W-gi3ji2 z^y3fc$bm;R^~*6GJ2auWGtcPKdoQZpZtL0w^VQearJ{?)5jYhvr9ZeDpxw;evHo|zuK|BBHk4;Z~VFrdM~LG9_=tGl+=GBZgp1ab+1HH`7k|jF0`~}^9+i^W~(OyE`?CJ|U5<7C&JQ*D zsI>pNGn)D1oPJlor$4-VNw++HShpWMsXJdfubppP((v%G{<&W=3Ftp^myACB^A&zN kbf~d^X1?0~>0^(Hudw;fzHZINue0U*tJ#{sSNAvn1Bx<1MF0Q* diff --git a/assets/voxygen/voxel/npc/pig/male/tail.vox b/assets/voxygen/voxel/npc/pig/male/tail.vox index 83d14385fa6384f8e4252e9be47a7ee04649e007..f42417fa420a834ea536c74f5caef2cb67c6d1b5 100644 GIT binary patch delta 177 zcmaFB@r9#4%s)b58Uq7^ucN0QkYY$+VPFXMjB@1xae#moh=D?2IwCU4(*Pt01l&N( z!pyXZiJ4&&Gc)667G~znOiV1B7#W#2F@tHK93$gqW(KBB%s@KG-N_Mb5Ky0mg~k7x znwtL)Coycyp2@^LB{J&&jOdvE3lb71^D~Qb=Nh~HFE{u4-yaY$S)W;y*;PSjvpcgS FBLEfmCpG{8 delta 166 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 HB?sZZbqU0- diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox b/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox index 8c27bcf6932f3997194850f8e5c62c5b609758f2..3003b6bda13f49b6a15e2edb521b7bd40920fd16 100644 GIT binary patch delta 271 zcmW+wu}T9$6r6c)H%F=%1rgH3%Is|#LBYntDx`>kfN~0!7U?Z41UoA&!hv|bg}q_ zg-qjwW>dOAY4;Kq5)l(jT6c;`Ph`lTXUMOjDZ1=G#|)RBQ91b#PBR%5jF}!1T!Vr> zf{JA%dm1cwuVheI#YDFNCeRX_w`c!)I;s!2Up%b#+PlSWz2r+#oebKG<3aty!=l-0 S+WXt49$E5oy!|<|8~X#eC?n$l delta 209 zcmaFExr9?N%s)b58Uq7^ucN0QkYboHQBb&^8OUG-;)uv7&jcV10^&f-$jB1Q$i$Gz z$jBJW$jAg_GsQ77F#<7jECVA;90L;*kOs1unBy2hG$T+g1CY%ClmpTXKs^jhAiWHk zK*M4g8GvRmFvcaptpj-q?i}V&2f}NEX;Xu6J!rm|N zFYImohjT6qvopJI=DqjP|LYI07uEO;!2E1>A;QmkxbqYx3ZYuw%s#tcozz{16&x#e zY$3xqh1mgIptO5Q3$n&Ulhzwz&=VLk>6!AALYLie%yjt~m6H$QG=ovWnBgJOH7KYM z)L2Har@?~vN(6<~Set19OsOT-?=SxSd{j@kUp!up+WYx#z2Iw6oebKm<3at)!=l-0 S+K0QQ-m~Q8c>C+zZtWkjC?nPY delta 209 zcmWlSu?oUa3`KA9Dy35?4z3Da#7RYPle$O;6@*F^UJ;z?BKiX&xQdp7ItVWQfuE)S z@XQO`oC`^Ae%{*)=F_x(12B%_i2&Cks2-G%{Fp07&(YEh{baTCXv!a zPDac^@vJgflI%h}WF{oJA-1>3$!0(@K$?WJ(J+EzpP=|2)nn5wx72XW9>zR(<(kb#|XbLui!>gk)t&e1J}&lu)TCWD~W2;0M(F({rDj zoXq6ToqGviVR<>r<2!)KXgn3c<5sR7Ju!ihuh!$8+sZTr5?csVPQ8>+9l%e>k^xnR zU>o!eAQ^QEYVkTDd_yHT|L;kzyacXKwuzFVQ}=_uJJ#lQx_Iw%uZY+R4vU7}PwK^h d*B~E8HtR>lhx2O9!rHHp3D7o;E6=Xls2`RLBy<1( delta 178 zcmdnO*~2Lq<{zOjje&u|*U{4tNHJ7Q6cmnO0y0>EI3hC2(*q<51cG3aIgNpVDUE>< zgc(yA7#T7d7(g^L5VNE*0{M)LjA@LFOh7g>5VNE)G64AuKt2PI&%ls5aYYaFj4b2H z=8TH$|BD#@|DRJhIi9hX{r`OX|NmQzCVyrO6ppaq{~v0~|Nnm|P@aM1zlw^==5VH1 FCID`1C`14N diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_fr.vox b/assets/voxygen/voxel/npc/quokka/male/foot_fr.vox index 182c368bc0ee78b1cadbdbb0e6855415bf43e24e..d1afc05004294fe6521f721367c1da3d5ccdb942 100644 GIT binary patch delta 219 zcmW-Zu?_)I5Jm5O`_^Ww4MHTE)!BU#4WU&k5R#Q8@c}x8QbMJokWJM7fge!wPtQD) zoVhnMcjgkl!t!#K$9Dje(ReC?$E{pFdSU`0U#-VGHEI3hC2(*q<51cE@!$iSS&$iS4w z$OyuWsf>&anT!k|ni+^$Qh^FG85kMU7#Nv=Y-S*4NdxKvVj!OZ$Y)^4oVcQgc}AA; zWOGJE_Wwl;|NqY^oE*>C%l?19{r~?hMw34?1`0=5@c$1r<^TUb6e!QY@?S+oWpg-F GEE524EGR<& diff --git a/assets/voxygen/voxel/npc/quokka/male/head.vox b/assets/voxygen/voxel/npc/quokka/male/head.vox index c3e7fa5f692adf5d84eff4339de0a1d269ecd3d5..c177727a2c25f0cf0dde860566b3d8e7a5be1cd7 100644 GIT binary patch delta 823 zcmW-fv5FL75QMv{yZ`?{^f(0(LAZ(BnOQVZFg3j36aJG!y$Gz&H_UY`8bGB*1O zdTQwDgVKg58?t=e=!?EGzB}(6PAd(%gws1bt*ZGDAmMhkRadQ>+S*hrQ?8wvGn3kO zossvl`8u0cEo=}tfE0)vaKHnhzzj80t3aehTnH3>L|zo=aKd9QkFiN(rB7usRm7N9 zb4YVZlOpG=7^8U3t>)&*%Nn~FDk0^R;bR1Z-~fwS_?*fymuLE>n!;-o+{RoAW&tl} z!D%5xW0vO>w(P7alf9Ub*Cg~(?A&rF7l*ls;}*oFW5k^25=M$!)SOF|Pa%iz+|b5A zq!4fn#A1|ry5Rd9Ttca_VYE@p7m$P}6*FKfB5OcI6A2(C4ikqFhB+ezV>x{qLL`8R zhKWwh4Zd6~brupi2*H(&1;UmjNRsNL+exboljd`ecr$y%`n0kFyR{w?>e?} z?rF2pj7tx)Z5TpfR|)P2LiCej?*bug>a&qwV8Iq*I1zrGpzdP@W$4xmccm8VdgsNlj9kl=zYBq&c8(g#4Z z4+RCy$$A6c*Vv+Lsn}g9h@%R^hKnAji9yxC?id$LFHjjup<<_klbf&!|8n^I^0=Mv z@3)_mw9l`ky+4+=K9KhGaHqYzFYWE)-8MbhZSBve%|HKI+uvuc-8|Zy#)U7J%gt@9 L?ZesaPNw|_;Lb?* diff --git a/assets/voxygen/voxel/npc/quokka/male/tail.vox b/assets/voxygen/voxel/npc/quokka/male/tail.vox new file mode 100644 index 0000000000000000000000000000000000000000..0c041651abeb8ff2ebfc17cef64df810133160d5 GIT binary patch literal 1200 zcmeH_-AmJ96vxkRn=>d-jBE}p5%MJmfm4@dzLC}tn`p|MIU|{K<>(@VpJalFjZiBj z%t>J)A|^qIH@#hmcp*qv5`h;{)J;TJK@h~J^V@$Bbl}VPdA{f6InQ&RjzBPPMnszH z{1=quu|uTIA8I&YZPe_FeF~K&*ctKZLvd38>sJa*d*~ym!BZ=6e`M=C@Sp5 z;WQCv6SZ2V#|nK7jXjWmdX=+UQf8X*aG#AkWrVV`c^DK1n}o1e=*SmNmF%ZpdrNe= z8E$nk*qlw!BaDpXaIGbaiEbCs?h5=fXDAphL~tP6f-KpPL@sjqAX1UWrMNJ()5pb4 zt-mX@Yh+?w7+xvH_pu3H_OiAX;1_**+XDD1>^v717lp|cZS;filXBR+3ZGkGLof8B zo8ZX|+RHPzePxV^^AC7+;w=mEon#Wljv}e(BUu_{t9ll0zG1vZ^~@w@B*|pI`Wr@x z$Kz;QSYwdia7g=ON6~Hx4vyz#@nrxqjX7jwjOsZbD+!^xtR#g*B0=rlb#6Rar*?Fd z#%KqAzaN*&Mai)vbaj~o0wy&zCdI`jIc}YcJxnwjWqNv=)zwwz=jWN4n!+?qB9TZc z-|O|_cDo6A`xx)K#ccmQUJNa<_vjsadwcBe?xu39s;UTuLd0S*mY0|HOXv*#<6n6L F`3q&r$?pIF literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/raccoon/male/chest.vox b/assets/voxygen/voxel/npc/raccoon/male/chest.vox index 072354dc819222f2cc697c5f7c10f28f8e0dab37..ee30dfc0a16a779b68999550a1195b4ed4ee2057 100644 GIT binary patch literal 2944 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 delta 194 zcmW-Yu?oUK5JY$HE`=!ArV=fzVreHxBB)%Uf`Jh80~R)d&2G`Y62{khnaq{sb^J((OdoSs|mCL)8w60}!EW}zXaU4rB J9yBLCQa_0_DhvPs diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_br.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_br.vox index 614e96f7fe54aa7dfe47f69e1f2572320e205eeb..c2c76f2508a9d34127d729db49bda741541a7000 100644 GIT binary patch delta 453 zcmW+xyGlec6g+dz$&I3&U?B=VI_#nY=B2EKMKp2Af|Za&z9hWsxq3JoH9a%XQ#!f-6}d2E$SB8f7ShYCoi|KJ|nSB^CaVy&8GHE&ftt6EYG(-!qooi()3kkmp}C&>fRklZ8%AH!J# zxpn4V$PsddJtBFL;;{v&gQ{s6<_YlDIGZ-v=w*oPV`~<(Vd~kK#+b_Z(3D^hV>-BJ zFa#I^LStz%qzdw`{zOiSj|u+$Fk5Ue|Eq2 zJwBNqAYiY5dRY1w$K~>9zszQ{a`ygHUY>?!@|wzIoXhscYT4acFKeqS^Jm@CKT*g? ArT_o{ delta 194 zcmW-Wy$ZrW5QKN{E`=!ArV=fzVreHxBB)%Uf`Jh80v0xc&2Nm_$KGRAdp%01}{d$K5BkCWwmyKjy<1su^LI6h7%cKv-BLo}g!0 zh(IWyfgDvk3zUDAz>bW3h_9aU7VfRar1CD)VBTs@ia3} delta 158 zcmcb?`GO-R%s)b58Uq7^ucN0QkYWg7VPFXMjB@1xae#mkh?#(x6^J7uqdZlBGzf5j zN#+8eYykr!Qw0MfBM>uG0CfQQ%s@6v#l$l^m?Lx;Hn%gfGHS1EXZUYtq7BCF?d|^^ lI=B2Up1bA0Lu2EAxAd_8o}QlnB_t&NYpcp_-p-`R1OUu|CXE09 diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_fr.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_fr.vox index 0d1ed561cc5f2398929b4cda86cdf8f22874340f..f5137e685b2aa016732eda0e3ef27827595834cb 100644 GIT binary patch delta 271 zcmWlSy-Gtt5QWc~-Hi%%LIhFpuhPy&1jRo@E+JY7l7y7jdlyM@i-6_DQV?IlG8R67 z58)&D7UQ`CAK&b7IQzH!yYljQKid8PFubhpB>Y6+p_<&Rb`MPuI$=qS#*^w@?q*-m z&@iA;sDXAc6denUGK;a7Y0PAY)nuq?v8c5WA%k&P$e7J~*%(ADW-$W_!{nHWSc6Hq zq_R|-cI&JHgYrl!)<^Q&^gDdc&KB!TJRF=K`{3%-uTPG=ZCk&1{qm>j*yqpL=d>u$qGfw~j delta 158 zcmcb?`GO-R%s)b58Uq7^ucN0QkYWg7VPFXMjB@1xae#mkh?#(x6^J7uqdZlBGzf5j zN#+8eYykr!Qw0MfBM>uG0CfQQ%s@6v#l$l^m?Lx;Hn%gfGHS1EXZUYtq7BCF?d|^^ lI=B2Up1bA0Lu2EAxAd_8o}QlnB_t&NYpcp_-p-`R1OUu|CXE09 diff --git a/assets/voxygen/voxel/npc/raccoon/male/head.vox b/assets/voxygen/voxel/npc/raccoon/male/head.vox index 6ae54ecd1708e306d9f1cf5ef804e795d031e061..5cef48d259f21d48a4c06a111236e8ec4faba4d1 100644 GIT binary patch delta 1046 zcmW+!yQ&pI5bUmg%pMU81Orj<6{#4Qh@kkw;38@uh>D@{>>~H51kXZhA%_e4 z5Y%X~To<*WBMiG-I#yAjePIlC-4gTk^(!8zDV?{ zPEfdJjR5(Q$)bXLG|Q@;{-g+P{5w@vg`rSgQSFn2rGW{%y@0Yr=pq#1v>P>6WqpKI zu_j7qGgfU8OP`vvwMsQ9Su6`eiWEGTDZ=o!7v$YN(8&n;&=x(yYU^cBY+cpN5E9z zV}TLuj_(*if}kTA-0g{cbY6%Cx5?e+#$?>+VJw(=05f41 z^bj7vLwJYh*YCmiy8f!_uBz_8_kW(9F5m4ReKWH+FQ>OG_Mn=*pRQh=4Z(L0aM=d- zAFif<1%vMsL|F6UJxhZ3uksIU<@P$s+s*l2BW3~;& ziwY!-MHd7lx_WI9(F73`gjk!_F*!VGG8jgX>pmJCMb^T^Xu2@9oSVTX@^u=MARMug z4wd4f5nm^y0R@xPX2b$Jh?SAc!A21e9X;Z6uIOm^H^a}B2UlH7^a6qahg??%DC+0I zFF{79AR`e}xFXPaSNQrzzqNmAw=*xg`!U<{;`wf6p6BJ_%iZ$v``vPJbF;j@zFekh QTDIHmvU~FI_E$dk|6-G2UH||9 diff --git a/assets/voxygen/voxel/npc/raccoon/male/tail.vox b/assets/voxygen/voxel/npc/raccoon/male/tail.vox index 629d96611c0db50db9c52caed3720b43279adb9e..4fd0f3e8953a7078bdb230637dd4c99f5d4de3a7 100644 GIT binary patch delta 705 zcmW+!O>5Oq6g)F?^Yzq~(1j@YvD2L!5h~h>lt)oPLE7TdrQ`*Zmzzc5xhrl25yb!C zO6vcMlU_KPb53T?$4!1WUvKO_ygj-5Doa~bh|efH}568I$BHCtgjIXzqN z(~i&gm^J5ydHLwUIQcjutgGVMC*qRb;w3%g9)YRy4=W8?3H&R4~hGE5F9keC@9vE)j}9zfnG;H^sL@O7$;F}$tJmj^~N${JaN z{Xx#(G%=x)RLomzd)}(^2j|N9Y23EA0O_| qFP}c1FD@?T7vKKPpFW<>=U>|SeCX!;clPFo4{p!5_HJHg-s69xC~A-Z delta 208 zcmW-YF$=;#426?iI|z1j=p;HgRd8{ZIw;(r4oazA99<7|=%xkXa2CYHAK=^${=4{U z;LA&1UarxrbICUO;7LTQxm`o(77%T1vFNr7Nf4uja-Wxr=8%?W9 Tm&Z)4wHn8 zSR}N|5@}b8F+|fC(hAlzN(fRK+mHsuix^5Mg;GikB1kAj#9J>!yc?ghxf2>M{or9{ z&Y3eaXU=^4?Vg7o896B;JGV?ch>&=T$nJ^B?VqX!pFZe^439iIIdQF^@LA_Yii@pi z=o`#yEbRn1*C`6M{Mkz zrA_?}q!){{iToYRL%Dp+`wNqq(+>o!KAD+4! z;ojWE(~G`}@4QdMNNwXIKC$&0+DKm&nJb>y)aI!(Kqg-n#~J*QzOXO8%aMLkN66Y0 ze1ZtIdTJDGdMU9>=uuOv>;-HOuEu~w4E0FJ=uQH))jX~fWWXnT&I|90RAhGC#|u8> za`=L$4(}X!U8~3fnv}cJJ4akcA3;Ot5_nhN50DNi&;({G(YruRkR82ZEuc3saPR69 zx)P`fG}JuRhdR+cG}wjSXyBbI$#*5v*TTCJBO_B$Bt6K?256>#)T)hAJG0!RPO5LB zXXqu;&xW_cPZKkjnSr`ibMt-h=nf?MwnX{^k=abK&NXutBL36}ik<6Qr5c~vft2Wn z)*8@}Mfo0}H|U-kJa3njI#S)^9x1kw^~8(>bYE@eLfDVYg7Utqogiv+XBLwiEo}8IA2j;Ih$PcJ%K`jNIwF&Ob$q(P{3tkLjr{Yl8Fr- z0z}AApaIX@21uZg!7DMrDZPOJ3I&{U1_DG#ppc<}<6Uz7djyU-D)8`qU)v(_#{V}P zH*U0W3VwdFHow*JDnEt(pzrALQt?938d{q7yM@Nu!_&lCHk*yc-O z@=fwj7n2j8HaS0Fhwr%6&VF%$UHi%+vmKwa6C!pI{se!66VHmB`>ELFvtsYPg*`5I zdb`+f9~Qg*wAdu}vwOsjJ<0k(v8|(GdpC+5+$Q!4>$}zs+y3oKZF<*AJNeWaoB7rT zJGpPGUH;*>?eAyy+p1-Qwt3AGd*G`p?WsK*?7$AO+3$#*`kvUOpNOqrJZuwV%kA;? zciPmpO}1xj(DtueWJm8?VHft^Ws~37Vh5gh&}Mp%*^xs}+jKW+SKdBu7tX$DSKoQn z`uqFsw)wZ($jFGT9$jkd@BF-ddCjP8-@Mu$x_6Tu`@!vY?zN@%=l90!`Uk7*=j6O_ zM(q9Hi~aSFV$=Iq+AFhb?aCWl?H_;HZBs|)+0kDQ*jpbC*>zj;f4~3QwQKFA4X5m` z)u-+5!!Ov-?2x_tOR;N@iM_sZrHzh`+P-B6?d$iSH<_Kb1yc*`;>$PQ@X#=`vv{$6 zf5i#A=kDY7d_P{SL+3q*5+W7dmeJo~D!2V_7s@O-ryHVdq%-8?g=UX`UJ^LhC SH$Q2wuHS5LF7VCI%YOj&axjzt literal 3336 zcmc(hU5K7X701tfoSAvvRY}ce)7{i$-6VE*BW?3xK5VQTlWn`HX-%WC-PTZ~rCCCs z=Vg)5E=#0cDaH^@ya4AAd?@-^AoNviR5G-yX>D(8H4xe=LjLa)%cw zF4oz_uDZ}o5Q^5p#m3X;pj4sp-lMUbA%Q}K0KST~Lvx335WqtO?ch74ZUPOdj%YwV zT7ot?Xq|%cO}nuu-?Z`cIoefVZOD)yl*E|Sgb_`jh^wShwPO6Xt#Lc_Sm2hA%OS94V8~| z0cC8203NcBP4es`(+>gLgJZ0;c8SE>?j_cVI6`JGIq}_h#rvl6jMNTN$V*1 zqwU*1@(|kjj7#1TzpEp50FUjMD`@e;7$FuRerX~az@{ria&wa=2*## z5>rQO?XY*DURpwE6e4p%2%JseY(gzi1&=?EKi?!!>_}h0_Sg;tN^sPPqZS-v9Ag|~ z9AjMLXy+iTBb>d^C*2Z5lOt=#P%9cCfCnYc2!U8V>gX$~>?71!IiJXS(KFvOA5civ5Qy0FGNc@qULyC_2BCkrG@fWcJc={a_ZT*Kjfhze>V#4;Q1HrBo-^AdU zU*V@H^@b*mb)-Ko`lh~VJ8a>*wz*H_KBYzzcL+P6fpbXhIp9l`*r9YktJ+cRrx zkec(1FNvC^W)diN2#L2sOX4g%xxr824FKhhiL`@Kf7pdN6=z^NI+yqN-(qpl!B0)+?xyz`9nwK(pvqgEU>g(g(d=%^*s({|Vb z#c@xa)JYg4j6s7?Z`?U2#4M~O+$&Vkhz9VCall(o?wF4sb=-3Z*nvKteby4*ckYsB zAIx+3D2wyjx$KwzL_Q+56_jJ1BNc+#A%>4juLdzC%0^JKTFTK?dL9 zUO?>dZlDP=XuB2!-~Qg;W>itMCZ{A}FMaSSw<}b``!MRKAX=Lc-2yL0!c@ zEBr$Qg#;NKdljfW_nr4PL&8>w*rDxX@2Sl}A$Jf8IR(W|XhsY0gUW9bu@=q?jiA`6 z5G!_p3Z#&8@DLz^7S0ng6xvmxW(qY1o*E2jL={q7lZ84!Bj**`y2!)^Aq#gzYQ;{F zu?s4h`pU$XsW*t&3JEgb3R=-Gnb^QXfC!p>oiedu7pOoov4Q7~1c=y*Cdg1SXPJm6 zQHN+w!dt@n5FjRMJMr#gXY7JX;_XeW4FMu3B*;*pO5}x_bJW~}_k3-K#Owc`*}8SB z&Cbr+M<>PZeff&5?)|rY+}mrHFYmGT@3o0HZ^)9dKI?yM&<2mJvys!=OvcsZP{-uV zXHBm3*^)hC%byav<%HN5Ul%Kf#6CSIwv=|?t74n>^w{pFme}O8OYKJ&KWDpU#rDpN zefPZBGw(BZ?|`kG8nQLBqqccr%vMbI+R*U<8$G+q*1vtLEq_#O&9nGECAR&Nn0%A< zXNt-EXG|{i+R_etN&yiO1Dnm zUV4)a4i4J-ks;fB+ZXK18%At=`+9re?rnDB2e;VySBC5_?~K~D_tx3ZS##m6*t@?M z``e$yW~PSirMZoE<+Yvm&%f@o>0?Xm_^*5IjraTQnyvc3?|BO@braP?vP`n?xS=4Nc!^fJ5n;`K8;GC=LDTxs85J8yU0 zdD0#~_PpJEV7a~bo3(avvfoaUv;WS2JFfNh@V<9#`k>h}FP^ixUoF^=FT7cH zQunCc_1tN@?-!SB-|JUxY;4Rv5;G}a|FUpZ?8Dz(kMBe3>wkUc7B1eiPtx||Cw*)C NZ}e@^@r~!pe*muFFJ}M% diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_bl.vox b/assets/voxygen/voxel/npc/sheep/female/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..cd25afd66c31eb6546f1b4de29f075d77aad732f GIT binary patch literal 1232 zcmc(ee@NVA9LL|^Q%kbK<$2C?>2+%J&e-xt{%E$&)HYpiIm@=&k`Wv8kfj`9?l_F? zVq|7HJKTbnS%}1#ZE};Mz+}i6j4^CP5HdzY|Mo{j|GoO$_Fpjjvk$z!@9*dNJkR@i zzR&l0diLz|O-br(Zr^R9?=z+D_Hf(7>BPciWEc+``}T+1KQK*)KmBkr-;^>39mi1S zfb}%Z7?hJS;5eqzuw%&4+m53lbF+7swHc;nU}~5ut*!?K9hZ%BnV%tLnO~OqnHqAL z8j|%hi(NQ-ENkbJ4wfd_RH&%8}d+i$cJyF zlE8E$YRf|X522aI(29rLPEl}7Y?=^HT@=~<;*o^Nv)prD)OP03aV(eci9Ft4e4N&} z=t_z==Ed=wHnz)4al}tqJV;$CL{Zd@f80xOwuGvyn<+Rb%1)T~lxSKKdd23CWuxSy zXu-|s<_*j}ozJc3ilE~Ok`jx?PsVRXa#+lNESBfQwM&+V#7vv`X0KQ~D#Dfz_lSwZ z);=U!0;0D;47G~0*4|a?CDP_6)>XmOk!s?v)-%=D!t#5s@%wCq%2E$a)g|nDzJen? z_4Id$#Oq@EEwS{Gs4Mo;9xUTv-4>#)jr0UPL~4r|-%(DgcPrtSo9REaoA}@X#zu}3 z8wj&gJ`FvCb{M2oEl4q*}v^7<+=fy@Q-rdCf=YD>^7G&*4 zC7;@ysabLTJMrs}A{MFOY@&vh3oZQdOE=N6T*kk0bLnOwYn1%&-(OQx!|D2IwpPus zZS*9Ci9)V^A#NQI=PN1*1OoJx4)M~?1(b-9AI)d+%)Ng&;*;=_e2eDcF8&kT;T{p2*eK3k&u w;wqs~h&uvh8~jDas<{2_z4hI;^YveKyMlM`+5I$Kyk9NdzFzIF@%rQS4?-(2F#rGn literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_r.vox b/assets/voxygen/voxel/npc/sheep/female/foot_br.vox similarity index 77% rename from assets/voxygen/voxel/npc/sheep/female/foot_r.vox rename to assets/voxygen/voxel/npc/sheep/female/foot_br.vox index 9514cdb14cccb6fd9cf996537b0c63fb4859b8f2..fab36a90f587f13de0e7780fb36426ba7d0c98b1 100644 GIT binary patch delta 111 zcmbQid4W?f%s)b58Uq7^ucN0QkYd;~QBYWv8OUG<;)uv7&mNE{5GYNw47OlkVk=-^ tVlH50Vgb@D1&j==1q?vU$Oxo?n2`xc12H25P#q96G6HEJ-q^##0ssnA5fuOc delta 54 zcmcb>IfGL$%s)b58Uq7^ucN0QkYZ?=C@3t-1Z1!RaYSU4X9!3X2t+1Y25&sV!vX*! C*$Ni` diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_l.vox b/assets/voxygen/voxel/npc/sheep/female/foot_fl.vox similarity index 74% rename from assets/voxygen/voxel/npc/sheep/female/foot_l.vox rename to assets/voxygen/voxel/npc/sheep/female/foot_fl.vox index 163875d70154fb30012a28e422499c2f77c0ada1..73030d47e6d25b2ed06b730f8d6896e79f1d00f0 100644 GIT binary patch delta 167 zcmWlOu?@mN6hm$QJEW6nB3cSop-cgEC@@5F1%m5XfQAM!01MDD9?qAZY`_05ztSBK z!{!BGx9#^1e4gFv9xe+roX-7aw!XEY*g!TKxRYv>?980P6@(pbbb?W7pqQu_!8Ae1 YE_tVsa7V77QMNbArNR#&>i4lsf6_M=djJ3c delta 134 zcmWlPF%H5o5CnJaOA(1CA`jpzDP0g66gj*gl}$zbfP8=^$|Gp#cpmGM_I7S`zxHUm z=@u_Lfa?%O6}ESGUYwv&;`|8rYBhabWFc4tg<`-J(8(#ai5CGmtooMsPbj3%pihKl M(&S9HrSIote;!a0ZvX%Q diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_l.vox b/assets/voxygen/voxel/npc/sheep/female/foot_fr.vox similarity index 74% rename from assets/voxygen/voxel/npc/sheep/male/foot_l.vox rename to assets/voxygen/voxel/npc/sheep/female/foot_fr.vox index 163875d70154fb30012a28e422499c2f77c0ada1..d43de9f69257ebd52b6c3b34964761e0a96c1052 100644 GIT binary patch delta 167 zcmWlOF%H5&3yqRn^Ktke}Vhf}!f@QD_PQT!c zG`ea@{rP$S_szqX&(H5)&Ftgj(m z4_UDngyLur5>`i&Uke#cpzyn{3Dtd9=;$ERki~GtF4ntrl};Td?Izz{e(eYs5;}!1 zB;29hpw=*nmQDQ&Xz6>Ld|DzvLEh}z6@`<+ z3m4ZQj(u5<+I=+F2&_CnvwMKJrlrRy5BwkppIxWLRwk}gqd1`~=QMpkI}>UlKRRRy zL3=}NE3xqp*;oKUEYLbdyU~z0(ky0j)YZv{wwjpJ)Mt>>*T6Cc^%2-~V?Z0N^x-8+ aFF}E@WLL#5c`Q~;TT?u`4!_^&KK}z@eOtx= delta 541 zcmW-eF-{~w3`NWS-_?Tz0on_2l_5a{3(^KF*h6%;2$;&|3?#%zdm#?6huK#Xy#AK` z?W!(+-+W!){(gSB`)sZKJU%`l?fT>P$GH6~ zH)xWzW!By^x60fNf>PfNUHCQYeXS&yeG|G|dYDa3s`Fm1&Bmx0-7z#FuEd1dYQt`$ z&_b0S9h5>v4eum_L!jbR;7T-4DUAhEMm-{ZO8O&(o;4al%RB`v6b={`1|P^@!GZi0 z6g5N5L!lUIC?%R`p!4!v3`DM9^7L_V2Tir!1l>7w=F{zipo|g9^RF08&65yo5YIl9 tr;c2EXcd}a(6)p@tZCN0R+!j$h?`lZ_iEbQwElXyKQ>=B-Tr>3{{y13MY#X~ diff --git a/assets/voxygen/voxel/npc/sheep/male/chest.vox b/assets/voxygen/voxel/npc/sheep/male/chest.vox index ab3c55de86244b8ef0cffcc7817d585c78a51023..65d7169db18fe30bcd3f6ac1d315d814e1bf979a 100644 GIT binary patch literal 3352 zcmc(hU5K7n5rF6X%{lL`mDFrD-Azr_{MhV9TJvLmY^)oTwB6LSrqS4LYbesvgwXf> zSR}N|5@}b8F+|fC(hAlzN(fRK+mHsuix^5Mg;GikB1kAj#9J>!yc?ghxf2>M{or9{ z&Y3eaXU=^4?Vg7o896B;JGV?ch>&=T$nJ^B?VqX!pFZe^439iIIdQF^@LA_Yii@pi z=o`#yEbRn1*C`6M{Mkz zrA_?}q!){{iToYRL%Dp+`wNqq(+>o!KAD+4! z;ojWE(~G`}@4QdMNNwXIKC$&0+DKm&nJb>y)aI!(Kqg-n#~J*QzOXO8%aMLkN66Y0 ze1ZtIdTJDGdMU9>=uuOv>;-HOuEu~w4E0FJ=uQH))jX~fWWXnT&I|90RAhGC#|u8> za`=L$4(}X!U8~3fnv}cJJ4akcA3;Ot5_nhN50DNi&;({G(YruRkR82ZEuc3saPR69 zx)P`fG}JuRhdR+cG}wjSXyBbI$#*5v*TTCJBO_B$Bt6K?256>#)T)hAJG0!RPO5LB zXXqu;&xW_cPZKkjnSr`ibMt-h=nf?MwnX{^k=abK&NXutBL36}ik<6Qr5c~vft2Wn z)*8@}Mfo0}H|U-kJa3njI#S)^9x1kw^~8(>bYE@eLfDVYg7Utqogiv+XBLwiEo}8IA2j;Ih$PcJ%K`jNIwF&Ob$q(P{3tkLjr{Yl8Fr- z0z}AApaIX@21uZg!7DMrDZPOJ3I&{U1_DG#ppc<}<6Uz7djyU-D)8`qU)v(_#{V}P zH*U0W3VwdFHow*JDnEt(pzrALQt?938d{q7yM@Nu!_&lCHk*yc-O z@=fwj7n2j8HaS0Fhwr%6&VF%$UHi%+vmKwa6C!pI{se!66VHmB`>ELFvtsYPg*`5I zdb`+f9~Qg*wAdu}vwOsjJ<0k(v8|(GdpC+5+$Q!4>$}zs+y3oKZF<*AJNeWaoB7rT zJGpPGUH;*>?eAyy+p1-Qwt3AGd*G`p?WsK*?7$AO+3$#*`kvUOpNOqrJZuwV%kA;? zciPmpO}1xj(DtueWJm8?VHft^Ws~37Vh5gh&}Mp%*^xs}+jKW+SKdBu7tX$DSKoQn z`uqFsw)wZ($jFGT9$jkd@BF-ddCjP8-@Mu$x_6Tu`@!vY?zN@%=l90!`Uk7*=j6O_ zM(q9Hi~aSFV$=Iq+AFhb?aCWl?H_;HZBs|)+0kDQ*jpbC*>zj;f4~3QwQKFA4X5m` z)u-+5!!Ov-?2x_tOR;N@iM_sZrHzh`+P-B6?d$iSH<_Kb1yc*`;>$PQ@X#=`vv{$6 zf5i#A=kDY7d_P{SL+3q*5+W7dmeJo~D!2V_7s@O-ryHVdq%-8?g=UX`UJ^LhC SH$Q2wuHS5LF7VCI%YOj&axjzt literal 3336 zcmc(hU5K7X701tfoSAvvRY}ce)7{i$-6VE*BW?3xK5VQTlWn`HX-%WC-PTZ~rCCCs z=Vg)5E=#0cDaH^@ya4AAd?@-^AoNviR5G-yX>D(8H4xe=LjLa)%cw zF4oz_uDZ}o5Q^5p#m3X;pj4sp-lMUbA%Q}K0KST~Lvx335WqtO?ch74ZUPOdj%YwV zT7ot?Xq|%cO}nuu-?Z`cIoefVZOD)yl*E|Sgb_`jh^wShwPO6Xt#Lc_Sm2hA%OS94V8~| z0cC8203NcBP4es`(+>gLgJZ0;c8SE>?j_cVI6`JGIq}_h#rvl6jMNTN$V*1 zqwU*1@(|kjj7#1TzpEp50FUjMD`@e;7$FuRerX~az@{ria&wa=2*## z5>rQO?XY*DURpwE6e4p%2%JseY(gzi1&=?EKi?!!>_}h0_Sg;tN^sPPqZS-v9Ag|~ z9AjMLXy+iTBb>d^C*2Z5lOt=#P%9cCfCnYc2!U8V>gX$~>?71!IiJXS(KFvOA5civ5Qy0FGNc@qULyC_2BCkrG@fWcJc={a_ZT*Kjfhze>V#4;Q1HrBo-^AdU zU*V@H^@b*mb)-Ko`lh~VJ8a>*wz*H_KBYzzcL+P6fpbXhIp9l`*r9YktJ+cRrx zkec(1FNvC^W)diN2#L2sOX4g%xxr824FKhhiL`@Kf7pdN6=z^NI+yqN-(qpl!B0)+?xyz`9nwK(pvqgEU>g(g(d=%^*s({|Vb z#c@xa)JYg4j6s7?Z`?U2#4M~O+$&Vkhz9VCall(o?wF4sb=-3Z*nvKteby4*ckYsB zAIx+3D2wyjx$KwzL_Q+56_jJ1BNc+#A%>4juLdzC%0^JKTFTK?dL9 zUO?>dZlDP=XuB2!-~Qg;W>itMCZ{A}FMaSSw<}b``!MRKAX=Lc-2yL0!c@ zEBr$Qg#;NKdljfW_nr4PL&8>w*rDxX@2Sl}A$Jf8IR(W|XhsY0gUW9bu@=q?jiA`6 z5G!_p3Z#&8@DLz^7S0ng6xvmxW(qY1o*E2jL={q7lZ84!Bj**`y2!)^Aq#gzYQ;{F zu?s4h`pU$XsW*t&3JEgb3R=-Gnb^QXfC!p>oiedu7pOoov4Q7~1c=y*Cdg1SXPJm6 zQHN+w!dt@n5FjRMJMr#gXY7JX;_XeW4FMu3B*;*pO5}x_bJW~}_k3-K#Owc`*}8SB z&Cbr+M<>PZeff&5?)|rY+}mrHFYmGT@3o0HZ^)9dKI?yM&<2mJvys!=OvcsZP{-uV zXHBm3*^)hC%byav<%HN5Ul%Kf#6CSIwv=|?t74n>^w{pFme}O8OYKJ&KWDpU#rDpN zefPZBGw(BZ?|`kG8nQLBqqccr%vMbI+R*U<8$G+q*1vtLEq_#O&9nGECAR&Nn0%A< zXNt-EXG|{i+R_etN&yiO1Dnm zUV4)a4i4J-ks;fB+ZXK18%At=`+9re?rnDB2e;VySBC5_?~K~D_tx3ZS##m6*t@?M z``e$yW~PSirMZoE<+Yvm&%f@o>0?Xm_^*5IjraTQnyvc3?|BO@braP?vP`n?xS=4Nc!^fJ5n;`K8;GC=LDTxs85J8yU0 zdD0#~_PpJEV7a~bo3(avvfoaUv;WS2JFfNh@V<9#`k>h}FP^ixUoF^=FT7cH zQunCc_1tN@?-!SB-|JUxY;4Rv5;G}a|FUpZ?8Dz(kMBe3>wkUc7B1eiPtx||Cw*)C NZ}e@^@r~!pe*muFFJ}M% diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_bl.vox b/assets/voxygen/voxel/npc/sheep/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..cd25afd66c31eb6546f1b4de29f075d77aad732f GIT binary patch literal 1232 zcmc(ee@NVA9LL|^Q%kbK<$2C?>2+%J&e-xt{%E$&)HYpiIm@=&k`Wv8kfj`9?l_F? zVq|7HJKTbnS%}1#ZE};Mz+}i6j4^CP5HdzY|Mo{j|GoO$_Fpjjvk$z!@9*dNJkR@i zzR&l0diLz|O-br(Zr^R9?=z+D_Hf(7>BPciWEc+``}T+1KQK*)KmBkr-;^>39mi1S zfb}%Z7?hJS;5eqzuw%&4+m53lbF+7swHc;nU}~5ut*!?K9hZ%BnV%tLnO~OqnHqAL z8j|%hi(NQ-ENkbJ4wfd_RH&%8}d+i$cJyF zlE8E$YRf|X522aI(29rLPEl}7Y?=^HT@=~<;*o^Nv)prD)OP03aV(eci9Ft4e4N&} z=t_z==Ed=wHnz)4al}tqJV;$CL{Zd@f80xOwuGvyn<+Rb%1)T~lxSKKdd23CWuxSy zXu-|s<_*j}ozJc3ilE~Ok`jx?PsVRXa#+lNESBfQwM&+V#7vv`X0KQ~D#Dfz_lSwZ z);=U!0;0D;47G~0*4|a?CDP_6)>XmOk!s?v)-%=D!t#5s@%wCq%2E$a)g|nDzJen? z_4Id$#Oq@EEwS{Gs4Mo;9xUTv-4>#)jr0UPL~4r|-%(DgcPrtSo9REaoA}@X#zu}3 z8wj&gJ`FvCb{M2oEl4q*}v^7<+=fy@Q-rdCf=YD>^7G&*4 zC7;@ysabLTJMrs}A{MFOY@&vh3oZQdOE=N6T*kk0bLnOwYn1%&-(OQx!|D2IwpPus zZS*9Ci9)V^A#NQI=PN1*1OoJx4)M~?1(b-9AI)d+%)Ng&;*;=_e2eDcF8&kT;T{p2*eK3k&u w;wqs~h&uvh8~jDas<{2_z4hI;^YveKyMlM`+5I$Kyk9NdzFzIF@%rQS4?-(2F#rGn literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_r.vox b/assets/voxygen/voxel/npc/sheep/male/foot_br.vox similarity index 77% rename from assets/voxygen/voxel/npc/sheep/male/foot_r.vox rename to assets/voxygen/voxel/npc/sheep/male/foot_br.vox index 9514cdb14cccb6fd9cf996537b0c63fb4859b8f2..fab36a90f587f13de0e7780fb36426ba7d0c98b1 100644 GIT binary patch delta 111 zcmbQid4W?f%s)b58Uq7^ucN0QkYd;~QBYWv8OUG<;)uv7&mNE{5GYNw47OlkVk=-^ tVlH50Vgb@D1&j==1q?vU$Oxo?n2`xc12H25P#q96G6HEJ-q^##0ssnA5fuOc delta 54 zcmcb>IfGL$%s)b58Uq7^ucN0QkYZ?=C@3t-1Z1!RaYSU4X9!3X2t+1Y25&sV!vX*! C*$Ni` diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_fl.vox b/assets/voxygen/voxel/npc/sheep/male/foot_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..d43de9f69257ebd52b6c3b34964761e0a96c1052 GIT binary patch literal 1208 zcmc(eU1*zC7{{OUCY54UI-90TTHBbmE@@@6ANIr5ncBuJo!#uJb<1WMvayD;HH1;K z5Gq?_SWC5bp_|~=RV_uv>Q=I%cu~tJV=%_3Lj);fhFsh(4F=P?m&OJ3X<#mZA(Q8nrt zam4p*f3;n7eRj08w2)4xxj!lFIKM)r>u>&axmaHA#*WL8YwJ=Na^pGZ!#7e(aJm%< z=OKfSBQsAUD{czAg_5H}*@W=?6(N66crqgtY3{xxGYLX;+4_{Y7}%vMl$V-qC@gsPJ|_LR`JB*>dOe<~lzK7}l} z7~QmixfhDL`*JCCJxf-EMdc^uHzk`C=FbSrbHdH5numm$u<-33VeN$twTABEujQNXxe!f}5+U;6C z*Ew^u!maOxUw;%*u>j{X4Xj-5;E!K=NsJXT{0(NxL>nTTRlT_Rsofb}n6;X{y!LZkq@t-hN_^}>Pi`6rzMsRAG#t%1QF?E3`P+dW3N8Q*xP64r*8wh#~t`^?)jd3 z&pp5UySIDiZqK-gbhLzbsFQE)B3o-i>Q8DcOV%k-+YivJih>j&ECWd0>sII6N z)wPS*t}XAii1ue$V`C$!REo!A!qy9mlso?Bsl&m-LI;*z3*TIk{Gb!p0S}(RD*O{o zNGJ#CTZK%%hAcYC?+}WP2qmM!o7aWhKH-(LP@u8%s!-RFNBfa{A}0#?a_)87QbK1& z_+&;n{y^7ux+#r%sYnH=&ju-uJMfOU2~3qyePi*G9>)4OISWEL^Mux3!?{B z9}rsoLQkVG&?cN!y|d0uG~^}O>0|s*4XKYB81HRm;fs&?b1F(zxs&FaGPb?z<4|`4 zeeFVezc6u3nEzU+FLe_RRIsmpJ@K|Cx&uz4b;XQqsU+L8fyf6f^c~niDz=y5!NVl` zBP`w=BRhSHrP~+C%gbX;!D>7n57mAz_3PL2c8#A`I4sE@PhS{ARh^5nNJ;=}ojeCOcC0~gDb{qNsjTU*OF4HImro@CR| zNnB|ccP-rMG tV35ZGlB@6+wk6@wkI(yir1$H;^7;gyy|Wj2EBT_FrLUBGR(R$0@((m_Ejj=I literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/sheep/male/head.vox b/assets/voxygen/voxel/npc/sheep/male/head.vox index a5158d9f056ed5184ab80373a107ff2dad648ba4..622de567ea8aadca5f27b6c2aa380f4d7dfbf3a5 100644 GIT binary patch delta 375 zcmWlVF-`+P3`NKO_RMUA6dL-RfS!s_P^<`0Afb>dCzwSD?M?>`2Z$mNhoIXFaEKft z2jBqw9qGyT|F%3c@AL1|<>UQ&@fAY2y=w0mg5?k%+RgRJRPao(A(X@VY11CSgy)Y$ z@ou;Lm?x=`c(fss-QnU=P#{(mHUL%?=mAs#27wL=?KAa;ex}~gpV6DqYv}D)a&vYx z$1%AMMv_}KGXBUYZ#BkgpK>1uqI@dJrWF&=nu$ly$B@{QrvAj5c;Xx}YDO>fqFL~q z#EEq#UTlgHFNs8z;=~{YswLrEN@ijla?vgdMZVZGKZ1DX0^%8cB;zYqy8pH9xQJW% E2m5b1PXGV_ delta 238 zcmW-Yv1$TA5Qb-VXZQBPfr8jeDr>tyAZKB5XcUpi#oj^&U1e wATr_v6jv^|>8)jNtb*}i`AdN!k%4Mlc5mgP_gHSm?eaA5lz-=Cv9dS50}4MZnE(I) diff --git a/assets/voxygen/voxel/npc/skunk/male/chest.vox b/assets/voxygen/voxel/npc/skunk/male/chest.vox index 449c291a505f69326aa23ea080132a7728e44693..38d05de85164a810e0f9e5d408babcf829aa8d10 100644 GIT binary patch literal 2576 zcmbtUe~6Y<7C!f$d+z(bUt72}&g4v~YnIL!nL26ixbBz^HMUmfuGHkZ%aW8#Qs4W= zP{R<^RN#u6nOMQvWHCrAxh9ho{$Wz$#tsp#EDMWB?Du_t?;p#uEWy)rM~aAQ|JWA} z=bj(WbI*_aeOvFoZ~j3M*|cu(E-LxF5ZN*~H1LCD@XINeQ6lBO`-cXnjR$_E6Um}h zG5Rt(sT(CT+Ft5We3j9kd95<%>GxGgIbO=lTs;fEH0P?QQe}a*`YJkNl=$GP%oC%o zQYXxDmV*lI=jlmRgPF?Ebwf?dVo zx`VSyed;N3Y8i+Rp4{x;QvZ>>5-Mk|6!WDgr}BR9l|5J$$sL0yUh5g}b)2(fZ;rE8 z;yh<*N?vaitvqW~W$%tLVx5tT^HpzE;Ea_y>Owt`(?Y6;y2c)rc;*G4aK7?ED3_G`v@@hzD0-cV`A-4@(GwQxp` z^KqQFXWgE?Ye+qCUdH_uQrE~>suJyDZSn~}Kaw4o}^pwcoSK1fr8v;wtJM{;?SmYOsI zwNZRzPGn9L&Vo6fxJ(+Fk%wYD`Z@+izPZ;nM#)_>GN?;j{gMI}V+}b#4E_zuMYx`t+t0!rO!Iey_~xZ%5y@TQKm* zT69mWh71^FxCS|VCFD#yW^EF5>=G;)ScDso3G!jV<>P{@_6gemAn4t688+^kg`uaf z!f#Jpiw$Ff%?AX(IVyPaQ(`xFV(!ibSUA>$l~eubD%-GNZzp;t=V95|Md;WjSopNy z#)E=2rv&nI-anc{4qO2_-iFnaRy6pa5;F!8wH)C+=@b2~BEvk==> z-h^_)YHaOk$Ijj^?7jVZOl@C^p?lV0_}6z~?6C*1=c$J<`sfh$JvWT0BhTa9hlkM7 z(Sd8bx-ftKeB9c*94l|S0Y6^eje#}G(BIdKea~KlqpvT(-#+fag-@2?_q=mzQZRi| z@Q=R;Mt3g8E8{D0=I!DXZFqcr@X{<|CVW#4+BrWd<5ffPT_aQ zKg6paoWm`T?Z(~bIR*cQo)cVr|5AMy`M&;FoWH`E-&xY< v|9k?|A05L-C*Q)1|K#LXv2^%)?w9tr`M!)Lea&sVaP{h6p=;^UZ^O$ML^=W4 literal 2280 zcmbu8ZD`k36vxkf+Wy-rH0RXKbWKe+MVp#tn$3r$)6~owHO(TDk|o7|F=~t;SAmJ8 zYp6lCtj37YRF)LIFsWg|h%kvDM5Oh;7ZK5$Z=YKc6+OJ@2OsV^-*e8rzkAQUt()$y zJ!obdRC3%m0FJ_^FhCfdC#H zSoZUJKJU#syf@CnMk96t3+UhjIz;RQ7SX{+bcomqXl924pU@#MaK64A9U``KoJ|RPH1-PKTrn{Q#>g1y zp*PMq_abqIxo6H~Oid9G}8?unkH+&_;F9s)#2*`_ZRh=GRy5mF|v7m0y~ z01;9i>7g;V%l82+gwaF~L-OQ7iAU#-Wj|n}#jKZN6N})8r5yKY0Y7!VVf&1^NiQuS7VAOc>BRKLC82LWG z6>#Jxu)GF2$*}XhIp#T!97FT;Ge!uI=o@y5^o^W=mN=_O&jPVTKYh-nCJ;~D51;Gk zT_7j%hCF#L=kTUNzAL;hPp->(^e^N-m!gsH$Tijq+?PcD9cxyu;0^rpiLbl6TbFxH zYmW?TTIG-WzOqth&u+*e9cy{_Um4R>rKQ_$Q1c_pRo}lv)|_PR<+7t!%Z95oW`k+M zF4OGhnVNILRA@I{*<%{F-&FOsY2k(nt=lz5ZBLKW^QW)T>Tc8KKGOroO;3JK?dEDt z*;%LQ-3?ka)TEkXrRw%ot6^ZO8qdwtgl(qjPn+f(G%Y)0vO8J7t03#UN_MJJduEQ+ z;PvBm;pQ4?-L+b3rWW`TzJ>*S1A-Rb0J9tqoP$xv)n2*38h*_IYZ%eTCZZ z->B}#wrcNF52@?XHtm15T|HJ4WR8di(iQ~qqwzgJ{^>tb__d4A)zh2GD8nx-x zCEEYYWF3F4PG5c6po^c))+?+zG+-L}!1T=*rmmf{bhu}MhL5e%cVBN&aqk%Id#h3> zKcA$Fn)($xWsoU0`lJ#_Hd~v)^ANsY2PgQewrcBX+XZy5#X|EpK`P(5!9>4j4t>E#d4>xRenX!-7bt$+25wwySxrluxc=2xr$ z`a$8m>C*eZ{@*3;*MG%%gulGAJdS*PLVxu2!NBjaZ2T$qoBwy(A9E+K+@*<2?o-XY J<9}CgKLdZb#@he@ diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_bl.vox b/assets/voxygen/voxel/npc/skunk/male/foot_bl.vox index 392c8e75279339fc515452078eb696f71205261f..8518cee18a4940cb5771cd45120fe2c5ba88dd80 100644 GIT binary patch delta 317 zcmW+xu}VWh5Zs-;CxqC)B8aaN1Q85DL@kUE!YiVnAW0f)%X`On+C{rZd~zd_`(o(|Tt;21$m)`;Ek&?uTAje^LWH8hDLs-jUrWQiH0HfmeYFhZjWgP;j6C9oW#BCs416iJOc zqo)P^qJeRT5TTa94swopXh9|{`@9%nj%-L5!_)r%Z}@iS%;zt6AG%qVrEhdPUR9MJ m^t!&kyXA-7Z66%(`N>i5^%_sw{`q?M@8z>EKOgVQaI*pvxIH2O delta 189 zcmeyt*}z#J<{zOjje&u|*U{4tNHOHFFfasrM!E8UI6%Mz#LQ3}5gFxa0}=!RJ|Jdf zWGn_Mr~tBxf!tz7Ae)hqp_qXYNQ3wwagZ7YCLo&$$Oh6t9OUlg$N;nl2sVB{$SBXv z&HZ0OSn$7sg2I18O{M>4dTRfzj5Pnd+8F-#ceC7looOv2_n9Lb{sT4q2ZG7{ESUhV CJSaW@ diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_br.vox b/assets/voxygen/voxel/npc/skunk/male/foot_br.vox index 392c8e75279339fc515452078eb696f71205261f..d607ea8dd70b4cbe969fb47d6e790e6ff0c35cdc 100644 GIT binary patch delta 317 zcmW+xyGlbr5S=-@5rX!&2;!{-K?Fk(Q41pkxrGV}64O{)?rxJJ5G#K`@E2%{iO=MUks!G+1-O3IrutA%-`j=AGSZ z+ZV`~fw4NEMO3q>6on*J$?6=gfgD8znM34(UPvlons^1FBs>5#5EzU_l|W=TW+<`- z4g}X*)LRMM3w>xP;2b=Mn4t8QzU#acNa8&pU!I=ym%riLjWwCPK78s%RaLg$=~!LY nw%_a8-p-~Sbhm79v}?zQy|-Ju=<4tHhyBcFHvf8ltm5528PYu{ delta 189 zcmeyt*}z#J<{zOjje&u|*U{4tNHOHFFfasrM!E8UI6%Mz#LQ3}5gFxa0}=!RJ|Jdf zWGn_Mr~tBxf!tz7Ae)hqp_qXYNQ3wwagZ7YCLo&$$Oh6t9OUlg$N;nl2sVB{$SBXv z&HZ0OSn$7sg2I18O{M>4dTRfzj5Pnd+8F-#ceC7looOv2_n9Lb{sT4q2ZG7{ESUhV CJSaW@ diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_fl.vox b/assets/voxygen/voxel/npc/skunk/male/foot_fl.vox index d50d9d4d0d7ed7a702d4b70e6aa79702da1cc839..915d81eddd6c32e4f05efc388e07f438f6a66b0c 100644 GIT binary patch delta 223 zcmWlPv1$TQ6hvq4dxB#6MMPYifQ=B55Y)mH7F(DU3qkz?E#KQFT|PpP{6at>L9ns4 zi>04pf4w_!?%WyXR^8RUKHlf)7QpN^do#ng2l8w=eJF#;8CIcU%oodSWnQXL9*0ks z2qVaXf(StY8e*9)k`h2Mhrs|?4@N=);W`lz!-nuS@KNXsv0vbV(1pL%h3zCswAE~C nnx^_P=<9RuQHTAmPRCC=84V7(>{-A5AN6wn)${3RQ}^pTQ$Q^d delta 182 zcmZ3(`Gq4R%s)b58Uq7^ucN0QkYY$+VPFXMjB@1xae#mch?$`{A~MR;03-+m+(698 z$XE;{iy4_1Du4%jwu_q|A&9>qC@6x9Yd1Uk zDef`Pz~SUx0{K=iwf%Y(xkmt4%z~u|P8uK#;(6T!86`*s6(QQhK_WKO5JkCNW6HltB7Flp?5hPCyxflAz^4r+_+>mx7XArT3)7mTlYIbR2eF kmxsQ`gIN}6e6aNP2V31O9{>OV delta 182 zcmZ3(`Gq4R%s)b58Uq7^ucN0QkYY$+VPFXMjB@1xae#mch?$`{A~MR;03-+m+#rIH zv6zv8u^6bRf)R)r7#WHgL6`wV1H~DcfHV*@FcoiHaE4Kyo16Q;gs|X$1qFrwhMG$M z&Ggj%TN!EoceOG6@9$>0xtnP%qwtv{8~y{${tp6RdiT=F`7E-N6IfU#=dd^c07T|1 AQ2+n{ diff --git a/assets/voxygen/voxel/npc/skunk/male/head.vox b/assets/voxygen/voxel/npc/skunk/male/head.vox index c1a7b537f6bbae987daf7624377914ceeebb7d0b..503d7be3cbd0977c8005851ad8eb624b89db4088 100644 GIT binary patch delta 719 zcmW+yv5FKy6ns_n-kgUT7+r9P8wnD~!7YO(V~_!8o6t^;`G$j#Tfzm(fy!OdhK6XK z<`6p}wt@`}!Cv6NOO1Wf9X810L-V+f`LZ~SVeJI&4oq%v)RVcsh9%oA|(+>qQntE z>H1OP@?LmHL^va&bRw!uO`J%`BX3-S0xqFL_3MZ#_!wNmBno_lIF&buI_!m{C(Weg pd7d>Jb@P4Sf^OS}y^f6sT?;3HEoYlQ~7n*-~P27oY7e zXXm-pAo|kPhlxi1U`ccGK|YGD`0hQ2(@c*#gBi;hJrYgg8E~TK92NM*dG^i#bxd4CBZow6TD3{W zE)|=dY)zoVy<%;ddyCwf=PFriRqaJiqP9tWpFFoNwh9RMwO4M=8xpHa>@K!@_#WY# z<~g^5kRZgiYPuV-9%xEVHwPiINkkvp+z#@d6y zxYA@?D{Jq^Rq!YpyT#s=OZedvYgnvj=UfePSZ)%D0q3$@-8f$qr>Z@aE7)-|h6Q1m zm@&9gv(?eXp(74w0k3_E+}+^7+|m+R~6 x%SShlFCV`D?&agh?_Hif`QY;DCpWME@n7WL-+%sg`RmQEmp8xv{KHTA-G388;I#k% delta 841 zcmW;KJBk!R9LMqcziW2H2PS3?2Er!78VHJs!3q=T27<181Hr5hFjo)+Zy|_#1;aT; z9l}6pzcmdX>euz|s{VWb+ug&*tLxp5*4n!_`}Y*>U$*vPe{*?fzVLLMVT0?>H~XU! zcz#2(4?#vB5q;5(F9Cy3)Y+_u&?irQi@rr$(N+fi%z18AQ5o2;f;;v(AyiI`;_eoB+HBb)43Q z5<=f7CWaInffZvbmLewtPMuNL$eQzN>63ZjZj+yg-OOW3juSyn6hv4Y#yvZNoG7v= zZ7`(`K~9JU^=xqdPY80N$f8^;Oxcv4u{&N8w_p7zkGI?H`sm?DW`Ttj*@Avwb|MRY&>i_@% diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index dc0336da13..5d52cc8487 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -1,66 +1,66 @@ ({ (Pig, Male): ( head: ( - offset: (-6.0, -2.5, -4.5), + offset: (-5.0, 0.0, -4.0), central: ("npc.pig.male.head"), ), chest: ( - offset: (-5.0, -4.5, -4.5), + offset: (-5.0, -5.0, -3.5), central: ("npc.pig.male.chest"), ), tail: ( - offset: (-2.0, -1.0, -2.0), + offset: (-2.5, -3.0, -0.0), central: ("npc.pig.male.tail"), ), ), (Pig, Female):( head: ( - offset: (-6.0, -2.5, -4.5), + offset: (-5.0, 0.0, -4.0), central: ("npc.pig.female.head"), ), chest: ( - offset: (-5.0, -4.5, -4.5), + offset: (-5.0, -5.0, -3.5), central: ("npc.pig.female.chest"), ), tail: ( - offset: (-2.0, -1.0, -2.0), + offset: (-2.5, -3.0, -0.0), central: ("npc.pig.female.tail"), ), ), (Fox, Male):( head: ( - offset: (-3.5, -3.0, -3.5), + offset: (-4.5, 0.0, -3.5), central: ("npc.fox.male.head"), ), chest: ( - offset: (-1.5, -4.5, -2.5), + offset: (-2.5, -5.5, -2.5), central: ("npc.fox.male.chest"), ), tail: ( - offset: (-2.0, -7.0, -1.5), + offset: (-1.5, -11.0, -6.0), central: ("npc.fox.male.tail"), ), ), (Fox, Female):( head: ( - offset: (-3.5, -3.0, -3.5), + offset: (-4.5, 0.0, -3.5), central: ("npc.fox.female.head"), ), chest: ( - offset: (-1.5, -4.5, -2.5), + offset: (-2.5, -5.5, -3.0), central: ("npc.fox.female.chest"), ), tail: ( - offset: (-1.5, -7.0, -1.5), + offset: (-1.5, -11.0, -6.0), central: ("npc.fox.female.tail"), ), ), (Sheep, Male):( head: ( - offset: (-6.0, -5.5, -4.0), + offset: (-5.0, 0.0, -5.0), central: ("npc.sheep.male.head"), ), chest: ( @@ -75,7 +75,7 @@ (Sheep, Female):( head: ( - offset: (-5.0, -4.5, -3.5), + offset: (-5.0, 0.0, -3.5), central: ("npc.sheep.female.head"), ), chest: ( @@ -89,123 +89,123 @@ ), (Boar, Male):( head: ( - offset: (-5.5, -6.5, -4.0), + offset: (-4.5, 0.0, -5.0), central: ("npc.boar.male.head"), ), chest: ( - offset: (-3.5, -8.0, -4.0), + offset: (-4.5, -7.5, -5.5), central: ("npc.boar.male.chest"), ), tail: ( - offset: (-1.5, -2.0, -6.0), + offset: (-1.5, -5.0, -7.0), central: ("npc.boar.male.tail"), ), ), (Boar, Female):( head: ( - offset: (-5.5, -6.5, -4.0), + offset: (-4.5, 0.0, -4.5), central: ("npc.boar.female.head"), ), chest: ( - offset: (-3.5, -8.0, -4.0), + offset: (-4.5, -7.5, -5.0), central: ("npc.boar.female.chest"), ), tail: ( - offset: (-1.5, -2.0, -6.0), + offset: (-1.5, -5.0, -7.0), central: ("npc.boar.female.tail"), ), ), (Jackalope, Male):( head: ( - offset: (-3.5, -4.5, -4.5), + offset: (-3.5, 0.0, -4.0), central: ("npc.jackalope.male.head"), ), chest: ( - offset: (-1.5, -7.5, -2.5), + offset: (-2.5, -5.0, -3.5), central: ("npc.jackalope.male.chest"), ), tail: ( - offset: (-1.5, -7.5, -2.5), - central: ("armor.empty"), + offset: (-1.5, -2.0, -3.0), + central: ("npc.jackalope.male.tail"), ), ), (Jackalope, Female):( head: ( - offset: (-3.5, -4.5, -4.5), + offset: (-3.5, 0.0, -4.0), central: ("npc.jackalope.male.head"), ), chest: ( - offset: (-1.5, -7.5, -2.5), + offset: (-2.5, -5.0, -3.5), central: ("npc.jackalope.male.chest"), ), tail: ( - offset: (-1.5, -7.5, -2.5), - central: ("armor.empty"), + offset: (-1.5, -2.0, -3.0), + central: ("npc.jackalope.male.tail"), ), ), (Skunk, Male):( head: ( - offset: (-2.0, -1.0, -2.0), + offset: (-3.0,0.0, -2.5), central: ("npc.skunk.male.head"), ), chest: ( - offset: (-3.0, -4.5, -2.5), + offset: (-4.0, -5.5, -3.0), central: ("npc.skunk.male.chest"), ), tail: ( - offset: (-3.0, -10.0, -4.5), + offset: (-5.0, -11.0, -4.0), central: ("npc.skunk.male.tail"), ), ), (Skunk, Female):( head: ( - offset: (-2.0, -1.0, -2.0), + offset: (-3.0, 0.0, -2.5), central: ("npc.skunk.male.head"), ), chest: ( - offset: (-3.0, -4.5, -2.5), + offset: (-4.0, -5.5, -3.0), central: ("npc.skunk.male.chest"), ), tail: ( - offset: (-3.0, -10.0, -4.5), + offset: (-5.0, -11.0, -4.0), central: ("npc.skunk.male.tail"), ), ), (Cat, Male):( head: ( - offset: (-3.5, -3.0, -3.5), + offset: (-4.5, 0.0, -3.5), central: ("npc.cat.male.head"), ), chest: ( - offset: (-1.5, -3.0, -2.0), + offset: (-2.5, -4.5, -2.0), central: ("npc.cat.male.chest"), ), tail: ( - offset: (-0.5, -3.0, -4.0), + offset: (-0.5, -7.0, -5.0), central: ("npc.cat.male.tail"), ), ), (Cat, Female):( head: ( - offset: (-3.5, -3.0, -3.5), + offset: (-4.5, 0.0, -3.5), central: ("npc.cat.female.head"), ), chest: ( - offset: (-1.5, -3.0, -2.0), + offset: (-2.5, -4.5, -2.0), central: ("npc.cat.female.chest"), ), tail: ( - offset: (-0.5, -3.0, -4.0), + offset: (-0.5, -7.0, -5.0), central: ("npc.cat.female.tail"), ), ), (Batfox, Male):( head: ( - offset: (-9.5, -6.0, -4.0), + offset: (-7.5, 0.0, -3.0), central: ("npc.batfox.male.head"), ), chest: ( - offset: (-1.5, -7.5, -2.5), + offset: (-2.5, -7.0, -3.0), central: ("npc.batfox.male.chest"), ), tail: ( @@ -216,11 +216,11 @@ (Batfox, Female):( head: ( - offset: (-9.5, -6.0, -4.0), + offset: (-7.5, 0.0, -3.0), central: ("npc.batfox.male.head"), ), chest: ( - offset: (-1.5, -7.5, -2.5), + offset: (-2.5, -7.0, -3.0), central: ("npc.batfox.male.chest"), ), tail: ( @@ -231,71 +231,71 @@ (Raccoon, Male):( head: ( - offset: (-4.0, -4.0, -3.5), + offset: (-5.0, 0.0, -4.0), central: ("npc.raccoon.male.head"), ), chest: ( - offset: (-3.0, -5.5, -3.0), + offset: (-4.0, -6.0, -3.5), central: ("npc.raccoon.male.chest"), ), tail: ( - offset: (-1.0, -5.0, -1.5), + offset: (-2.0, -11.0, -2.5), central: ("npc.raccoon.male.tail"), ), ), (Raccoon, Female):( head: ( - offset: (-4.0, -4.0, -3.5), + offset: (-5.0, 0.0, -4.0), central: ("npc.raccoon.male.head"), ), chest: ( - offset: (-3.0, -5.5, -3.0), + offset: (-4.0, -6.0, -3.5), central: ("npc.raccoon.male.chest"), ), tail: ( - offset: (-1.0, -5.0, -1.5), + offset: (-2.0, -11.0, -2.5), central: ("npc.raccoon.male.tail"), ), ), (Quokka, Male):( head: ( - offset: (-4.5, -3.0, -4.0), + offset: (-4.5, 0.0, -3.5), central: ("npc.quokka.male.head"), ), chest: ( - offset: (-5.0, -7.5, -4.0), + offset: (-3.5, -6.5, -4.0), central: ("npc.quokka.male.chest"), ), tail: ( - offset: (-1.5, -7.5, -2.5), - central: ("armor.empty"), + offset: (-1.5, -8.0, -3.5), + central: ("npc.quokka.male.tail"), ), ), (Quokka, Female):( head: ( - offset: (-4.5, -3.0, -4.0), + offset: (-4.5, 0.0, -3.5), central: ("npc.quokka.male.head"), ), chest: ( - offset: (-5.0, -7.5, -4.0), + offset: (-3.5, -6.5, -4.0), central: ("npc.quokka.male.chest"), ), tail: ( - offset: (-1.5, -7.5, -2.5), - central: ("armor.empty"), + offset: (-1.5, -8.0, -3.5), + central: ("npc.quokka.male.tail"), ), ), (Dodarock, Male):( head: ( - offset: (-5.0, -3.5, -4.5), + offset: (-4.5, 0.0, -2.5), central: ("npc.dodarock.male.head"), ), chest: ( - offset: (-5.0, -7.5, -4.5), + offset: (-4.5, -8.0, -4.5), central: ("npc.dodarock.male.chest"), ), tail: ( @@ -306,11 +306,11 @@ (Dodarock, Female):( head: ( - offset: (-5.0, -3.5, -4.5), + offset: (-4.5, 0.0, -2.5), central: ("npc.dodarock.male.head"), ), chest: ( - offset: (-5.0, -7.5, -4.5), + offset: (-4.5, -8.0, -4.5), central: ("npc.dodarock.male.chest"), ), tail: ( @@ -321,11 +321,11 @@ ), (Holladon, Male):( head: ( - offset: (-3.5, -3.5, -4.0), + offset: (-3.5, 0.0, -4.0), central: ("npc.holladon.male.head"), ), chest: ( - offset: (-3.0, -7.5, -3.0), + offset: (-4.5, -8.0, -5.0), central: ("npc.holladon.male.chest"), ), tail: ( @@ -336,11 +336,11 @@ (Holladon, Female):( head: ( - offset: (-3.5, -3.5, -4.0), + offset: (-3.5, 0.0, -4.0), central: ("npc.holladon.male.head"), ), chest: ( - offset: (-3.0, -7.5, -3.0), + offset: (-4.5, -8.0, -5.0), central: ("npc.holladon.male.chest"), ), tail: ( @@ -351,30 +351,30 @@ (Hyena, Male):( head: ( - offset: (-3.0, -2.0, -4.0), + offset: (-4.0, 0.0, -4.0), central: ("npc.hyena.male.head"), ), chest: ( - offset: (-3.0, -8.0, -4.0), + offset: (-3.0, -8.0, -4.5), central: ("npc.hyena.male.chest"), ), tail: ( - offset: (-1.0, -3.0, -6.0), + offset: (-1.0, -4.0, -6.0), central: ("npc.hyena.male.tail"), ), ), (Hyena, Female):( head: ( - offset: (-3.0, -2.0, -4.0), + offset: (-4.0, 0.0, -4.0), central: ("npc.hyena.male.head"), ), chest: ( - offset: (-3.0, -8.0, -4.0), + offset: (-3.0, -8.0, -4.5), central: ("npc.hyena.male.chest"), ), tail: ( - offset: (-1.0, -3.0, -6.0), + offset: (-1.0, -4.0, -6.0), central: ("npc.hyena.male.tail"), ), ), diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index c84d2fe64c..20ab11c13e 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -1,48 +1,48 @@ ({ (Pig, Male): ( left_front: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.male.foot_l"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.pig.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.male.foot_r"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.pig.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.male.foot_l"), + offset: (-1.0, -2.0, -6.0), + lateral: ("npc.pig.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.male.foot_r"), + offset: (-1.0, -2.0, -6.0), + lateral: ("npc.pig.male.foot_br"), ), ), (Pig, Female): ( left_front: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.female.foot_l"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.pig.female.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.female.foot_r"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.pig.female.foot_fr"), ), left_back: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.female.foot_l"), + offset: (-1.0, -2.0, -6.0), + lateral: ("npc.pig.female.foot_bl"), ), right_back: ( - offset: (-1.0, -1.0, -1.5), - lateral: ("npc.pig.female.foot_r"), + offset: (-1.0, -2.0, -6.0), + lateral: ("npc.pig.female.foot_br"), ), ), (Fox, Male): ( left_front: ( - offset: (-1.0, -2.5, -2.5), + offset: (-1.0, -2.0, -2.5), lateral: ("npc.fox.male.foot_fl"), ), right_front: ( - offset: (-1.0, -2.5, -2.5), + offset: (-1.0, -2.0, -2.5), lateral: ("npc.fox.male.foot_fr"), ), left_back: ( @@ -56,7 +56,7 @@ ), (Fox, Female): ( left_front: ( - offset: (-1.0, -2.5, -2.5), + offset: (-1.0, -2.0, -2.5), lateral: ("npc.fox.female.foot_fl"), ), right_front: ( @@ -75,45 +75,45 @@ (Sheep, Male): ( left_front: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.male.foot_l"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.sheep.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.male.foot_r"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.sheep.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.male.foot_l"), + offset: (-1.0, -1.5, -5.5), + lateral: ("npc.sheep.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.male.foot_r"), + offset: (-1.0, -1.5, -5.5), + lateral: ("npc.sheep.male.foot_br"), ), ), (Sheep, Female): ( left_front: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.female.foot_l"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.sheep.female.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.female.foot_r"), + offset: (-1.0, -1.5, -5.0), + lateral: ("npc.sheep.female.foot_fr"), ), left_back: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.female.foot_l"), + offset: (-1.0, -1.5, -5.5), + lateral: ("npc.sheep.female.foot_bl"), ), right_back: ( - offset: (-1.0, -1.0, -3.5), - lateral: ("npc.sheep.female.foot_r"), + offset: (-1.0, -1.5, -5.5), + lateral: ("npc.sheep.female.foot_br"), ), ), (Boar, Male): ( left_front: ( - offset: (-1.5, -3.5, -4.0), + offset: (-1.5, -2.5, -4.0), lateral: ("npc.boar.male.foot_fl"), ), right_front: ( @@ -121,11 +121,11 @@ lateral: ("npc.boar.male.foot_fr"), ), left_back: ( - offset: (-1.5, -2.5, -6.0), + offset: (-1.5, -2.0, -7.0), lateral: ("npc.boar.male.foot_bl"), ), right_back: ( - offset: (-1.5, -2.5, -6.0), + offset: (-1.5, -2.0, -7.0), lateral: ("npc.boar.male.foot_br"), ), ), @@ -140,21 +140,21 @@ lateral: ("npc.boar.female.foot_fr"), ), left_back: ( - offset: (-1.5, -2.5, -6.0), + offset: (-1.5, -2.0, -7.0), lateral: ("npc.boar.female.foot_bl"), ), right_back: ( - offset: (-1.5, -2.5, -6.0), + offset: (-1.5, -2.0, -7.0), lateral: ("npc.boar.female.foot_br"), ), ), (Jackalope, Male): ( left_front: ( - offset: (-1.5, -3.5, -4.0), + offset: (-1.0, -2.0, -4.0), lateral: ("npc.jackalope.male.foot_fl"), ), right_front: ( - offset: (-1.5, -3.5, -4.0), + offset: (-1.0, -2.0, -4.0), lateral: ("npc.jackalope.male.foot_fr"), ), left_back: ( @@ -169,11 +169,11 @@ (Jackalope, Female): ( left_front: ( - offset: (-1.5, -2.5, -4.0), + offset: (-1.0, -2.0, -4.0), lateral: ("npc.jackalope.male.foot_fl"), ), right_front: ( - offset: (-1.5, -2.5, -4.0), + offset: (-1.0, -2.0, -4.0), lateral: ("npc.jackalope.male.foot_fr"), ), left_back: ( @@ -187,11 +187,11 @@ ), (Skunk, Male): ( left_front: ( - offset: (-1.0, -1.0, -3.5), + offset: (-1.5, -2.0, -4.5), lateral: ("npc.skunk.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -3.5), + offset: (-1.5, -2.0, -4.5), lateral: ("npc.skunk.male.foot_fr"), ), left_back: ( @@ -206,244 +206,244 @@ (Skunk, Female): ( left_front: ( - offset: (-1.0, -1.0, -3.5), + offset: (-1.5, -2.0, -4.5), lateral: ("npc.skunk.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -3.5), + offset: (-1.5, -2.0, -4.5), lateral: ("npc.skunk.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.0, -3.5), + offset: (-1.5, -2.0, -4.5), lateral: ("npc.skunk.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.0, -3.5), + offset: (-1.5, -2.0, -4.5), lateral: ("npc.skunk.male.foot_br"), ), ), (Cat, Male): ( left_front: ( - offset: (-1.0, -1.5, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.5, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.male.foot_fr"), ), left_back: ( - offset: (-1.0, -2.0, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.male.foot_bl"), ), right_back: ( - offset: (-1.0, -2.0, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.male.foot_br"), ), ), (Cat, Female): ( left_front: ( - offset: (-1.0, -1.5, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.female.foot_fl"), ), right_front: ( - offset: (-1.0, -1.5, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.female.foot_fr"), ), left_back: ( - offset: (-1.0, -2.0, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.female.foot_bl"), ), right_back: ( - offset: (-1.0, -2.0, -3.0), + offset: (-1.0, -1.5, -5.0), lateral: ("npc.cat.female.foot_br"), ), ), (Batfox, Male): ( left_front: ( - offset: (-1.0, -1.5, -3.0), + offset: (-2.0, -2.5, -5.0), lateral: ("npc.batfox.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.5, -3.0), + offset: (-2.0, -2.5, -5.0), lateral: ("npc.batfox.male.foot_fr"), ), left_back: ( - offset: (-1.0, -2.5, -3.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.batfox.male.foot_bl"), ), right_back: ( - offset: (-1.0, -2.5, -3.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.batfox.male.foot_br"), ), ), (Batfox, Female): ( left_front: ( - offset: (-1.0, -1.5, -2.5), + offset: (-2.0, -2.5, -5.0), lateral: ("npc.batfox.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.5, -2.5), + offset: (-2.0, -2.5, -5.0), lateral: ("npc.batfox.male.foot_fr"), ), left_back: ( - offset: (-1.0, -2.5, -3.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.batfox.male.foot_bl"), ), right_back: ( - offset: (-1.0, -2.5, -3.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.batfox.male.foot_br"), ), ), (Raccoon, Male): ( left_front: ( - offset: (-0.5, -0.5, -2.5), + offset: (-1.5, -2.0, -5.5), lateral: ("npc.raccoon.male.foot_fl"), ), right_front: ( - offset: (-0.5, -0.5, -2.5), + offset: (-1.5, -2.0, -5.5), lateral: ("npc.raccoon.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-2.0, -2.5, -6.0), lateral: ("npc.raccoon.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-2.0, -2.5, -6.0), lateral: ("npc.raccoon.male.foot_br"), ), ), (Raccoon, Female): ( left_front: ( - offset: (-0.5, -0.5, -2.5), + offset: (-1.5, -2.0, -5.5), lateral: ("npc.raccoon.male.foot_fl"), ), right_front: ( - offset: (-0.5, -0.5, -2.5), + offset: (-1.5, -2.0, -5.5), lateral: ("npc.raccoon.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-2.0, -2.5, -6.0), lateral: ("npc.raccoon.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-2.0, -2.5, -6.0), lateral: ("npc.raccoon.male.foot_br"), ), ), (Quokka, Male): ( left_front: ( - offset: (-1.0, -1.0, -2.5), + offset: (-1.0, -1.5, -5.5), lateral: ("npc.quokka.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -2.5), + offset: (-1.0, -1.5, -5.5), lateral: ("npc.quokka.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-1.0, -2.5, -5.5), lateral: ("npc.quokka.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-1.0, -2.5, -5.5), lateral: ("npc.quokka.male.foot_br"), ), ), (Quokka, Female): ( left_front: ( - offset: (-1.0, -1.0, -2.5), + offset: (-1.0, -1.5, -5.5), lateral: ("npc.quokka.male.foot_fl"), ), right_front: ( - offset: (-1.0, -1.0, -2.5), + offset: (-1.0, -1.5, -5.5), lateral: ("npc.quokka.male.foot_fr"), ), left_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-1.0, -2.5, -5.5), lateral: ("npc.quokka.male.foot_bl"), ), right_back: ( - offset: (-1.0, -1.5, -2.5), + offset: (-1.0, -2.5, -5.5), lateral: ("npc.quokka.male.foot_br"), ), ), (Dodarock, Male): ( left_front: ( - offset: (-2.0, -3.0, -4.0), + offset: (-2.0, -3.0, -6.5), lateral: ("npc.dodarock.male.foot_fl"), ), right_front: ( - offset: (-2.0, -3.0, -4.0), + offset: (-2.0, -3.0, -6.5), lateral: ("npc.dodarock.male.foot_fr"), ), left_back: ( - offset: (-1.5, -2.0, -2.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.dodarock.male.foot_bl"), ), right_back: ( - offset: (-1.5, -2.0, -2.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.dodarock.male.foot_br"), ), ), (Dodarock, Female): ( left_front: ( - offset: (-2.0, -3.0, -4.0), + offset: (-2.0, -3.0, -6.5), lateral: ("npc.dodarock.male.foot_fl"), ), right_front: ( - offset: (-2.0, -3.0, -4.0), + offset: (-2.0, -3.0, -6.5), lateral: ("npc.dodarock.male.foot_fr"), ), left_back: ( - offset: (-1.5, -2.0, -2.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.dodarock.male.foot_bl"), ), right_back: ( - offset: (-1.5, -2.0, -2.5), + offset: (-1.5, -2.0, -5.0), lateral: ("npc.dodarock.male.foot_br"), ), ), (Holladon, Male): ( left_front: ( - offset: (-1.0, -3.0, -4.0), + offset: (-1.0, -2.5, -6.0), lateral: ("npc.holladon.male.foot_fl"), ), right_front: ( - offset: (-1.0, -3.0, -4.0), + offset: (-1.0, -2.5, -6.0), lateral: ("npc.holladon.male.foot_fr"), ), left_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.5), lateral: ("npc.holladon.male.foot_bl"), ), right_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.5), lateral: ("npc.holladon.male.foot_br"), ), ), (Holladon, Female): ( left_front: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.5, -6.0), lateral: ("npc.holladon.male.foot_fl"), ), right_front: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.5, -6.0), lateral: ("npc.holladon.male.foot_fr"), ), left_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.5), lateral: ("npc.holladon.male.foot_bl"), ), right_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.5), lateral: ("npc.holladon.male.foot_br"), ), ), diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index ce01809f80..56579e72c3 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -31,7 +31,7 @@ impl Body { pub fn base_accel(&self) -> f32 { match self { Body::Humanoid(_) => 100.0, - Body::QuadrupedSmall(_) => 85.0, + Body::QuadrupedSmall(_) => 125.0, Body::QuadrupedMedium(_) => 180.0, Body::BirdMedium(_) => 80.0, Body::FishMedium(_) => 50.0, diff --git a/voxygen/src/anim/src/critter/idle.rs b/voxygen/src/anim/src/critter/idle.rs index 50a85945cc..22708a480d 100644 --- a/voxygen/src/anim/src/critter/idle.rs +++ b/voxygen/src/anim/src/critter/idle.rs @@ -58,8 +58,7 @@ impl Animation for IdleAnimation { next.feet_b.ori = Quaternion::rotation_x(0.0); next.feet_b.scale = Vec3::one(); - next.tail.offset = - Vec3::new(0.0, skeleton_attr.tail.0 + wave * 0.2, skeleton_attr.tail.1); + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0 + wave * 0.2, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_y(wave_slow * 0.05); next.tail.scale = Vec3::one(); diff --git a/voxygen/src/anim/src/critter/run.rs b/voxygen/src/anim/src/critter/run.rs index 9712445494..120277f76b 100644 --- a/voxygen/src/anim/src/critter/run.rs +++ b/voxygen/src/anim/src/critter/run.rs @@ -46,8 +46,7 @@ impl Animation for RunAnimation { next.feet_b.ori = Quaternion::rotation_x(wave_cos * 1.0); next.feet_b.scale = Vec3::one(); - next.tail.offset = - Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1); + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1); next.tail.ori = Quaternion::rotation_y(wave_slow * 0.08); next.tail.scale = Vec3::one(); diff --git a/voxygen/src/anim/src/dragon/mod.rs b/voxygen/src/anim/src/dragon/mod.rs index a49446e606..5a4ec4bbf5 100644 --- a/voxygen/src/anim/src/dragon/mod.rs +++ b/voxygen/src/anim/src/dragon/mod.rs @@ -79,8 +79,16 @@ impl Skeleton for DragonSkeleton { ), FigureBoneData::new(chest_front_mat * self.foot_fl.compute_base_matrix()), FigureBoneData::new(chest_front_mat * self.foot_fr.compute_base_matrix()), - FigureBoneData::new(chest_front_mat * self.chest_rear.compute_base_matrix() * self.foot_bl.compute_base_matrix()), - FigureBoneData::new(chest_front_mat * self.chest_rear.compute_base_matrix() * self.foot_br.compute_base_matrix()), + FigureBoneData::new( + chest_front_mat + * self.chest_rear.compute_base_matrix() + * self.foot_bl.compute_base_matrix(), + ), + FigureBoneData::new( + chest_front_mat + * self.chest_rear.compute_base_matrix() + * self.foot_br.compute_base_matrix(), + ), FigureBoneData::default(), ], Vec3::default(), diff --git a/voxygen/src/anim/src/dragon/run.rs b/voxygen/src/anim/src/dragon/run.rs index 343578127e..255349dd7a 100644 --- a/voxygen/src/anim/src/dragon/run.rs +++ b/voxygen/src/anim/src/dragon/run.rs @@ -26,8 +26,7 @@ impl Animation for RunAnimation { let short = (((1.0) / (0.72 + 0.28 - * ((anim_time as f32 * 16.0 * lab as f32+ PI * 1.0).sin()) - .powf(2.0 as f32))) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.0).sin()).powf(2.0 as f32))) .sqrt()) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.0).sin()); @@ -36,7 +35,7 @@ impl Animation for RunAnimation { let shortalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.5).sin(); let footvert = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.0).sin(); - let footvertt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); + let footvertt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); let footvertalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.2).sin(); let footverttalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.6).sin(); @@ -87,18 +86,18 @@ impl Animation for RunAnimation { let centeroffset = (anim_time as f32 * lab as f32 + PI * 1.5).sin(); next.head_upper.offset = - Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); - next.head_upper.ori = Quaternion::rotation_x(short * -0.03 - 0.1) - * Quaternion::rotation_z(tilt * -1.2) - * Quaternion::rotation_y(tilt * 0.8); - next.head_upper.scale = Vec3::one(); + Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); + next.head_upper.ori = Quaternion::rotation_x(short * -0.03 - 0.1) + * Quaternion::rotation_z(tilt * -1.2) + * Quaternion::rotation_y(tilt * 0.8); + next.head_upper.scale = Vec3::one(); - next.head_lower.offset = - Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); - next.head_lower.ori = Quaternion::rotation_z(tilt * -0.8) - * Quaternion::rotation_x(short * -0.05) - * Quaternion::rotation_y(tilt * 0.3); - next.head_lower.scale = Vec3::one() * 1.02; + next.head_lower.offset = + Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); + next.head_lower.ori = Quaternion::rotation_z(tilt * -0.8) + * Quaternion::rotation_x(short * -0.05) + * Quaternion::rotation_y(tilt * 0.3); + next.head_lower.scale = Vec3::one() * 1.02; next.jaw.offset = Vec3::new( 0.0, @@ -129,7 +128,8 @@ impl Animation for RunAnimation { next.chest_front.offset = Vec3::new( 0.0, skeleton_attr.chest_front.0, - skeleton_attr.chest_front.1 + shortalt * 2.5 + x_tilt * 10.0,); + skeleton_attr.chest_front.1 + shortalt * 2.5 + x_tilt * 10.0, + ); next.chest_front.ori = Quaternion::rotation_x(short * 0.13 + x_tilt) * Quaternion::rotation_y(0.0) * Quaternion::rotation_z(tilt * -1.5); diff --git a/voxygen/src/anim/src/quadruped_small/idle.rs b/voxygen/src/anim/src/quadruped_small/idle.rs index 2e23f6b3c3..d32c14a128 100644 --- a/voxygen/src/anim/src/quadruped_small/idle.rs +++ b/voxygen/src/anim/src/quadruped_small/idle.rs @@ -22,7 +22,6 @@ impl Animation for IdleAnimation { let mut next = (*skeleton).clone(); let slow = (anim_time as f32 * 3.5).sin(); - let slowa = (anim_time as f32 * 3.5 + PI / 2.0).sin(); let slow_alt = (anim_time as f32 * 3.5 + PI).sin(); @@ -39,50 +38,51 @@ impl Animation for IdleAnimation { * 0.25, ); - next.head.offset = - Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 0.2); + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + slow * 0.2); next.head.ori = Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y + slow_alt * 0.03); next.head.scale = Vec3::one(); - next.chest.offset = Vec3::new( - slow * 0.05, - skeleton_attr.chest.0, - skeleton_attr.chest.1 + slowa * 0.2, - ) / 11.0; + next.chest.offset = Vec3::new(slow * 0.05, skeleton_attr.chest.0, skeleton_attr.chest.1) + / 11.0 + * skeleton_attr.scaler; next.chest.ori = Quaternion::rotation_y(slow * 0.05); - next.chest.scale = Vec3::one() / 11.0; + next.chest.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; next.leg_fl.offset = Vec3::new( -skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2, + skeleton_attr.feet_f.2 + slow * -0.2, ); - next.leg_fl.ori = Quaternion::rotation_x(slow * 0.08); + next.leg_fl.ori = + Quaternion::rotation_x(slow * 0.03) * Quaternion::rotation_y(slow * -0.05); next.leg_fl.scale = Vec3::one(); next.leg_fr.offset = Vec3::new( skeleton_attr.feet_f.0, skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2, + skeleton_attr.feet_f.2 + slow * 0.2, ); - next.leg_fr.ori = Quaternion::rotation_x(slow_alt * 0.08); + next.leg_fr.ori = + Quaternion::rotation_x(slow_alt * 0.03) * Quaternion::rotation_y(slow * -0.05); next.leg_fr.scale = Vec3::one(); next.leg_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2, + skeleton_attr.feet_b.2 + slow * -0.2, ); - next.leg_bl.ori = Quaternion::rotation_x(slow_alt * 0.08); + next.leg_bl.ori = + Quaternion::rotation_x(slow_alt * 0.03) * Quaternion::rotation_y(slow * -0.05); next.leg_bl.scale = Vec3::one(); next.leg_br.offset = Vec3::new( skeleton_attr.feet_b.0, skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2, + skeleton_attr.feet_b.2 + slow * 0.2, ); - next.leg_br.ori = Quaternion::rotation_x(slow * 0.08); + next.leg_br.ori = + Quaternion::rotation_x(slow * 0.03) * Quaternion::rotation_y(slow * -0.05); next.leg_br.scale = Vec3::one(); next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index f5bb4cb613..a9104211b1 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -75,6 +75,11 @@ pub struct SkeletonAttr { feet_f: (f32, f32, f32), feet_b: (f32, f32, f32), tail: (f32, f32), + scaler: f32, + tempo: f32, + maximize: f32, + minimize: f32, + spring: f32, } impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { type Error = (); @@ -95,6 +100,11 @@ impl Default for SkeletonAttr { feet_f: (0.0, 0.0, 0.0), feet_b: (0.0, 0.0, 0.0), tail: (0.0, 0.0), + scaler: 0.0, + tempo: 0.0, + maximize: 0.0, + minimize: 0.0, + spring: 0.0, } } } @@ -105,78 +115,153 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { Self { head: match (body.species, body.body_type) { (Pig, _) => (5.0, 2.0), - (Fox, _) => (7.0, 3.0), - (Sheep, _) => (9.0, 3.0), - (Boar, _) => (12.0, 3.0), - (Jackalope, _) => (5.0, 4.0), - (Skunk, _) => (6.0, 4.0), - (Cat, _) => (6.0, 3.0), - (Batfox, _) => (7.0, 4.0), - (Raccoon, _) => (8.0, 2.0), - (Quokka, _) => (9.0, 5.0), - (Dodarock, _) => (7.0, 4.0), - (Holladon, _) => (7.0, 3.0), + (Fox, _) => (4.0, 3.0), + (Sheep, _) => (4.0, 4.0), + (Boar, _) => (7.0, 0.0), + (Jackalope, _) => (3.0, 2.0), + (Skunk, _) => (5.0, 1.5), + (Cat, _) => (4.0, 3.0), + (Batfox, _) => (5.0, 1.0), + (Raccoon, _) => (5.0, 2.0), + (Quokka, _) => (6.0, 2.0), + (Dodarock, _) => (6.0, -2.0), + (Holladon, _) => (7.0, 1.0), (Hyena, _) => (7.5, 2.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 7.0), - (Fox, _) => (0.0, 5.0), - (Sheep, _) => (-1.0, 6.0), - (Boar, _) => (0.0, 8.5), + (Fox, _) => (0.0, 8.0), + (Sheep, _) => (2.0, 7.0), + (Boar, _) => (0.0, 9.5), (Jackalope, _) => (-2.0, 6.0), (Skunk, _) => (0.0, 6.0), (Cat, _) => (0.0, 6.0), (Batfox, _) => (-2.0, 6.0), - (Raccoon, _) => (0.0, 6.0), - (Quokka, _) => (2.0, 8.0), - (Dodarock, _) => (-2.0, 8.0), - (Holladon, _) => (-2.0, 6.0), + (Raccoon, _) => (0.0, 5.5), + (Quokka, _) => (2.0, 6.5), + (Dodarock, _) => (-2.0, 9.0), + (Holladon, _) => (-2.0, 9.0), (Hyena, _) => (-2.0, 9.0), }, feet_f: match (body.species, body.body_type) { - (Pig, _) => (3.5, 3.0, -5.5), - (Fox, _) => (2.5, 3.0, -2.0), - (Sheep, _) => (3.5, 2.0, -2.5), - (Boar, _) => (3.5, 4.0, -4.5), - (Jackalope, _) => (2.0, 4.0, -2.0), - (Skunk, _) => (2.0, 2.0, -2.0), - (Cat, _) => (2.0, 4.0, -3.0), - (Batfox, _) => (1.5, 4.0, -3.0), - (Raccoon, _) => (2.0, 4.0, -3.0), - (Quokka, _) => (2.0, 4.0, -3.0), - (Dodarock, _) => (2.5, 4.0, -2.0), - (Holladon, _) => (2.0, 4.0, -2.0), - (Hyena, _) => (2.5, 4.0, -4.0), + (Pig, _) => (4.5, 3.0, -2.0), + (Fox, _) => (3.0, 5.0, -5.0), + (Sheep, _) => (3.5, 2.0, -2.0), + (Boar, _) => (3.5, 6.0, -5.5), + (Jackalope, _) => (3.0, 4.0, -2.0), + (Skunk, _) => (3.5, 4.0, -1.0), + (Cat, _) => (2.0, 4.0, -1.0), + (Batfox, _) => (3.0, 4.0, -0.5), + (Raccoon, _) => (4.0, 4.0, -0.0), + (Quokka, _) => (3.0, 4.0, -1.0), + (Dodarock, _) => (5.0, 5.0, -2.5), + (Holladon, _) => (5.0, 4.0, -2.5), + (Hyena, _) => (2.5, 5.0, -4.0), }, feet_b: match (body.species, body.body_type) { - (Pig, _) => (2.0, -2.0, -5.5), - (Fox, _) => (1.5, -2.0, -1.0), - (Sheep, _) => (3.5, -4.0, -2.5), - (Boar, _) => (2.0, -3.0, -2.5), - (Jackalope, _) => (2.0, -2.0, 0.0), - (Skunk, _) => (1.0, -4.0, -2.5), - (Cat, _) => (1.5, -2.0, -3.0), - (Batfox, _) => (2.0, -2.0, -2.5), - (Raccoon, _) => (2.5, -2.0, -3.5), - (Quokka, _) => (2.5, -4.0, -3.5), - (Dodarock, _) => (2.0, -3.0, -5.5), - (Holladon, _) => (3.5, -2.0, -3.5), + (Pig, _) => (3.5, -2.0, -1.5), + (Fox, _) => (3.0, -3.0, -5.0), + (Sheep, _) => (3.5, -3.5, -2.0), + (Boar, _) => (3.0, -3.0, -2.5), + (Jackalope, _) => (3.5, -2.0, 0.0), + (Skunk, _) => (3.5, -4.0, -1.5), + (Cat, _) => (2.0, -3.5, -1.0), + (Batfox, _) => (3.5, -2.0, -0.5), + (Raccoon, _) => (4.5, -3.0, 0.5), + (Quokka, _) => (4.0, -4.0, -1.0), + (Dodarock, _) => (3.5, -3.0, -4.0), + (Holladon, _) => (4.0, -2.0, -3.0), (Hyena, _) => (3.0, -5.0, -4.5), }, tail: match (body.species, body.body_type) { - (Pig, _) => (-4.0, 3.0), - (Fox, _) => (-3.5, 1.0), + (Pig, _) => (-4.5, 2.5), + (Fox, _) => (-4.5, 2.0), (Sheep, _) => (-5.0, 0.0), - (Boar, _) => (-8.5, 2.0), - (Jackalope, _) => (0.0, 5.0), + (Boar, _) => (-6.0, 0.0), + (Jackalope, _) => (-4.0, 2.0), (Skunk, _) => (-3.0, 1.5), - (Cat, _) => (-3.0, 2.0), + (Cat, _) => (-3.5, 2.0), (Batfox, _) => (0.0, 5.0), (Raccoon, _) => (-4.0, 1.0), - (Quokka, _) => (0.0, 6.0), + (Quokka, _) => (-6.0, 1.0), (Dodarock, _) => (0.0, 5.0), - (Holladon, _) => (0.0, 4.0), - (Hyena, _) => (-8.0, 1.0), + (Holladon, _) => (-1.0, 4.0), + (Hyena, _) => (-7.0, 0.0), + }, + scaler: match (body.species, body.body_type) { + (Pig, _) => (0.9), + (Fox, _) => (0.9), + (Sheep, _) => (1.0), + (Boar, _) => (1.1), + (Jackalope, _) => (0.8), + (Skunk, _) => (0.9), + (Cat, _) => (0.8), + (Batfox, _) => (1.1), + (Raccoon, _) => (1.0), + (Quokka, _) => (1.0), + (Dodarock, _) => (1.2), + (Holladon, _) => (1.4), + (Hyena, _) => (0.8), + }, + tempo: match (body.species, body.body_type) { + (Pig, _) => (1.0), + (Fox, _) => (1.0), + (Sheep, _) => (1.0), + (Boar, _) => (1.1), + (Jackalope, _) => (1.0), + (Skunk, _) => (1.0), + (Cat, _) => (1.1), + (Batfox, _) => (1.0), + (Raccoon, _) => (1.0), + (Quokka, _) => (1.2), + (Dodarock, _) => (1.0), + (Holladon, _) => (1.0), + (Hyena, _) => (1.1), + }, + maximize: match (body.species, body.body_type) { + (Pig, _) => (1.0), + (Fox, _) => (1.3), + (Sheep, _) => (1.1), + (Boar, _) => (1.4), + (Jackalope, _) => (1.0), + (Skunk, _) => (1.0), + (Cat, _) => (1.0), + (Batfox, _) => (1.0), + (Raccoon, _) => (1.0), + (Quokka, _) => (1.0), + (Dodarock, _) => (1.0), + (Holladon, _) => (1.0), + (Hyena, _) => (1.4), + }, + minimize: match (body.species, body.body_type) { + (Pig, _) => (0.6), + (Fox, _) => (1.3), + (Sheep, _) => (0.8), + (Boar, _) => (1.0), + (Jackalope, _) => (1.0), + (Skunk, _) => (0.9), + (Cat, _) => (0.8), + (Batfox, _) => (1.0), + (Raccoon, _) => (1.0), + (Quokka, _) => (0.9), + (Dodarock, _) => (0.9), + (Holladon, _) => (0.7), + (Hyena, _) => (1.4), + }, + spring: match (body.species, body.body_type) { + (Pig, _) => (1.0), + (Fox, _) => (1.0), + (Sheep, _) => (1.2), + (Boar, _) => (0.8), + (Jackalope, _) => (2.2), + (Skunk, _) => (1.0), + (Cat, _) => (1.4), + (Batfox, _) => (1.1), + (Raccoon, _) => (1.1), + (Quokka, _) => (1.3), + (Dodarock, _) => (0.9), + (Holladon, _) => (0.7), + (Hyena, _) => (1.4), }, } } diff --git a/voxygen/src/anim/src/quadruped_small/run.rs b/voxygen/src/anim/src/quadruped_small/run.rs index 81812915c1..861c295211 100644 --- a/voxygen/src/anim/src/quadruped_small/run.rs +++ b/voxygen/src/anim/src/quadruped_small/run.rs @@ -14,46 +14,24 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, + (_velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let speed = Vec2::::from(velocity).magnitude(); - - let slow = (anim_time as f32 * 14.0).sin(); - let fast = (anim_time as f32 * 20.0).sin(); - let fast_alt = (anim_time as f32 * 20.0 + PI / 2.0).sin(); - let slow_alt = (anim_time as f32 * 14.0 + PI / 2.0).sin(); - let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()).max(-0.7); - let lab = 0.6; //6 - let speedmult = if speed > 8.0 { - 1.2 * (1.0) - } else { - 0.8 * (1.0) - }; - let abssin = (((anim_time as f32 * 5.0 * speedmult + PI * 1.6).sin().abs()) - 0.2).abs().max(-0.2); - let abssint = (((anim_time as f32 * 5.0 * speedmult).sin().abs()) - 0.2).abs().max(-0.2); - let shortalt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.5).sin(); + let speedmult = skeleton_attr.tempo; + let short = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.0).sin(); + let shortalt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.5).sin(); let footvert = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.0).sin(); let footvertt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.4).sin(); - let footvertalt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.2).sin(); - let footverttalt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.6).sin(); let footvertf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.3).sin(); let footverttf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.7).sin(); - let footvertaltf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.5).sin(); - let footverttaltf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.9).sin(); - - let footvertfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.6).sin(); - let footverttfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.0).sin(); - let footvertaltfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.8).sin(); - let footverttaltfslow = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 2.2).sin(); let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -70,9 +48,8 @@ impl Animation for RunAnimation { } * 1.3; let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); - next.head.offset = - Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + abssint * 2.0); - next.head.ori = Quaternion::rotation_x(0.2 + slow * 0.05 + x_tilt * -0.5) + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.ori = Quaternion::rotation_x(x_tilt * -0.5 + short * -0.2) * Quaternion::rotation_y(tilt * 0.8) * Quaternion::rotation_z(tilt * -1.2); next.head.scale = Vec3::one(); @@ -80,55 +57,60 @@ impl Animation for RunAnimation { next.chest.offset = Vec3::new( 0.0, skeleton_attr.chest.0, - skeleton_attr.chest.1 + abssin * 8.0 + x_tilt * 6.0, - ) / 11.0; - next.chest.ori = Quaternion::rotation_x(abssin * 0.5 - 0.2 + x_tilt) - * Quaternion::rotation_y(tilt * 0.8) - * Quaternion::rotation_z(tilt * -1.5); - next.chest.scale = Vec3::one() / 11.0; + skeleton_attr.chest.1 + + 2.0 * skeleton_attr.spring + + shortalt * 3.0 * skeleton_attr.spring, + ) / 11.0 + * skeleton_attr.scaler; + next.chest.ori = Quaternion::rotation_x(short * 0.2 * skeleton_attr.spring + x_tilt) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(tilt * -1.5); + next.chest.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; next.leg_fl.offset = Vec3::new( -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1 + footvertaltf * -1.3, - skeleton_attr.feet_f.2 + 1.0 + footverttaltf * -1.9, + skeleton_attr.feet_f.1 + footverttf * 3.0 * skeleton_attr.maximize, + skeleton_attr.feet_f.2 + ((footvertf * -1.5).max(-1.0)), ); - next.leg_fl.ori = Quaternion::rotation_x(footverttaltf * -0.65) + next.leg_fl.ori = Quaternion::rotation_x(skeleton_attr.minimize * footverttf * 0.5) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); next.leg_fl.scale = Vec3::one() * 1.02; next.leg_fr.offset = Vec3::new( skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1 + footvertaltf * -1.3, - skeleton_attr.feet_f.2 + 1.0 + footvertaltf * -1.9, + skeleton_attr.feet_f.1 + footvertt * 3.0 * skeleton_attr.minimize, + skeleton_attr.feet_f.2 + ((footvert * -1.5).max(-1.0)), ); - next.leg_fr.ori = Quaternion::rotation_x(footvertaltf * -0.65) + next.leg_fr.ori = Quaternion::rotation_x(skeleton_attr.maximize * footvertt * 0.5) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); next.leg_fr.scale = Vec3::one() * 1.02; next.leg_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1 + footvert * -1.7, - skeleton_attr.feet_b.2 + 1.0 + footvertt * -1.5, + skeleton_attr.feet_b.1 + footvertt * -1.4, + skeleton_attr.feet_b.2 + ((footvert * 1.5).max(-1.0)), ); - next.leg_bl.ori = Quaternion::rotation_x(footvertt * -0.45 - 0.2) + next.leg_bl.ori = Quaternion::rotation_x(skeleton_attr.maximize * footvertt * -0.6) * Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_z(tilt * -1.5); next.leg_bl.scale = Vec3::one() * 1.02; next.leg_br.offset = Vec3::new( skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1 + footvertt * -1.7, - skeleton_attr.feet_b.2 + 1.0 + footvertt * -1.5, + skeleton_attr.feet_b.1 + footverttf * -1.4, + skeleton_attr.feet_b.2 + ((footvertf * 1.5).max(-1.0)), ); - next.leg_br.ori = Quaternion::rotation_x(footvertt * -0.45 - 0.2) + next.leg_br.ori = Quaternion::rotation_x(skeleton_attr.maximize * footverttf * -0.6) * Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_z(tilt * -1.5); next.leg_br.scale = Vec3::one() * 1.02; next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); - next.tail.ori = Quaternion::rotation_z(0.0); + next.tail.ori = Quaternion::rotation_x(short * 0.2 + x_tilt) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(tilt * 1.5); next.tail.scale = Vec3::one(); next } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index a2e139ba0c..923abac39b 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -1340,25 +1340,21 @@ impl FigureMgr { physics.in_fluid, // In water ) { // Standing - (true, false, false) => { - anim::dragon::IdleAnimation::update_skeleton( - &DragonSkeleton::new(), - time, - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ) - }, + (true, false, false) => anim::dragon::IdleAnimation::update_skeleton( + &DragonSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), // Running - (true, true, false) => { - anim::dragon::RunAnimation::update_skeleton( - &DragonSkeleton::new(), - (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ) - }, + (true, true, false) => anim::dragon::RunAnimation::update_skeleton( + &DragonSkeleton::new(), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), // In air (false, _, false) => anim::dragon::FlyAnimation::update_skeleton( &DragonSkeleton::new(), From 9a4415509c84145622ad2ccb4c245901616bbea0 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Mon, 27 Jul 2020 22:20:13 -0400 Subject: [PATCH 04/12] catoblepas, bonerattler, rabbit, improved anims --- assets/common/npc_names.json | 12 ++ .../voxel/npc/bonerattler/male/foot_bl.vox | Bin 0 -> 1444 bytes .../voxel/npc/bonerattler/male/foot_br.vox | Bin 0 -> 1444 bytes .../voxel/npc/bonerattler/male/foot_fl.vox | Bin 0 -> 1520 bytes .../voxel/npc/bonerattler/male/foot_fr.vox | Bin 0 -> 1520 bytes .../voxel/npc/bonerattler/male/head_lower.vox | Bin 0 -> 1776 bytes .../voxel/npc/bonerattler/male/head_upper.vox | Bin 0 -> 2560 bytes .../voxel/npc/bonerattler/male/jaw.vox | Bin 0 -> 1564 bytes .../voxel/npc/bonerattler/male/leg_bl.vox | Bin 0 -> 1360 bytes .../voxel/npc/bonerattler/male/leg_br.vox | Bin 0 -> 1360 bytes .../voxel/npc/bonerattler/male/leg_fl.vox | Bin 0 -> 1360 bytes .../voxel/npc/bonerattler/male/leg_fr.vox | Bin 0 -> 1360 bytes .../voxel/npc/bonerattler/male/tail.vox | Bin 0 -> 2256 bytes .../voxel/npc/bonerattler/male/torso_back.vox | Bin 0 -> 4252 bytes .../npc/bonerattler/male/torso_front.vox | Bin 0 -> 5600 bytes .../voxel/npc/catoblepas/male/foot_bl.vox | Bin 0 -> 1584 bytes .../voxel/npc/catoblepas/male/foot_br.vox | Bin 0 -> 1584 bytes .../voxel/npc/catoblepas/male/foot_fl.vox | Bin 0 -> 1984 bytes .../voxel/npc/catoblepas/male/foot_fr.vox | Bin 0 -> 1984 bytes .../voxel/npc/catoblepas/male/head_lower.vox | Bin 0 -> 3048 bytes .../voxel/npc/catoblepas/male/head_upper.vox | Bin 0 -> 2992 bytes .../voxygen/voxel/npc/catoblepas/male/jaw.vox | Bin 0 -> 1760 bytes .../voxel/npc/catoblepas/male/leg_bl.vox | Bin 0 -> 1612 bytes .../voxel/npc/catoblepas/male/leg_br.vox | Bin 0 -> 1612 bytes .../voxel/npc/catoblepas/male/leg_fl.vox | Bin 0 -> 2224 bytes .../voxel/npc/catoblepas/male/leg_fr.vox | Bin 0 -> 2224 bytes .../voxel/npc/catoblepas/male/tail.vox | Bin 0 -> 1696 bytes .../voxel/npc/catoblepas/male/torso_back.vox | Bin 0 -> 3968 bytes .../voxel/npc/catoblepas/male/torso_front.vox | Bin 0 -> 14056 bytes .../voxygen/voxel/npc/rabbit/male/chest.vox | Bin 0 -> 2000 bytes .../voxygen/voxel/npc/rabbit/male/foot_bl.vox | Bin 0 -> 1208 bytes .../voxygen/voxel/npc/rabbit/male/foot_br.vox | Bin 0 -> 1208 bytes .../voxygen/voxel/npc/rabbit/male/foot_fl.vox | Bin 0 -> 1148 bytes .../voxygen/voxel/npc/rabbit/male/foot_fr.vox | Bin 0 -> 1148 bytes assets/voxygen/voxel/npc/rabbit/male/head.vox | Bin 0 -> 1760 bytes assets/voxygen/voxel/npc/rabbit/male/tail.vox | Bin 0 -> 1156 bytes .../quadruped_medium_central_manifest.ron | 120 ++++++++++++++++ .../quadruped_medium_lateral_manifest.ron | 136 ++++++++++++++++++ .../quadruped_small_central_manifest.ron | 28 ++++ .../quadruped_small_lateral_manifest.ron | 52 +++++-- common/src/comp/body/quadruped_medium.rs | 10 +- common/src/comp/body/quadruped_small.rs | 6 +- voxygen/src/anim/src/quadruped_low/run.rs | 14 +- voxygen/src/anim/src/quadruped_medium/idle.rs | 2 +- voxygen/src/anim/src/quadruped_medium/mod.rs | 30 ++++ voxygen/src/anim/src/quadruped_small/jump.rs | 6 +- voxygen/src/anim/src/quadruped_small/mod.rs | 22 ++- voxygen/src/anim/src/quadruped_small/run.rs | 13 +- 48 files changed, 420 insertions(+), 31 deletions(-) create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/leg_bl.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/leg_br.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/leg_fl.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/bonerattler/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/leg_bl.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/leg_br.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/leg_fl.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/catoblepas/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/head.vox create mode 100644 assets/voxygen/voxel/npc/rabbit/male/tail.vox diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index ebfc47948a..320c078280 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -278,6 +278,14 @@ "mouflon": { "keyword": "mouflon", "generic": "Mouflon" + }, + "catoblepas": { + "keyword": "catoblepas", + "generic": "Catoblepas" + }, + "bonerattler": { + "keyword": "bonerattler", + "generic": "Bonerattler" } } }, @@ -441,6 +449,10 @@ "hyena": { "keyword": "hyena", "generic": "Hyena" + }, + "rabbit": { + "keyword": "rabbit", + "generic": "Rabbit" } } }, diff --git a/assets/voxygen/voxel/npc/bonerattler/male/foot_bl.vox b/assets/voxygen/voxel/npc/bonerattler/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..3a148316bae1422ddfa2b8bb9845b3be6d998495 GIT binary patch literal 1444 zcmds1J5B>p4D^isU<-=$2?D_pXlN(`LMU1R5=an8!*%vkP;r6uxj>|xfU~59hJDOZ zlZpngG#Yzt&$D-*_U?MR|6*pB8TD!0k;~F)RQWBs_1N88t8S%+5#O7szJddf7{+%e$Xls z@1eYd6$6>%d$>lUsaF8%AR0P4BWeQKG#AL0pcsv522+naT6Z>tHPHNkVj{z(EiJlL zEp4D^isU<-=$2?D_pXlN(`LMU1R5=an8!*%vkP;r6uxj>|xfU~59hJDOZ zlZpngG#Yzt&$D-*_U?MR|6*pB8TD!0k;~F)RQWBs_1N88t8S%+5#O7szJddf7{+%e$Xls z@1eYd6$6>%d$>lUsaF8%AR0P4BWeQKG#AL0pcsv522+naT6Z>tHPHNkVj{z(EiJlL zEQ&dL`_;7O`t!}}do#PdSbUPPpULcMar@y_bF}2zOQ92PzTPgr zLqzMF;NgRJ)<Fw&auK|*##u1HjOqzg)@7{oruHH%6k7V|7b^ZErHzYFckuV5XpRZTn zAR_r9c=+UljWO743u|219MU%0Pmb0?8e!EQ$OelOIXZvX<7iB*2rmrJ9xOIsc6i2s zkqgY!Sr?D6%)o6Z4!4Pea)YjUCImFaGcLto^#V`S0gnE|+(j;rZ!ldvSKwUY(z} l^~J@VYTcK&@vqNuI2_u3zi+$U?yui#v)Q!mcH8<7;5SoKF3Rv5|qFp1# zz+X9YHMGiL2kmT5tcs?gU9opG9iO6wxenoN=lBM>IX;HJOPNw*G|jMFk5L6J zDcIp_wfUirY*al~@u{Fy&?xW7sFQj*U^HiVew`Vx!dJnyo;9)7t`O#D)R^31;*K z3Irrr?_2LR1SFW{z`}X#~umAM)^g%VeJUN+Pot@2Z&d=w? l#l?fP9?RSK*X!7BxASJRneXoI{(4`l)oNa^*K_}G{Q)|JN)-SA literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/head_upper.vox b/assets/voxygen/voxel/npc/bonerattler/male/head_upper.vox new file mode 100644 index 0000000000000000000000000000000000000000..4b2c954e8b0a79e97010ec7f4b83cdd296f9e282 GIT binary patch literal 2560 zcmds%KaN~Q5XQUfZ_n%?Irmyd_y{B<1O}n?Y6VCjA!FZxe2(y5znBYbz86@uC*UY( z)0u>M{CXf{BPZaIT3xTJtNN?@zM7xDfBWgLrIc@9Uw_9|{@9fAp#owi~w2zLSHp%CC|1^>E3IQPqK^EeZ?1B>)PVvtm3v*i%B$>rrZyks_K%V zJq4VZCnLVPEQw!Kd&90~bDDP_e%CGyobGdk9Kw}*l{dVH+AQi_$g5f=lQI?KO(B;M z7k*WgeBp0u#G9r%Hh^0x0p3@Rc}X!H??H9 z*`>~Qj^{p@6+7vNZ+)%Q6FK_eYnt>%&qd&`qU9QkQeVZc*p>4@%SLU+T_cClFQaCo zCxNCCJ>^+XG9|g1!|mV~9!;4!xNym1z-OS1(3lepNxVg@N&RW?M_j^P8MA@*jh;FE z3-sdXAmGd!xIIsy+0&v2+G}VbnURo6e6$9a4ZR1t3-Y)|XIRk(9Mk&{xTlt&Pwo7! zFFJ5CpGuvc<6WDL88hB+cry65(Nm9E;7pklBcF+PBZtxxWjBpQ5?zgWI5gf<`k>@e zaw+l33@dZ4TR&EKQ2L+)4{^#Hk$$Dju981;_`pR!+t3>C$?(HNa#wjz2kwlcp64E% z;YagaO=4AvlX~KF>^!OF(KJ_QndKVr>k-EsJKrL4^zf4hd=cwsU5(taT9R*94hd!| zJUF&6x3Z=8%@!MTf-Yn;W)!`_pKMu;|2b?!Z;F)qYmI{pFv0xZnWS^xk5 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/jaw.vox b/assets/voxygen/voxel/npc/bonerattler/male/jaw.vox new file mode 100644 index 0000000000000000000000000000000000000000..d63349abbf680bf35e8f5382e3123b4ad92a2af7 GIT binary patch literal 1564 zcmds%O>PrG5QVE=RrdsmMfPzNlpKK#8x{c}%d#L6NGLz&VBsT-XVzT6dtbnkPrv~< zg_qf(<{Q>{l?`O1Pw!QAb@kM=<*zrlufChv$Lqx>#7?T&m&N^ums7yg!3#*Zy}Muh zbPUfoQ1vk&tFKjjPdU>Ag*YU z4JEt}@>f`5+pn% zDDaS=#6yC6uqRdl31y0l@hxmjP&MudUzxSTcg&7@r$;Y(ENDSJQ20E5cm3zGx!>h- z*^Y5}dU|y2*q-N-|6#A&uZM^Ke*W2P_M{o!oSn6|=jZMH#YJ0QT|KGSbNOxj>vJ3q YhqmAE+ith}>wRrDo3`C<+w>p*8@Dzr3IG5A literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/leg_bl.vox b/assets/voxygen/voxel/npc/bonerattler/male/leg_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..adcca3533575ff81f9cd17c903e0844786db36e7 GIT binary patch literal 1360 zcmds1J5B>J6nrzbsZyj*q9Aev8VV>9giy2sB#=-@PGrk97ubF;u+pA@v*ZTIj8l^; z4aCyuy?LKmk9M{1FPqCxGkaRDpB3yjn7ysH52H$SoNytiY@3hmdITjpD*?eW;S-IS zhD2DRvq)Nk6KE0eSt8Mtn-}+*QKY#f(a2C|eMUfn7o0$-hiu~J6vY`3DNgk%4thPu ziMxbA?FvpHlX*r{Zlrdo8G+0OCoS!;-pOSg_PutcQFTx~AOq5Y<`k(2`GWkxRIm32 zqSaoIZ}0N!<7z2yhto7oIfkq8_-OCg&bidT?7DpKcK_c0bUHoB!_8z;?q;)cKcAOo iu{cTVT)vIJ?qk2-mth!6-}k@1ueNPV*L9`-0Db^AhYxN5 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/leg_br.vox b/assets/voxygen/voxel/npc/bonerattler/male/leg_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..cf8a24a15a71f3b16df1680a30be1d849971a59c GIT binary patch literal 1360 zcmds1F;2rk5Zsx&qe_uJiGs)zXegja5JHg!NFbq*yvV1k`G9+Wz>;6UTl@ob%%#Rv z8puhb-Pzq)-^iBVUv`(DX7;q+J}cO5FninXA0~z9IN?H2*>)fM?F346HUfergO6rR zV$onxg4$>iPN3C*PgIS{>BYTf6ty`rD26iY69OW<-~>WFB#P51id#T!;->Z z;w~akTEPiqq-Ra#B&DHd1Tqm$yQE>clS?@2y|mg<_Mmt`0<;I3Q#3`$7vvA7dbu}H zv-E;|dzW4xH*0x1o~o+y7_O$%(cYNmTXHkTj358`+aTmS$7 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/leg_fl.vox b/assets/voxygen/voxel/npc/bonerattler/male/leg_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..fb344218c89a645dc32d70298704f11e712a974e GIT binary patch literal 1360 zcmds0J5Iwu6rA@lRf_a+6hw|dLjgsC5V9;lA`%M8iFUO$7fA05Sn>%ti*JCIS!zvS?H(YCi+obMMD@|HS zR7X@rP(u_Y3_;uzSffxNA&78>Q7em-2#PZ6Ngz>#P{M>gNnj3TWUi2)%$0p*F6MlW zF}EmCatS3&BSZtZhbcMA8NxKdjauYbIg=&%;XAq1C^}v|ND`-xbB<9Ng}#LTq+-3C z+a;j%K;L5N^>Mv|m$w46ZJUqbYC1jIJH|Pe`X{dQ*M9%+{nvGUl82kwEZ@!N`F^p; i?Q(gN*16n`zwTok$2<%}?)(1N?{zpFa@Tda{QutE}rmV5%v;v1mlZE9Sl zfvog2^JeDF`pK5xUv`(D0G>A0GXri5;H}y}%rfCI;(}lqyN`V}6DB-cf@y?%K%o(Z z1ULc|4MjneFf`&Gl{ICqLN1(PL}5X}h&=02AVGvs!h}7EO0LRC&f6N0gME;TIqxxY z3j(EVH(wqyQs1JOcv#+cWSvK@A2$GqB!?B=NQ2#^d9e`i~I8&u^}O;Sv7KA^dv%;m3L&_zbMCSm*iu z?;ox=XT#@}gpf*HZA>}v)X7&ppB5H#S;v|}vkgWq zTkNc#d^c)XvDF4JB-!-DdSaf2Zs+}|#F68?M?X5?qpnhyD)gw`RS%DLI5BRrxylTh zEpji?w@o}9yAebG%GpO{UOIcyC0_0XW)WvEQ+Ffx=!@sHdrDoVG+R#H&Kjk3OR)?0 zY|Oh4vD@HXvL6OkpTIp@lUVIgmRZNyR zIrzpsVpF)#D8zD)IVl{;weahY8*U^Tf z4S@?0>YW-P$K{JY9Bs(i3*0(2LP_1xl)$;W?FI&!;%q91iR>~unu7ysYbl3<-N4`h zEyJ-3+@DyOiJh893(A~8z4&Oe!ciPJqcuNqb64|lD7>YTc7+=q$F61C^~`0us~Pp; zrfyvgZpZVT%H2*L>A~nB)U;^LvsPwT)2emMT8G&xx@H-BujH)0C1N7+UeVXZpH{DV zi`B6YYpn3kK2>x^ypzi>x$+$FS*2fmTBk$mut-HKmG_;zf;}{_G_W+VG_W+VG_W+V zG~OHb-oVnpLQEvy8(128BHkNV8dw@w8d%t;1{UI-Tz<&~mP>xH;L`?{29^ev1{QpR z{oPOBzX_jymu_xu`cv!Gvu98Gp1Sj;*#8RO^uIrT{NML~b#?VwJ$(E8dH?Rki~hsQ qm;L7T>(9#drD)^7-pAwPV}E#f==b;c|H{|x?QOriyX)uwl79daO{dcU literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/torso_back.vox b/assets/voxygen/voxel/npc/bonerattler/male/torso_back.vox new file mode 100644 index 0000000000000000000000000000000000000000..5be31c785b4de7e222b720196d354f7f16b3cbea GIT binary patch literal 4252 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 b*I$2qef8B>|1n-)eDTHg<(FSxmH+<+G$5B_ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/foot_bl.vox b/assets/voxygen/voxel/npc/catoblepas/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..d5e75061a94eff83db60ac2d33704f32ed6d50ee GIT binary patch literal 1584 zcmaJ=ZA{fw9R8hi{`aL9jpA~F%MFPa1$;#iFd39qZQ86@ZyX{>DyJ?#`+F2X}RL2TdAT>G11!qrU}r8*QrQioX5q1*&> z#oRErm>a@!>cl?zmL|v1DE1sZYbUxiYr=`_S?md694`A7qvhjt^%rieAjg)#UO6 z@h)O3$`zBU-c{$?o zIPUceHhnUU9N%B~!{@`)R2a^>SUV28eg*dKT7!6JJ;qPeV!VGZ#)n=<+4x~3Rr!&= zCkt6e7o%W!H6-MMv_1(LeGW41M^adj+9nA036^{%@U{x(^$3z#`_BtX!cU>DEeXxX zl5uk4d2EOa8U_UW#so)hQQHteW-J@I@j{edsX|7(581r|6rNpxqHBwg+9Jq3M(;sE z#iT&C^89WuWMDqzvJaK{x!ApN9qv?S0Cg{5Km-%S53v~TGY)hK#y${CofBNY#JWl_ z8WMcHMKJTKAXX#jY7+Ft{5ZZxuxeQWRxQcJ(uG-Ax+n(?B>}`j+30S_$KZjLh;J*y z;Gt?vz56nLJsZQ~96u^nEm*hLu;L&XP0334Z-ATL1|_HwS~E8DP4y44Xe>q zzY!z7M{)H+KOWrw4xx%7d{hy{=~BV|74u-%g%Da_iOLsC@#BME5DWwmOiP6?IT>lm z&tiE-5}MxZz}CaBA$;%^^t}_r*hn^hx?YHxn~U)=&s=M7Mp0!2%0t!Yj^*P_Pcf!1 zR^#`d8_|9$3B6zVaOqY$X0QOwe2>Ka_w!vk1@n`9@TUghOAX)*-(~jw+cq!!_x=~U z!ioDkGX?!A2&N>%_so23E1!pLMgMdELO)_98R)Ia!WXXI?qOxc;u zXfAaG5d&KvK+UAQjV9~auH9eP_1yRU zyyrAWw`L89h+SP5p^>0lWK&&B_-QBLaSOXZd)sNR5PcwE2^1O%0+l$%8+AdwMDKsYLq)>$TQR$?TKk|M>M&bTurVv zo`}{K@A1ZzvLeb*XS`9Rjcv#?iv5f$YK$jpw8h?DTMPB#;S5$(E5?S_&}tJ^%1}?M zHT4#IThww6ZK$!Rp*4i%WnXQJ!!*WgITaNZ zNF)-t*C*KU$yMa|{=y$VAEu^kIOk&B1R@Q~v3uugBn~%V;$$5r`gUVt@O6|=970ma zkF;G`$U3$d1w*SKVHc$BNyx}^kgI+q*@D!Af?%&;$yWkzn_ym-AepiMyr9&63iSt* z&~iK(rzW4rx`d#qU$AFXaP$_nO#x)Yvyq!9MA>)<>FqvbcLz{-HWS6y79n+qAon=$ z9uQPs5y)ot@AN|Y=R?MPsLIbp>-uWksY(axUqHVICW#;7aonfvKOz|YKrnSqaQzbF zkYFS%_Q#T#4f?gWd&HdBo|8;W?|`~95j^%5D#agvnd|~`&J;a zr5pnXYB2Tg%lP$d9E)@Os9ceWhBf)v*IbUadO_Dt!O$CmD?Ng;i~#BibFrgr8QRya zLUY4<40j*HA9@Y;{#VfZP7tHR+4$*tA*OFG#>ecrCen!Fs!CLZYtR|b$C<7Y zT)kL>-+$hO_R~q|{=$b#x6&|;OtkPlX7=C9cR4JWpX7r-H3(m70B86vv-dyPxbWZo zFC4LF_IG9q`cn{0Nrvy4`Pfo14_k`=Xa7P!;-%^6uFb=EYY|FHO7MR95Q>UNu=?cN zNb5?&wa)~1whPYZ=cAyY00(joqjAF+q^lDt?J1ZXeE1EI@oh3PGVoSjKVDkhhrOpy zU_omtZho1E$(A(qWo13~{tnN%Yulz9Xg>fP9XyAw&&ToJ*thubo7+fh>%pEIf1}~k zE7<=%5DJBGPXO@}w*YfnaQE`V`R?-f^`AQae5}qt;mrSRwjJKS1CL^-_{g8j&Xt?3 KneETPm45)iRz*qx literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox b/assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..5a5636c50fa9881c49700ad27866da2ebd8e0639 GIT binary patch literal 1984 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 CJ@7pM literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/head_upper.vox b/assets/voxygen/voxel/npc/catoblepas/male/head_upper.vox new file mode 100644 index 0000000000000000000000000000000000000000..2ea6f781e0d82fbb3e15b883dc13bb02987abaa2 GIT binary patch literal 2992 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 acjqdc9hV=Ty+7aed~@gSIrsiNYvnHx6?sem literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox b/assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..1a213054aea6604ab2c99730be73c2e5f4319ea4 GIT binary patch literal 2224 zcmaKtZ)jF!7{>4W`E$;@nYP;N=H{Afo4QR?=bt%q%c(8h<~i?K=E`NFrsj)^vBFe_ zVT;Jbv^BKok6MU?e@bzqKG_JVK*A&{2opa<;HN%BL|?A1S2GNy7aq=Y?&mzu^}DX; zo_1xPs5l@Z(fqcU4|z8wvb3$c^{(6tf1ZOS8NuTpzTN^tYX4Lw~@Eqg#a2WtT}y-TcTjpthz(u;|#P0^2~Z<9E06Xy&)Xh!H+$S>9pcd?8w)cMYv?1Ds5pAbWzUS2eMK%M zmxkukkNR0aLSR#zLCTVJ*cwR zg&vgr%$fSaTtvyLWTn2CR4mjN>Px^i&o$}`?@U~Zcfj6ZE-K7e!dS_mnj*KdfAS(F zi-znWvS`42@$}@m?v(s_WEb{SKJSC*Cw@<-F+3b0_dD4(h`3`KRzEcty<0mlxVsI5{i`u}@L9|r+=7CZ zB9yGEK*i2Us68|X(&`}_^C3s>g`6)!K_n>NEGXMAnEZ(#wNWs#Pf*DBqT_;@(Fn9} zE!TZC6u31&^H#jMHIcwj;W9++5#&Y7jiwpL-J`IqaU_=2|BwH=B4lTd#ok5ZadzcY z%$P9)Z_GY~sr5%NclS#u=_|pP9|*pCQgFPc2DP=d*if|m40V^FzoO!{{Bz&s&RV|o0(v$8+YcT?--l=M z`k62A_UD&SvT+~QT=)we@1Mi^Z-JJU7F-oTQXCfndr5HRvm1O@*kAuy#~-(?^S}P< fe`mKo4?npAH{WxMH|KYH-l=x$o?GX4_*VV~``dVp literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/tail.vox b/assets/voxygen/voxel/npc/catoblepas/male/tail.vox new file mode 100644 index 0000000000000000000000000000000000000000..d7d610ccc868c75a5902836d8b5bc4060b3aa5cf GIT binary patch literal 1696 zcmaJ=ZERCj7=F(=?Y;NhZa7`nv96A}4cNx#7;Hl}86O3<(U$QsVGIHYNHYm$HEmg% zwm4%%oZwsr#t%S4h~YyaY>{8M7=k2(AR%gEknn?;@XH^@82>!Jw*)f-@gz^4_kGX% zeb4QRY%CukqR^7IFcZCJ5Up$L4(2%u9~Z-s^BEgAb+`3M7WgN7W-MuCbJonhDuAzjtPczyJCVN zwI?PV7%C$z7w5~13C=4#nvoYHj}?)&W6O&v%blSdj11XUS~z`Z9U_m;O3TO!j#nO? zk+$YM7TfKt)K*wp?l5UHEo`S(J0m!!QZh!iPAl8aDvnjQ&Jx=Mao>i){V+IISZ=Ow zg_Uh`4xJHB9k*N~8Ny&@C~aoRwlh+j5vkp4giFRGLnzM05H4nh;QZ35>y|OaAhxO8 zonjxwJ7FINajaqx$0{e@*`>38MI6sFyO_!>p5^u$u)QeVH+W78)2c1h_Ic$ z44%V`kTya>yV-7rh;?D}F0>I=TBk`{8D(2p#Vjo=AsABINnx1@X_;|h>7?{{;({SP zZ1>m+p>4inyX{E`+mjTgJ0VSXT$l#4kr0L}E)7>wxK%>BRdVghrAu-TkKb5RQxj6D z6z&fZR(*OEmEOPbhu4eo@erJIu5A?Ij=9*rWf4;G4vZdb!|2da{^9p95X>p&&#k-b)A^AxTqxRGk)Lom7;vPcP0nR-_ zXud+A^<2N-0u4_BUG$=*x(ZuYEWw?YQlR|>3=?6D@nbZK2h77s!ubygm$sng#RmNJ@K*%L0yux70zY4`#oe1T@Cnyk9A1sOmS!{sm!Usejbj7# zxO#3Ge*a}1`VJLf@JlZ)+$zCcOhGsABRBs}-biQ(fOqqTsak&w$4F)eLX&CJdQbaC$Z?@ znrUrW|<5<1wB50r=MSVpWJNoDwrg=AIWo5`r9mY$GhOqO{ z+nBty7&pI~im~nz43(EZv46+U$+cqi=7cr1vm(-1r+E zpIyQ3AAr`@R@^6mEXFNB-6q_-{HVWs{J#Ekk3XNd=U*`QpH1Wwn|ttBcP<~xPvfWA MCdN#ZpW;jZ0KaZuDF6Tf literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/torso_back.vox b/assets/voxygen/voxel/npc/catoblepas/male/torso_back.vox new file mode 100644 index 0000000000000000000000000000000000000000..93c65abff17c936f06f37f15ca1f9a05c324fe8b GIT binary patch literal 3968 zcmaKuZH!+<6~<@goHH|bw}on#mX=y-DbSYJQYb}QDK7;|x%dC)twMPTARrsq)^rUE zO|!dLLqvjLZ3@O0KtqV(MIn^PCnSa-2_Z;`niwQ}ASQhBgE7W0$KNf%U?6VtWM=N2 zd!FY!=gjQ<~jX>zY)-Yx!~$+wr|-m%7nkSQV3e- zOiGC%)`gP5nGRCMgDe82oqs(nO zftYMI#XK8Ro{5rYN|4!<%5;>%TxX(|+03`byhdVy8jaDWYqIGQ^Gr>7wo0BYd{=Yn zD&JPVD^h1`$!(H4E#z0pOUbV)&#g{Jtuv9aXv4ahsTq`Jy4Geo_x)ufGbN8q*D^9& z>&Q&fhW*Vi0n(JqydE>RyTO)J!1b3?z=^VG$x zX)ROx!o22TR_bKbhx3xDwQ;U;;d!-T(Tbj4OYRC>r7GN+KCwY9@M<0kJ*K6hABYK$ z!PA)0H`;|-+r+!XJK>#_ik>o1G$l25ntFZd@s@3q;LzKCu@VsAV>nlG8sfo#MD6)^b^kl zK#QTSA|#$#_$`hB{Qd zsA#G5OhHExMH@Yij*JIc6>XefJTP>arPlD=&|$*)NTpMBXvQnUD|9Fx2s(tk#kl{q zpsfy5rN`k9K;Y zk}~Izdg4!}_E~M1@h79p&}HZ{YGdd!;d~c*8GjUAiY}Gf3BCwA1YLqIL096OC$uEa zeX=?T+`)l$U>*7GiQEsd|Ba(}8qQ@y{i;b<@vP!m74E1^&(Z&dx)pk|^ty_4nVMz1 z%JfGTeuE2Vnmf{{ktw>RzYo!gSIS+gRyY&APU?&XL4$BFiZ*RROF~OROXBVd+*yJ9 zI&g1Cem7&OT|+-Nc-G)qgJ(5MTd8BkuiEQEQ^BW#PX$c{O_};-`XwRv7%QVCzD=wXYhaQ6phV_@cY!?? zh#7VkU>bI0P=E=~B}^1xDG-O}z#`8hV+cDG9+5ba7$c*?A@C&-nJZiZ641aq_!J(o zFp+?2m=L%UqrxX30fkRMf=}TS_!PcKo{5}=T$Opmi-Z@#sQny|B*TGUN)4pSjzmo& z^Ms#*pIYKXEUfWbfJ&N(_@AhS0A(JjPXYq8pHoAjh6*mf=)7|SV*0=J>(~39J$w9v zeZepO>1%$>*uVTAV`Kj6tF8Bc&u%&B-PTk6rt8o4J$G&OgZFRogZpmsgO7aE&pf!( z=WSZxi*8)z%cf88RgazJVY7L-W5mM~U-aOJDK}_5{CdfAE{13x3bre0$kqUpl_rSL|8s>t5XCN9`K( z$#1($ham)OqZ< z3CAq(4W}LLThCePw{APr@33$-mt_US{MA5Q|Eej$!6bt-bUZ}m3987kN)aQ7BBWCM=tcS z`SbnA`Csr;j+*D&rY8N$op*YB+t>Z!?=11>9$)T%eq*)2_tpvi6FAT5F7-7VH~9L^ z=lkyQmHz17wf@?(=lkFPa)s}DV4gqt%Q1ic?M42cAMM-m<52#$;LBaX51TjU3l=W% zv4xBMQGEGy{u7rT_uu@Vxw}1-f3IoDf+Kv%5%YcQ@WcG7^>h8IHUB67)eC(5^rQU2 zi;nddZ#c!*u3hUtIP)<-Wz7?Q_Wj@XMSBpu_v?zO?6Ub)g&ty<-`A9I&qdhrV$ z_U`s0b{*j_J@Ro4r}1X#(xpCg?0*01+57yK2k!GDZ&>JW{pwhMY5OAIw`|#G{O|Ym zv97t|P2Y99`#q05<$HheqJRH|-}#Sz`;ITV;~~HK&42sWpS|L@{lR_HrcM4qa1Rx{ z?Jn;GfB)r=^}SDj{m*;<=V#t?1P`6FPmhmZd!2u>?q7Z~|Ge?@o_+e8PtQMRZ}<=I C!$IKy literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/torso_front.vox b/assets/voxygen/voxel/npc/catoblepas/male/torso_front.vox new file mode 100644 index 0000000000000000000000000000000000000000..bf9b3a4213cbd52c9698bd554b0d9175614d5367 GIT binary patch literal 14056 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 WQ42Mip8CTZ8yhJmYb5P&ls^ILVHULj literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/rabbit/male/foot_fl.vox b/assets/voxygen/voxel/npc/rabbit/male/foot_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..51d3a5a752fef0b68330935d84854ad9686a40ca GIT binary patch literal 1148 zcmchWUrbw79LImRXo4aNQeZ6;Y6qh&bNnenD-*i`LcuZ_4!6q4=C;VCSwLMbOAc2ug5e=eQ#x~M68XvGRWLdIIf{U6MvMh`7)dx}EKAv7))ED3UCExqG-`~mk z{q8yUoSyxMY||nV*z509kp2fmy8XeHN76<`hLTDdJajnd_oS05veOSuLYgK6CecEg zl9*&zGbwKpT@zEtB&GqArs-OSykW{vW11E^(7JE0QBY0ycsxX-QSMC&Z6B<%!~7?| zna!k90n%~BpP;j&iepC_hz@m-81<8wJVs(>kov@Fa(o3?j@q!Dt-v|wMOq$2LJuSJ zk0YxE1U;>VPWZgA+;#nyso@Ym~RojI3R4iCIpoq?hz(VsQi%7`UwB3%xqPu37USkH8S6REdf=9dMXiX8>)sVSl3IR__u>It%z)=LS3;HzpIqqy4{4Ez4W*W&})krZ!IIc@?xu((9upJr-Mwq6(YWP z9{#vb{8BHe&j!fK%3@nyE;gHuYNwsL-8*@v#>vE++gbX^&W|@;Y}~HklIj^>5N>@X z-2YC9=ngK%+^k+{;@6+L36JG4{<)d!YZf*r`QO)Hmi^E_*6((^`Qg*6R94T^FnSJ4 z%)*V2g*&eZmmLnAPAA`v&G16oG7^iBAI>K^v-Jg3g zxF;Z)O8id7x^VZ)t?#?5&ewm9t1C!_bsuRqYJ&y?<+{PAv<7kyhK=_!{au4SJ7*1g oO;LlDO@3!g#Z8m literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/rabbit/male/foot_fr.vox b/assets/voxygen/voxel/npc/rabbit/male/foot_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..e0a456cf62096bef4e350352dbf53ec9d7a90f40 GIT binary patch literal 1148 zcmchWUrbw79LImRXo4aNQp#E;)D8xPIsO!(m5JR7LP0tiu5Oi)&25oOvy3zbS<@_G z)kQ=mK>{P0A{s=qjBTWCG(I3PWLdIIf{U6MvMh`7)dx}EKAv7))ED3UCEtAR?|aYr z{q8yUoZ$XL_9+qR-0Kf0NZ$h@-TqL^Bk4p%hLW-j9y%QIyVItMY$cN>VNH{M5iP7K znM^XInN)5PT@zDSjp!Fm)3pqFLlqd(G%b9fb>Cj2pqlS?yNShO+?x>EK3HXk`A>c` zn^{@uBpp}$Ndg_!96QoTY_Nmmh@a%dF_O~*G$c=xFiQEYx*o(S9n2&~P5_q@JKTCUi{-uPzE_*3{fC z8%4TPq+G0AME9YdefpEJJKO)S& zE-b$%)EC+CSCr6Gzne(2hhT*Ty{?e4)>0C^RRnwu?0??Fi>)5QM*~DphZuh=Ok&|Y z{BfVer5;v3>nAHKi*0$i*zI;|oDS-D@8p?UC*yB!XYnHkKi;fh<8~#NRL{h`aO*4K z{&zxDFXv+1#p)Fwzy8!sWHg7d&&^z4v$8?)|Gxgx?1%obewWL|51(G8s%DPHk#kt% zR&IPO+<8T~TwadT>EzqdXKBl)DJxBlT-n>ss1MWl{LsID5|#OQgp^%ijZ zYALCZl?k<1|K9(m#tEa=;qF^R`ryp;0`X50Tv+;snXlJ*dSHa6bF*}OxJ>u8b-Z3L z_XH$UiQmas7w&$!^?i5M`TDQ->Izb6+eeyB+JM2%GTq=)S|hm!BgS*7{;t8`&KZLq oQ_NtM&rfYzV9Pr`Y;f1i8hMXdacR17hc`Dj4W@gf<8PF|0NPIve*gdg literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/rabbit/male/head.vox b/assets/voxygen/voxel/npc/rabbit/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..627fc69e20187aae07043d8c353f155eeb7be4d1 GIT binary patch literal 1760 zcmchWZ%kEX9LImpzjH5=1%W7NNGQq$69wZ>n4w5|AuuFK37w`c&%JZ9J9EnJ+>~+= zS&SISW|=jla-uR|{dr-mIp^lgnX9(OoO7+Wy~xVmeEZ((o9a#PdbZDg&-Z(t^ZTCj zoaeM|*qk>YB8{uVO)PTF6KM&z)jgCD905X0W{}NW+QKI_Cmd%8rx8P}NK`3_YDLXz zmH3WxrRfo)xkl3?%Fr`%-w;cj5no&R(^zVv9j`fg)v{_)z7fU#Dx#E%Xkv&Zjwr3z zU$MXPEvsWyhU*OPBbGR7Wx39(`-WKJsFhR9Qu__D#3i(7zK>>}W}f!7(ov(Ri6csD z=F!viwC4M0=ILQ==oxy39<{PMqAfkEeapE^Xh-d+9p_@0W0+%@W0+%@Lrok}+AxQn zrl$>a40B9}HuMZVLyuZn!yJ0nFo*XNCDwODl=YRe+%wDGmc8k7?s2ZPWq%tn+H&7) z#1Uoa8G42ut0PKW)DcmR&*<30MLf=xc+BwVd-Of}9(|AN16&`7hzjs51n38t7lWwMll>0)FjqBE|79PsPsI06+JRZlLKEe9;E@MIFANVyh6H`--NQ`sg2{bh`5&~_vPZ%#gjwQ)gnzu@Ij!J!+xw>by7em)k)i%>pZ zgSoLxaSSGp`r(QnC z`b98Fz9T=8{)2+icLh@;f~yy)YXqn31fOjbOur&%qdwRw=-oyCfS@)c*j6bxuvTz_ ze)EbP_;vZ{Y%avW?oz}zRbXIGEvDXh5kC+6C|;0-m8J91@Ju0gw^krpFX-ATIJIAJ z=^a6NZVtjl3(;P_6tT5cXf4WuzhW+quPea#wh}beR$#-kRd{|~6{6dl(7CS-y{|_x zK5`8B{Vv8&wqxq!2vSp1F()G(d3kwQ9?D1g(nWZxG=$#Q=3(@MeEe{=2-DY#agv$i z!-8vH3hsU@==2M5qN@y-&(-3WA6pRXNyG6^GI8-nHl{KEe}DginJNEx|FW_&e1GOV zN|v8Sb@x$ZcV*+shk{!#3CcLb0i!EZ1(1-Czc@O-y&S2nE~8aJW@QHn+uT zR$WA75+pE^DWX9%%h*QRM&koEhAc~#NpMjULzZPRzWN~Qc=>qy<3)Y(&69k8pL@>9 zJ?Gy0ySHcW0qcZ__;!2!3KD)uq}v;4eJtZB%Th8ZsjwV481T9kGqzd(YU`S44-BHM zi>CE!ni?yr8S4fmO;^^srWsUTR9^ZG8HzmE*S2T3UR2d-Y-}VJi*avEX#Ze|ZN@+O z&1fW@_K~qG-X#9cYK|OgA~w)Ta>z?^>+O96C zWuZ7|qcm1QeZoyq#E5OgLd9$eH8;vB>=jA}RqY93*P|(Nh6N-wKhK zI}d-{CvmBl^k@C#&s?VDf!>`U$*Iyf9&7sbn?TeSE;I*p=szG z=D3*~9}9P06)xNDI2;bX9iHUH_5~y!r65v3YI5Trp0%jEQ(R2yXoTvjFvo_^v!$<) z+gHm-1H#d#xwGMXQB60%GOwJMiB*BG+ZHjRrl+^^6CjvY1u=D&01KeuRN&pX|0L8{Skd!7JOG{&-N*u pE<;RbmB&kMyMH5gbWrDxsb%svn{jGE{SB|Jt?A74$k^W~e*vy671{s* literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron index 3f3e4b3084..0a88edcb1c 100644 --- a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -539,4 +539,124 @@ central: ("npc.mouflon.male.tail"), ), ), + (Catoblepas, Male): ( + upper: ( + offset: (-13.0, 0.0, -4.5), + central: ("npc.catoblepas.male.head_upper"), + ), + lower: ( + offset: (-4.0, -10.0, -12.0), + central: ("npc.catoblepas.male.head_lower"), + ), + jaw: ( + offset: (-4.0, 0.0, -3.0), + central: ("npc.catoblepas.male.jaw"), + ), + torso_front: ( + offset: (-7.0, -10.0, -11.5), + central: ("npc.catoblepas.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -9.0, -6.5), + central: ("npc.catoblepas.male.torso_back"), + ), + ears: ( + offset: (-2.0, -12.0, -10.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -12.0, -10.0), + central: ("npc.catoblepas.male.tail"), + ), + ), + (Catoblepas, Female): ( + upper: ( + offset: (-13.0, 0.0, -4.5), + central: ("npc.catoblepas.male.head_upper"), + ), + lower: ( + offset: (-4.0, -10.0, -12.0), + central: ("npc.catoblepas.male.head_lower"), + ), + jaw: ( + offset: (-4.0, 0.0, -3.0), + central: ("npc.catoblepas.male.jaw"), + ), + torso_front: ( + offset: (-7.0, -10.0, -11.5), + central: ("npc.catoblepas.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -9.0, -6.5), + central: ("npc.catoblepas.male.torso_back"), + ), + ears: ( + offset: (-2.0, -12.0, -10.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -12.0, -10.0), + central: ("npc.catoblepas.male.tail"), + ), + ), + (Bonerattler, Male): ( + upper: ( + offset: (-4.5, 0.0, -4.5), + central: ("npc.bonerattler.male.head_upper"), + ), + lower: ( + offset: (-4.5, -2.0, -5.0), + central: ("npc.bonerattler.male.head_lower"), + ), + jaw: ( + offset: (-3.5, 0.0, -2.0), + central: ("npc.bonerattler.male.jaw"), + ), + torso_front: ( + offset: (-5.5, -7.0, -6.5), + central: ("npc.bonerattler.male.torso_front"), + ), + torso_back: ( + offset: (-5.5, -11.0, -6.5), + central: ("npc.bonerattler.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-3.5, -14.0, -10.0), + central: ("npc.bonerattler.male.tail"), + ), + ), + (Bonerattler, Female): ( + upper: ( + offset: (-4.5, 0.0, -4.5), + central: ("npc.bonerattler.male.head_upper"), + ), + lower: ( + offset: (-4.5, -2.0, -5.0), + central: ("npc.bonerattler.male.head_lower"), + ), + jaw: ( + offset: (-3.5, 0.0, -2.0), + central: ("npc.bonerattler.male.jaw"), + ), + torso_front: ( + offset: (-5.5, -7.0, -6.5), + central: ("npc.bonerattler.male.torso_front"), + ), + torso_back: ( + offset: (-5.5, -11.0, -6.5), + central: ("npc.bonerattler.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-3.5, -14.0, -10.0), + central: ("npc.bonerattler.male.tail"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron index ceb6ab940c..77d283c7a6 100644 --- a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -611,4 +611,140 @@ lateral: ("npc.mouflon.male.foot_br"), ), ), + (Catoblepas, Male): ( + leg_fl: ( + offset: (-2.5, -4.0, -4.5), + lateral: ("npc.catoblepas.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.5, -4.0, -4.5), + lateral: ("npc.catoblepas.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0 , -4.0), + lateral: ("npc.catoblepas.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.catoblepas.male.leg_br"), + ), + foot_fl: ( + offset: (-3.0, -7.0, -11.0), + lateral: ("npc.catoblepas.male.foot_fl"), + ), + foot_fr: ( + offset: (-3.0, -7.0, -11.0), + lateral: ("npc.catoblepas.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.5, -3.5, -9.0), + lateral: ("npc.catoblepas.male.foot_bl"), + ), + foot_br: ( + offset: (-2.5, -3.5, -9.0), + lateral: ("npc.catoblepas.male.foot_br"), + ), + ), + (Catoblepas, Female): ( + leg_fl: ( + offset: (-2.5, -4.0, -4.5), + lateral: ("npc.catoblepas.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.5, -4.0, -4.5), + lateral: ("npc.catoblepas.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0 , -4.0), + lateral: ("npc.catoblepas.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.catoblepas.male.leg_br"), + ), + foot_fl: ( + offset: (-3.0, -7.0, -11.0), + lateral: ("npc.catoblepas.male.foot_fl"), + ), + foot_fr: ( + offset: (-3.0, -7.0, -11.0), + lateral: ("npc.catoblepas.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.5, -3.5, -9.0), + lateral: ("npc.catoblepas.male.foot_bl"), + ), + foot_br: ( + offset: (-2.5, -3.5, -9.0), + lateral: ("npc.catoblepas.male.foot_br"), + ), + ), + (Bonerattler, Male): ( + leg_fl: ( + offset: (-1.5, -6.0, -3.0), + lateral: ("npc.bonerattler.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -6.0, -3.0), + lateral: ("npc.bonerattler.male.leg_fr"), + ), + leg_bl: ( + offset: (-1.5, -1.0, -3.0), + lateral: ("npc.bonerattler.male.leg_bl"), + ), + leg_br: ( + offset: (-1.5, -1.0, -3.0), + lateral: ("npc.bonerattler.male.leg_br"), + ), + foot_fl: ( + offset: (-2.5, -3.0, -6.0), + lateral: ("npc.bonerattler.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.5, -3.0, -6.0), + lateral: ("npc.bonerattler.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.5, -4.0, -6.0), + lateral: ("npc.bonerattler.male.foot_bl"), + ), + foot_br: ( + offset: (-2.5, -4.0, -6.0), + lateral: ("npc.bonerattler.male.foot_br"), + ), + ), + (Bonerattler, Female): ( + leg_fl: ( + offset: (-1.5, -6.0, -3.0), + lateral: ("npc.bonerattler.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -6.0, -3.0), + lateral: ("npc.bonerattler.male.leg_fr"), + ), + leg_bl: ( + offset: (-1.5, -1.0, -3.0), + lateral: ("npc.bonerattler.male.leg_bl"), + ), + leg_br: ( + offset: (-1.5, -1.0, -3.0), + lateral: ("npc.bonerattler.male.leg_br"), + ), + foot_fl: ( + offset: (-2.5, -3.0, -6.0), + lateral: ("npc.bonerattler.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.5, -3.0, -6.0), + lateral: ("npc.bonerattler.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.5, -4.0, -6.0), + lateral: ("npc.bonerattler.male.foot_bl"), + ), + foot_br: ( + offset: (-2.5, -4.0, -6.0), + lateral: ("npc.bonerattler.male.foot_br"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index 5d52cc8487..0d916f3f7a 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -378,4 +378,32 @@ central: ("npc.hyena.male.tail"), ), ), + (Rabbit, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.rabbit.male.head"), + ), + chest: ( + offset: (-2.5, -5.5, -3.0), + central: ("npc.rabbit.male.chest"), + ), + tail: ( + offset: (-1.5, -2.0, -1.0), + central: ("npc.rabbit.male.tail"), + ), + ), + (Rabbit, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.rabbit.male.head"), + ), + chest: ( + offset: (-2.5, -5.5, -3.0), + central: ("npc.rabbit.male.chest"), + ), + tail: ( + offset: (-1.5, -2.0, -1.0), + central: ("npc.rabbit.male.tail"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index 20ab11c13e..791860d0e1 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -46,11 +46,11 @@ lateral: ("npc.fox.male.foot_fr"), ), left_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.0), lateral: ("npc.fox.male.foot_bl"), ), right_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.0), lateral: ("npc.fox.male.foot_br"), ), ), @@ -64,11 +64,11 @@ lateral: ("npc.fox.female.foot_fr"), ), left_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.0), lateral: ("npc.fox.female.foot_bl"), ), right_back: ( - offset: (-1.0, -2.0, -2.5), + offset: (-1.0, -2.0, -5.0), lateral: ("npc.fox.female.foot_br"), ), ), @@ -457,11 +457,11 @@ lateral: ("npc.hyena.male.foot_fr"), ), left_back: ( - offset: (-1.5, -2.0, -4.5), + offset: (-1.5, -2.0, -6.5), lateral: ("npc.hyena.male.foot_bl"), ), right_back: ( - offset: (-1.5, -2.0, -4.5), + offset: (-1.5, -2.0, -6.5), lateral: ("npc.hyena.male.foot_br"), ), ), @@ -476,12 +476,48 @@ lateral: ("npc.hyena.male.foot_fr"), ), left_back: ( - offset: (-1.5, -2.0, -4.5), + offset: (-1.5, -2.0, -6.5), lateral: ("npc.hyena.male.foot_bl"), ), right_back: ( - offset: (-1.5, -2.0, -4.5), + offset: (-1.5, -2.0, -6.5), lateral: ("npc.hyena.male.foot_br"), ), ), + (Rabbit, Male): ( + left_front: ( + offset: (-1.5, -0.0, -2.0), + lateral: ("npc.rabbit.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -0.0, -2.0), + lateral: ("npc.rabbit.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.rabbit.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.rabbit.male.foot_br"), + ), + ), + (Rabbit, Female): ( + left_front: ( + offset: (-1.5, -0.0, -2.0), + lateral: ("npc.rabbit.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -0.0, -2.0), + lateral: ("npc.rabbit.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.rabbit.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.rabbit.male.foot_br"), + ), + ), }) \ No newline at end of file diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs index 1298be162d..4c1a70106e 100644 --- a/common/src/comp/body/quadruped_medium.rs +++ b/common/src/comp/body/quadruped_medium.rs @@ -37,6 +37,8 @@ pub enum Species { Wolf = 8, Frostfang = 9, Mouflon = 10, + Catoblepas = 11, + Bonerattler = 12, } /// Data representing per-species generic data. @@ -53,6 +55,8 @@ pub struct AllSpecies { pub wolf: SpeciesMeta, pub frostfang: SpeciesMeta, pub mouflon: SpeciesMeta, + pub catoblepas: SpeciesMeta, + pub bonerattler: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -70,11 +74,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Wolf => &self.wolf, Species::Frostfang => &self.frostfang, Species::Mouflon => &self.mouflon, + Species::Catoblepas => &self.catoblepas, + Species::Bonerattler => &self.bonerattler, } } } -pub const ALL_SPECIES: [Species; 9] = [ +pub const ALL_SPECIES: [Species; 11] = [ Species::Grolgar, Species::Saber, Species::Tiger, @@ -84,6 +90,8 @@ pub const ALL_SPECIES: [Species; 9] = [ Species::Wolf, Species::Frostfang, Species::Mouflon, + Species::Catoblepas, + Species::Bonerattler, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index c190aa9e29..a70d2721cf 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -41,6 +41,7 @@ pub enum Species { Dodarock = 10, Holladon = 11, Hyena = 12, + Rabbit = 13, } /// Data representing per-species generic data. @@ -61,6 +62,7 @@ pub struct AllSpecies { pub dodarock: SpeciesMeta, pub holladon: SpeciesMeta, pub hyena: SpeciesMeta, + pub rabbit: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -82,11 +84,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Dodarock => &self.dodarock, Species::Holladon => &self.holladon, Species::Hyena => &self.hyena, + Species::Rabbit => &self.rabbit, } } } -pub const ALL_SPECIES: [Species; 13] = [ +pub const ALL_SPECIES: [Species; 14] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -100,6 +103,7 @@ pub const ALL_SPECIES: [Species; 13] = [ Species::Dodarock, Species::Holladon, Species::Hyena, + Species::Rabbit, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/voxygen/src/anim/src/quadruped_low/run.rs b/voxygen/src/anim/src/quadruped_low/run.rs index 259d660929..7d7df6561b 100644 --- a/voxygen/src/anim/src/quadruped_low/run.rs +++ b/voxygen/src/anim/src/quadruped_low/run.rs @@ -106,9 +106,10 @@ impl Animation for RunAnimation { skeleton_attr.tail_front.0 + skeleton_attr.lean.0 * 2.0, skeleton_attr.tail_front.1 + skeleton_attr.lean.0 * 2.0, ); - next.tail_front.ori = Quaternion::rotation_z(shortalt * 0.18 + tilt * 1.8) - * Quaternion::rotation_y(shortalt * 0.1) - * Quaternion::rotation_x(0.06 - skeleton_attr.lean.0 * 1.2 + x_tilt * 0.2); + next.tail_front.ori = + Quaternion::rotation_z(shortalt * 0.18 * skeleton_attr.lean.0 + tilt * 1.8) + * Quaternion::rotation_y(shortalt * 0.1) + * Quaternion::rotation_x(0.06 - skeleton_attr.lean.0 * 1.2 + x_tilt * 0.2); next.tail_front.scale = Vec3::one(); next.tail_rear.offset = Vec3::new( @@ -116,9 +117,10 @@ impl Animation for RunAnimation { skeleton_attr.tail_rear.0, skeleton_attr.tail_rear.1 + shortalt * 0.6, ); - next.tail_rear.ori = Quaternion::rotation_z(shortalt * 0.25 + tilt * 1.6) - * Quaternion::rotation_y(shortalt * 0.1) - * Quaternion::rotation_x(-0.04 + x_tilt * 0.5); + next.tail_rear.ori = + Quaternion::rotation_z(shortalt * 0.25 * skeleton_attr.lean.0 + tilt * 1.6) + * Quaternion::rotation_y(shortalt * 0.1) + * Quaternion::rotation_x(-0.04 + x_tilt * 0.5); next.tail_rear.scale = Vec3::one(); next.chest.offset = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) diff --git a/voxygen/src/anim/src/quadruped_medium/idle.rs b/voxygen/src/anim/src/quadruped_medium/idle.rs index bbccbe167b..b41ebcc636 100644 --- a/voxygen/src/anim/src/quadruped_medium/idle.rs +++ b/voxygen/src/anim/src/quadruped_medium/idle.rs @@ -96,7 +96,7 @@ impl Animation for IdleAnimation { next.torso_back.ori = Quaternion::rotation_y(-slow * 0.005) * Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.torso_back.scale = Vec3::one(); + next.torso_back.scale = Vec3::one() * 0.99; next.ears.offset = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); next.ears.ori = Quaternion::rotation_x(0.0 + slower * 0.03); diff --git a/voxygen/src/anim/src/quadruped_medium/mod.rs b/voxygen/src/anim/src/quadruped_medium/mod.rs index 7e25a2e085..aa350fb841 100644 --- a/voxygen/src/anim/src/quadruped_medium/mod.rs +++ b/voxygen/src/anim/src/quadruped_medium/mod.rs @@ -183,6 +183,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (-0.5, 3.0), (Frostfang, _) => (1.0, -2.0), (Mouflon, _) => (-2.5, 6.0), + (Catoblepas, _) => (-1.0, -6.5), + (Bonerattler, _) => (0.0, -0.5), }, head_lower: match (body.species, body.body_type) { (Grolgar, _) => (1.0, -1.0), @@ -194,6 +196,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (-4.5, 2.0), (Frostfang, _) => (2.0, 1.5), (Mouflon, _) => (-1.0, 0.5), + (Catoblepas, _) => (19.5, -2.0), + (Bonerattler, _) => (7.0, -1.5), }, jaw: match (body.species, body.body_type) { (Grolgar, _) => (7.0, 1.5), @@ -205,6 +209,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (5.0, -3.0), (Frostfang, _) => (4.0, -3.0), (Mouflon, _) => (10.5, -4.0), + (Catoblepas, _) => (1.0, -6.0), + (Bonerattler, _) => (3.5, -3.0), }, tail: match (body.species, body.body_type) { (Grolgar, _) => (-11.5, -0.5), @@ -216,6 +222,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (-11.0, 0.0), (Frostfang, _) => (-7.0, -3.5), (Mouflon, _) => (-10.5, 3.0), + (Catoblepas, _) => (-8.5, -2.0), + (Bonerattler, _) => (-9.0, 2.5), }, torso_front: match (body.species, body.body_type) { (Grolgar, _) => (10.0, 13.0), @@ -227,6 +235,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (12.0, 13.0), (Frostfang, _) => (9.0, 11.5), (Mouflon, _) => (11.0, 13.5), + (Catoblepas, _) => (7.5, 19.5), + (Bonerattler, _) => (6.0, 12.5), }, torso_back: match (body.species, body.body_type) { (Grolgar, _) => (-10.0, 1.5), @@ -238,6 +248,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (-12.5, 1.0), (Frostfang, _) => (-10.5, 0.0), (Mouflon, _) => (-8.5, -0.5), + (Catoblepas, _) => (-8.5, -4.5), + (Bonerattler, _) => (-5.0, 0.0), }, ears: match (body.species, body.body_type) { (Grolgar, _) => (5.0, 8.0), @@ -249,6 +261,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (3.0, 2.5), (Frostfang, _) => (2.0, 3.5), (Mouflon, _) => (2.5, 5.0), + (Catoblepas, _) => (11.0, -3.0), + (Bonerattler, _) => (2.0, 3.5), }, leg_f: match (body.species, body.body_type) { (Grolgar, _) => (-7.0, 4.0, 0.0), @@ -260,6 +274,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (4.5, -6.5, -1.0), (Frostfang, _) => (5.5, -5.5, -2.0), (Mouflon, _) => (4.0, -5.0, -5.0), + (Catoblepas, _) => (7.0, 2.0, -6.0), + (Bonerattler, _) => (5.5, 3.5, -4.0), }, leg_b: match (body.species, body.body_type) { (Grolgar, _) => (6.0, -6.5, -5.5), @@ -271,6 +287,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (5.0, -6.5, -2.5), (Frostfang, _) => (3.5, -4.5, -2.0), (Mouflon, _) => (3.5, -8.0, -4.5), + (Catoblepas, _) => (6.0, -2.5, -2.5), + (Bonerattler, _) => (6.5, -9.5, -4.0), }, feet_f: match (body.species, body.body_type) { (Grolgar, _) => (0.0, -9.0, -7.0), @@ -282,6 +300,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (0.5, 0.0, -2.0), (Frostfang, _) => (0.5, 1.5, -3.5), (Mouflon, _) => (-0.5, -0.5, -1.5), + (Catoblepas, _) => (1.0, 4.0, -3.0), + (Bonerattler, _) => (-0.5, -3.0, -2.5), }, feet_b: match (body.species, body.body_type) { (Grolgar, _) => (0.0, 0.0, -5.0), @@ -293,6 +313,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (0.0, -1.0, -1.5), (Frostfang, _) => (0.0, -1.5, -3.5), (Mouflon, _) => (-1.0, 0.0, -2.5), + (Catoblepas, _) => (0.5, 0.5, -3.0), + (Bonerattler, _) => (0.0, 3.0, -2.5), }, scaler: match (body.species, body.body_type) { (Grolgar, _) => (1.3), @@ -304,6 +326,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (1.0), (Frostfang, _) => (1.0), (Mouflon, _) => (1.0), + (Catoblepas, _) => (1.3), + (Bonerattler, _) => (1.0), }, dampen: match (body.species, body.body_type) { (Grolgar, _) => (0.5), @@ -315,6 +339,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (1.0), (Frostfang, _) => (1.0), (Mouflon, _) => (1.0), + (Catoblepas, _) => (0.6), + (Bonerattler, _) => (0.6), }, maximize: match (body.species, body.body_type) { (Grolgar, _) => (2.0), @@ -326,6 +352,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (1.0), (Frostfang, _) => (1.2), (Mouflon, _) => (1.1), + (Catoblepas, _) => (0.9), + (Bonerattler, _) => (0.8), }, tempo: match (body.species, body.body_type) { (Grolgar, _) => (0.95), @@ -337,6 +365,8 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Wolf, _) => (1.1), (Frostfang, _) => (1.0), (Mouflon, _) => (0.85), + (Catoblepas, _) => (0.8), + (Bonerattler, _) => (1.0), }, } } diff --git a/voxygen/src/anim/src/quadruped_small/jump.rs b/voxygen/src/anim/src/quadruped_small/jump.rs index dfc2cc8db7..a8395ac958 100644 --- a/voxygen/src/anim/src/quadruped_small/jump.rs +++ b/voxygen/src/anim/src/quadruped_small/jump.rs @@ -24,9 +24,11 @@ impl Animation for JumpAnimation { next.head.ori = Quaternion::rotation_z(-0.8) * Quaternion::rotation_x(0.5); next.head.scale = Vec3::one(); - next.chest.offset = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) / 11.0; + next.chest.offset = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) + * skeleton_attr.scaler + / 11.0; next.chest.ori = Quaternion::rotation_y(0.0); - next.chest.scale = Vec3::one() / 11.0; + next.chest.scale = Vec3::one() * skeleton_attr.scaler / 11.0; next.leg_fl.offset = Vec3::new( -skeleton_attr.feet_f.0, diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index a9104211b1..0995dafd23 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -127,6 +127,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (6.0, -2.0), (Holladon, _) => (7.0, 1.0), (Hyena, _) => (7.5, 2.0), + (Rabbit, _) => (4.0, 3.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 7.0), @@ -142,6 +143,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (-2.0, 9.0), (Holladon, _) => (-2.0, 9.0), (Hyena, _) => (-2.0, 9.0), + (Rabbit, _) => (-2.0, 6.0), }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.0, -2.0), @@ -157,10 +159,11 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (5.0, 5.0, -2.5), (Holladon, _) => (5.0, 4.0, -2.5), (Hyena, _) => (2.5, 5.0, -4.0), + (Rabbit, _) => (3.0, 3.0, -3.0), }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, -1.5), - (Fox, _) => (3.0, -3.0, -5.0), + (Fox, _) => (3.0, -3.0, -2.0), (Sheep, _) => (3.5, -3.5, -2.0), (Boar, _) => (3.0, -3.0, -2.5), (Jackalope, _) => (3.5, -2.0, 0.0), @@ -171,7 +174,8 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Quokka, _) => (4.0, -4.0, -1.0), (Dodarock, _) => (3.5, -3.0, -4.0), (Holladon, _) => (4.0, -2.0, -3.0), - (Hyena, _) => (3.0, -5.0, -4.5), + (Hyena, _) => (3.0, -5.0, -2.5), + (Rabbit, _) => (3.5, -2.0, -1.0), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -179,7 +183,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Sheep, _) => (-5.0, 0.0), (Boar, _) => (-6.0, 0.0), (Jackalope, _) => (-4.0, 2.0), - (Skunk, _) => (-3.0, 1.5), + (Skunk, _) => (-4.0, 0.5), (Cat, _) => (-3.5, 2.0), (Batfox, _) => (0.0, 5.0), (Raccoon, _) => (-4.0, 1.0), @@ -187,6 +191,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (0.0, 5.0), (Holladon, _) => (-1.0, 4.0), (Hyena, _) => (-7.0, 0.0), + (Rabbit, _) => (-4.0, -0.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => (0.9), @@ -201,7 +206,8 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Quokka, _) => (1.0), (Dodarock, _) => (1.2), (Holladon, _) => (1.4), - (Hyena, _) => (0.8), + (Hyena, _) => (1.0), + (Rabbit, _) => (0.7), }, tempo: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -217,13 +223,14 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (1.0), (Holladon, _) => (1.0), (Hyena, _) => (1.1), + (Rabbit, _) => (1.15), }, maximize: match (body.species, body.body_type) { (Pig, _) => (1.0), (Fox, _) => (1.3), (Sheep, _) => (1.1), (Boar, _) => (1.4), - (Jackalope, _) => (1.0), + (Jackalope, _) => (1.2), (Skunk, _) => (1.0), (Cat, _) => (1.0), (Batfox, _) => (1.0), @@ -232,13 +239,14 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (1.0), (Holladon, _) => (1.0), (Hyena, _) => (1.4), + (Rabbit, _) => (1.3), }, minimize: match (body.species, body.body_type) { (Pig, _) => (0.6), (Fox, _) => (1.3), (Sheep, _) => (0.8), (Boar, _) => (1.0), - (Jackalope, _) => (1.0), + (Jackalope, _) => (0.8), (Skunk, _) => (0.9), (Cat, _) => (0.8), (Batfox, _) => (1.0), @@ -247,6 +255,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (0.9), (Holladon, _) => (0.7), (Hyena, _) => (1.4), + (Rabbit, _) => (0.8), }, spring: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -262,6 +271,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Dodarock, _) => (0.9), (Holladon, _) => (0.7), (Hyena, _) => (1.4), + (Rabbit, _) => (2.5), }, } } diff --git a/voxygen/src/anim/src/quadruped_small/run.rs b/voxygen/src/anim/src/quadruped_small/run.rs index 861c295211..09d14dedc0 100644 --- a/voxygen/src/anim/src/quadruped_small/run.rs +++ b/voxygen/src/anim/src/quadruped_small/run.rs @@ -72,7 +72,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_f.1 + footverttf * 3.0 * skeleton_attr.maximize, skeleton_attr.feet_f.2 + ((footvertf * -1.5).max(-1.0)), ); - next.leg_fl.ori = Quaternion::rotation_x(skeleton_attr.minimize * footverttf * 0.5) + next.leg_fl.ori = Quaternion::rotation_x(0.2 + skeleton_attr.minimize * footverttf * 0.65) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); next.leg_fl.scale = Vec3::one() * 1.02; @@ -82,7 +82,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_f.1 + footvertt * 3.0 * skeleton_attr.minimize, skeleton_attr.feet_f.2 + ((footvert * -1.5).max(-1.0)), ); - next.leg_fr.ori = Quaternion::rotation_x(skeleton_attr.maximize * footvertt * 0.5) + next.leg_fr.ori = Quaternion::rotation_x(0.2 + skeleton_attr.maximize * footvertt * 0.65) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); next.leg_fr.scale = Vec3::one() * 1.02; @@ -92,7 +92,7 @@ impl Animation for RunAnimation { skeleton_attr.feet_b.1 + footvertt * -1.4, skeleton_attr.feet_b.2 + ((footvert * 1.5).max(-1.0)), ); - next.leg_bl.ori = Quaternion::rotation_x(skeleton_attr.maximize * footvertt * -0.6) + next.leg_bl.ori = Quaternion::rotation_x(-0.25 + skeleton_attr.maximize * footvertt * -0.8) * Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_z(tilt * -1.5); next.leg_bl.scale = Vec3::one() * 1.02; @@ -102,9 +102,10 @@ impl Animation for RunAnimation { skeleton_attr.feet_b.1 + footverttf * -1.4, skeleton_attr.feet_b.2 + ((footvertf * 1.5).max(-1.0)), ); - next.leg_br.ori = Quaternion::rotation_x(skeleton_attr.maximize * footverttf * -0.6) - * Quaternion::rotation_y(tilt * 1.5) - * Quaternion::rotation_z(tilt * -1.5); + next.leg_br.ori = + Quaternion::rotation_x(-0.25 + skeleton_attr.maximize * footverttf * -0.8) + * Quaternion::rotation_y(tilt * 1.5) + * Quaternion::rotation_z(tilt * -1.5); next.leg_br.scale = Vec3::one() * 1.02; next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); From 1b7cb8cde6104c9a635c4257b5b9e63e18fc6b6b Mon Sep 17 00:00:00 2001 From: Snowram Date: Wed, 29 Jul 2020 01:09:45 +0200 Subject: [PATCH 05/12] Add troll, truffler and wendigo npcs --- assets/common/npc_names.json | 12 ++ .../voxel/biped_large_center_manifest.ron | 56 ++++++++ .../voxel/biped_large_lateral_manifest.ron | 136 ++++++++++++++++++ .../voxel/npc/hyena/male/Jackalope-0.vox | Bin 2168 -> 0 bytes .../voxel/npc/hyena/male/Jackalope-1.vox | Bin 1932 -> 0 bytes .../voxel/npc/hyena/male/Jackalope-2.vox | Bin 1272 -> 0 bytes .../voxel/npc/hyena/male/Jackalope-3.vox | Bin 1192 -> 0 bytes .../voxel/npc/hyena/male/Jackalope-4.vox | Bin 1272 -> 0 bytes .../voxygen/voxel/npc/troll/male/foot_l.vox | Bin 0 -> 1772 bytes .../voxygen/voxel/npc/troll/male/foot_r.vox | Bin 0 -> 1772 bytes .../voxygen/voxel/npc/troll/male/hand_l.vox | Bin 0 -> 2912 bytes .../voxygen/voxel/npc/troll/male/hand_r.vox | Bin 0 -> 2912 bytes assets/voxygen/voxel/npc/troll/male/head.vox | Bin 0 -> 4704 bytes assets/voxygen/voxel/npc/troll/male/jaw.vox | Bin 0 -> 1940 bytes assets/voxygen/voxel/npc/troll/male/leg_l.vox | Bin 0 -> 1664 bytes assets/voxygen/voxel/npc/troll/male/leg_r.vox | Bin 0 -> 1664 bytes .../voxel/npc/troll/male/shoulder_l.vox | Bin 0 -> 2964 bytes .../voxel/npc/troll/male/shoulder_r.vox | Bin 0 -> 2964 bytes .../voxel/npc/troll/male/torso_lower.vox | Bin 0 -> 2336 bytes .../voxel/npc/troll/male/torso_upper.vox | Bin 0 -> 10424 bytes .../voxygen/voxel/npc/troll/male/weapon_r.vox | Bin 0 -> 2864 bytes .../voxygen/voxel/npc/truffler/male/chest.vox | Bin 0 -> 15840 bytes .../voxel/npc/truffler/male/foot_bl.vox | Bin 0 -> 1412 bytes .../voxel/npc/truffler/male/foot_br.vox | Bin 0 -> 1412 bytes .../voxel/npc/truffler/male/foot_fl.vox | Bin 0 -> 1412 bytes .../voxel/npc/truffler/male/foot_fr.vox | Bin 0 -> 1412 bytes .../voxygen/voxel/npc/truffler/male/head.vox | Bin 0 -> 2992 bytes .../voxygen/voxel/npc/wendigo/male/foot_l.vox | Bin 0 -> 2132 bytes .../voxygen/voxel/npc/wendigo/male/foot_r.vox | Bin 0 -> 2128 bytes .../voxygen/voxel/npc/wendigo/male/hand_l.vox | Bin 0 -> 1772 bytes .../voxygen/voxel/npc/wendigo/male/hand_r.vox | Bin 0 -> 1772 bytes .../voxygen/voxel/npc/wendigo/male/head.vox | Bin 0 -> 3164 bytes .../voxygen/voxel/npc/wendigo/male/leg_l.vox | Bin 0 -> 1528 bytes .../voxygen/voxel/npc/wendigo/male/leg_r.vox | Bin 0 -> 1528 bytes .../voxel/npc/wendigo/male/shoulder_l.vox | Bin 0 -> 2004 bytes .../voxel/npc/wendigo/male/shoulder_r.vox | Bin 0 -> 2036 bytes .../voxel/npc/wendigo/male/torso_lower.vox | Bin 0 -> 1424 bytes .../voxel/npc/wendigo/male/torso_upper.vox | Bin 0 -> 4228 bytes .../quadruped_small_central_manifest.ron | 28 ++++ .../quadruped_small_lateral_manifest.ron | 37 +++++ common/src/comp/body/biped_large.rs | 13 +- common/src/comp/body/quadruped_small.rs | 6 +- voxygen/src/anim/src/biped_large/mod.rs | 14 ++ voxygen/src/anim/src/quadruped_small/mod.rs | 10 ++ 44 files changed, 310 insertions(+), 2 deletions(-) delete mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-0.vox delete mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-1.vox delete mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-2.vox delete mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-3.vox delete mode 100644 assets/voxygen/voxel/npc/hyena/male/Jackalope-4.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/head.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/troll/male/weapon_r.vox create mode 100644 assets/voxygen/voxel/npc/truffler/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/truffler/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/truffler/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/truffler/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/truffler/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/truffler/male/head.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/head.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/wendigo/male/torso_upper.vox diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index 320c078280..7807251c42 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -453,6 +453,10 @@ "rabbit": { "keyword": "rabbit", "generic": "Rabbit" + }, + "truffler": { + "keyword": "truffler", + "generic": "Truffler" } } }, @@ -513,6 +517,14 @@ "cyclops": { "keyword": "cyclops", "generic": "Cyclops" + }, + "wendigo": { + "keyword": "wendigo", + "generic": "Wendigo" + }, + "troll": { + "keyword": "troll", + "generic": "Troll" } } }, diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_center_manifest.ron index bd6ec60904..158c86588f 100644 --- a/assets/voxygen/voxel/biped_large_center_manifest.ron +++ b/assets/voxygen/voxel/biped_large_center_manifest.ron @@ -55,4 +55,60 @@ center: ("npc.cyclops.male.torso_lower"), ) ), + (Wendigo, Male): ( + head: ( + offset: (-15.0, -4.5, -9.5), + center: ("npc.wendigo.male.head"), + ), + torso_upper: ( + offset: (-6.0, -5.5, -6.5), + center: ("npc.wendigo.male.torso_upper"), + ), + torso_lower: ( + offset: (-4.0, -2.0, -2.0), + center: ("npc.wendigo.male.torso_lower"), + ) + ), + (Wendigo, Female): ( + head: ( + offset: (-15.0, -4.5, -9.5), + center: ("npc.wendigo.male.head"), + ), + torso_upper: ( + offset: (-6.0, -5.5, -6.5), + center: ("npc.wendigo.male.torso_upper"), + ), + torso_lower: ( + offset: (-4.0, -2.0, -2.0), + center: ("npc.wendigo.male.torso_lower"), + ) + ), + (Troll, Male): ( + head: ( + offset: (-8.0, -8.5, -9.0), + center: ("npc.troll.male.head"), + ), + torso_upper: ( + offset: (-8.0, -7.5, -11.0), + center: ("npc.troll.male.torso_upper"), + ), + torso_lower: ( + offset: (-6.0, -3.5, -2.5), + center: ("npc.troll.male.torso_lower"), + ) + ), + (Troll, Female): ( + head: ( + offset: (-8.0, -8.5, -9.0), + center: ("npc.troll.male.head"), + ), + torso_upper: ( + offset: (-8.0, -7.5, -11.0), + center: ("npc.troll.male.torso_upper"), + ), + torso_lower: ( + offset: (-6.0, -3.5, -2.5), + center: ("npc.troll.male.torso_lower"), + ) + ), }) diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron index 32a3a55245..f93a9bdf5c 100644 --- a/assets/voxygen/voxel/biped_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -135,4 +135,140 @@ lateral: ("npc.cyclops.male.foot_r"), ) ), + (Wendigo, Male): ( + shoulder_l: ( + offset: (-3.0, -4.0, -5.0), + lateral: ("npc.wendigo.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-3.0, -4.0, -5.0), + lateral: ("npc.wendigo.male.shoulder_r"), + ), + hand_l: ( + offset: (-4.0, -3.5, -18.0), + lateral: ("npc.wendigo.male.hand_l"), + ), + hand_r: ( + offset: (-4.0, -3.5, -18.0), + lateral: ("npc.wendigo.male.hand_r"), + ), + leg_l: ( + offset: (-4.0, -2.5, -9.0), + lateral: ("npc.wendigo.male.leg_l"), + ), + leg_r: ( + offset: (0.0, -2.5, -9.0), + lateral: ("npc.wendigo.male.leg_r"), + ), + foot_l: ( + offset: (-4.0, -5.0, -5.5), + lateral: ("npc.wendigo.male.foot_l"), + ), + foot_r: ( + offset: (-4.0, -5.0, -5.5), + lateral: ("npc.wendigo.male.foot_r"), + ) + ), + (Wendigo, Female): ( + shoulder_l: ( + offset: (-3.0, -4.0, -5.0), + lateral: ("npc.wendigo.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-3.0, -4.0, -5.0), + lateral: ("npc.wendigo.male.shoulder_r"), + ), + hand_l: ( + offset: (-4.0, -3.5, -18.0), + lateral: ("npc.wendigo.male.hand_l"), + ), + hand_r: ( + offset: (-4.0, -3.5, -18.0), + lateral: ("npc.wendigo.male.hand_r"), + ), + leg_l: ( + offset: (-4.0, -2.5, -9.0), + lateral: ("npc.wendigo.male.leg_l"), + ), + leg_r: ( + offset: (0.0, -2.5, -9.0), + lateral: ("npc.wendigo.male.leg_r"), + ), + foot_l: ( + offset: (-4.0, -5.0, -5.5), + lateral: ("npc.wendigo.male.foot_l"), + ), + foot_r: ( + offset: (-4.0, -5.0, -5.5), + lateral: ("npc.wendigo.male.foot_r"), + ) + ), + (Troll, Male): ( + shoulder_l: ( + offset: (-5.0, -4.5, -7.0), + lateral: ("npc.troll.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-5.0, -4.5, -7.0), + lateral: ("npc.troll.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.5, -4.0, -15.0), + lateral: ("npc.troll.male.hand_l"), + ), + hand_r: ( + offset: (-3.5, -4.0, -15.0), + lateral: ("npc.troll.male.hand_r"), + ), + leg_l: ( + offset: (-3.0, -2.5, -4.5), + lateral: ("npc.troll.male.leg_l"), + ), + leg_r: ( + offset: (-3.0, -2.5, -4.5), + lateral: ("npc.troll.male.leg_r"), + ), + foot_l: ( + offset: (-3.0, -5.0, -2.5), + lateral: ("npc.troll.male.foot_l"), + ), + foot_r: ( + offset: (-3.0, -5.0, -2.5), + lateral: ("npc.troll.male.foot_r"), + ) + ), + (Troll, Female): ( + shoulder_l: ( + offset: (-5.0, -4.5, -7.0), + lateral: ("npc.troll.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-5.0, -4.5, -7.0), + lateral: ("npc.troll.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.5, -4.0, -15.0), + lateral: ("npc.troll.male.hand_l"), + ), + hand_r: ( + offset: (-3.5, -4.0, -15.0), + lateral: ("npc.troll.male.hand_r"), + ), + leg_l: ( + offset: (-3.0, -2.5, -4.5), + lateral: ("npc.troll.male.leg_l"), + ), + leg_r: ( + offset: (-3.0, -2.5, -4.5), + lateral: ("npc.troll.male.leg_r"), + ), + foot_l: ( + offset: (-3.0, -5.0, -2.5), + lateral: ("npc.troll.male.foot_l"), + ), + foot_r: ( + offset: (-3.0, -5.0, -2.5), + lateral: ("npc.troll.male.foot_r"), + ) + ), }) diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-0.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-0.vox deleted file mode 100644 index 603824cd308323eb879728653d088a9dbed516c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2168 zcmbtVZ)lZO7=O;c_rCXDi(1@ZHA?-In!#UOQ$ZI^L^hrO(c{YLzEFi$53=B zsaVt2G|0?EMwzCzM$rcwGDHxQB@u)SiSW~fK1B5G*YC^(2`Qo%ew^n#&pFSZ-}9V% zq;pG(3w5GYP(o*0zMu{lnVyjIoDVJDdBk{7< zv9Uoc*2Oxjn~ZUZgf6nwD;q>gOwL*tnUsx{=$sat6GJ(rnlx=HtC|#bD#N|fIYU{C z%c+p}Q$(O+aW0a;B_?eXld+5^P0B;5oC!>#sMB7ie-+YBzgkI7rEH?IyhEGTk~7+$ z_it|a!nJg!+20O zUhjQ5FY}Hwu?cy{^ONGrnvA7?rxRs$tZCOynlx)NmiK7Wma(mhb!Z|@?zE4ch#GnWjJ zWnLM^Ptyl^(9SZxj${DU+Prp`2hS1b&!_}xr2QJc< zKFGWB{mgK$S)O*uobZlMoJkr(nQo}UcoCE&`ug>{JK8TLk58!7T&107k; zq~&bdG-dj?^l$0krU?4C?31N`o8?OXmi}$Xm3-O^xg32Tit$vejOUBJBqx?Jts~fX z>*s|$SoYsK6n&>vcgh_uFGZ_eSd51&hiB>#GIriv`E1Z>TInOKmAS8p_bSX%0?rtHWpQD=@Gt z!N|}Tm^rlo3+7D0@)ydmDV~egWrD6(1t;DRTzW@PRa}I+ifLF^H4ANv=OL~rKuhH$ z99l9R{p+7Z^D7Indd*sF-QI}v23gryR8lW@F_`^U(d~WSsk`6hB_Az^&^u@d0DDY!F=gM)33Zf{vCl9P4@-LuVJ^ z*Pj~Eb}$czKFP<08-=)qDgU|t&S)-rH!s5ATM6!*Zu#H!-}$s3BfY2a-QL5Pzkd%3 zy9#mTW5La}f-_}hC@(L^=Be#ivGgLOs{`ZP#$({<-5%~N;_MU`W7qT^JU{;kHXhuE ziR&le`sdRz&|HWki)YR1Awg3_m_#I|gF!J@?{6;um|7Pc3_~<+HtDn1jd*4?-gZ{gxd(iqI-Tim& JmmhFe{seKsl7#>O diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-1.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-1.vox deleted file mode 100644 index ac7b26525a802e5494b85aa8f1c44e1be7add1e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1932 zcmbtTZ)nw37=F*+d*^1%oYPI4YijP!ur!-9&9-#u)XnC+_qSb5B$V8}6Xga6%~C_cb(65lrj+w7n$l4^XVWT#x8yFZ zz1&yY#T|8{rBTu5BCbUdmV1upthRAQX(%;ewTT--6IN?-O|Homxgu9_u{kYba#|ey zMdzfI%1#U6#HW!1R$B3#3(qjNXB^LXp1z(rjZt;R+PG&u#z>>F>aH<1Zj7n(tj$vQtk<(1 z7uIMbu=I0AQK~viKgS%_=sFkrSkjOA<% zr4#OPHk!JouBa<3feYc)eHFs#jN%-Pmz$2WScCd$5i+?i;?8lUjS5fSeBgqTPm>{pDZbo7gGzLA8nIxyBG zETs))I1_6V&S=IlfilcTuC3urnV&heQVFfYdvbBBRA3a}9dlVNaiuw1uLI}U3t>V@ zT~jJ&62`L^=22lh$Nn7iy0AY-uy)OQ*}GEAPpn$iK5`b854(Y;!J>JI7*Q|5I4pA*k;bym?Nr?FP@*7ow=S1XDZ8P~KOG ziJ3f<94JKD$;p^?Wje;M6-?d9*gb*;mjtq!`P-wA?k6A@^RRdN81z0r4!2&O2rPRV z-6H5Gek6V+y4wWjJ`fD_3a(zDUMVtewX z+Uw^OqPe;R?e(ST**F^~x7OhE))naA5ny=mOU#&(j|HyQ$4SnmLL-O@1tZrI^Eo~jxckn~BZ%LwS zcN%@YdoXnQD6+G&F=6Z&6c-m`R;&c&GoQgrvty`UFbgYRn}@DG;)IF*MBHwthYlmB!79r3y7*|Z1) z?*_PcviX1afA4f3hI>xn``rgIfA207bQa*sXM$U61ZPT15sSsJX-X?rEWHTnY{$6F zIP@QWaEIFq`F4tmuwz;`7S2C}4g2?C!n*Oe{>3!(Ckt?hGyD7eL%%RqQ^Pf6HUZlX z_oDMeAKtro86SN&gcrB&#ll_3u>6xtXgEKF%F0UI5kR5@{(u=041e>WzG1$vf7|CT h9QkLV4By>DJ-pZO4TkHX?Q!yPwnxuA${*t^e*r>fep&zk diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-2.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-2.vox deleted file mode 100644 index c413d4bccffd2e1ee18e61273d62ac65b2a53338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272 zcmbu8e`wTo7{{OQ=X+lO++v7*gS1L4QQ_->c`V2oj@+9(eP9p6B!Y z`22W2u`SyJqaxB$AALzles+npMH5XAIfja@a4Q~AZ0|@!Gs=#vRv5D^W^9GEEN;Xd zH!gR~xa^n_J7(D~Wmn8HuDCI-c4N!0#@NbsyQR8iso$mSz}9%9Y%E>3w5B^|Sw{1$ zxMfVcWmy{U#Av>8D@?nwRJWYETE|k`HrmrtUH752jOG}Z)88GpY=!!_Zg`!|ZI!9sh;s7yJ`)B3^vE0t6106B?^Un%qeDgUH!OkvT6p zEkgcYVdb!}`l684Ej*kOa@F>p7phvaY2KSd;&3jMOUYw2zlQm+VOuM0D8 z3)O{wqTv#DRJILapfc7<__U}Ss9^Fh_2#ZHgB9lQvKxh+BR3a;P-T z`gJ4hK5>i{o%vkRg7mrY`f|H}gERe~|S@ z#@O`13~d+Zi9{mY5|Atfe_+oGi(lQ{-=fafzpd*Ryz|c-cINJ$?YyfqgO1$uEyYXu M?$5bjUm{li0?)2CLI3~& diff --git a/assets/voxygen/voxel/npc/hyena/male/Jackalope-3.vox b/assets/voxygen/voxel/npc/hyena/male/Jackalope-3.vox deleted file mode 100644 index 5690feb0eee4752833d34472bd2d404d1b3392ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmbu8acI%&On1BOZnj;wE$?n&ZLPWGvRm7!H(fgC-P~zIV$zNw$`NB8 zL(xlV%4*K*G*Fkx7-cS<*HQGx8Ztx>lO++v7!u)MgZ_xrPinMB1B!Zz@SLN2D_t2|Q&A4U0l8c|x(XI}+?wHlsvgSY$~oMp&$} zWEjSh8eyHFZ0#~EIUz%R$@)1VvE+meL!tSGB{yUkR)r;Gh_Yy|k*hhXv#{#e8rr_` zjpl4|t<})bfEoA4giYt?sIdLX?=~B=v+Y^`O7JWG2?c&Tjy*11hpO?8HzI*tr2k3e z;!0%BPC>g+yiZs)D!g!2$mZWqYM}68)Y0QRu#EEaBoSK`fDc&tq9?`W^Leq>OJG6d04@o|QOxqYe?+6jqgJEH`SN#E@#VhnQ z2m`IcS@k>WoJ0d|;vF7Rduy3E5af%2Eo2UNu{d{~>IyqewdHJn-NWASTKe0B#9PAn zyTZ(eLVcN&ps$kM^=pW=HWK#PiPn`evayPE&x=I1HM6687yAc?IC1JD;`<|v9_uGP zd7Swh=gH5{r=)NNE|-fMubcWc&+}@nmq1euTQ@W^`raz0K5_HYEguVasyU}MqkDwg z-wMC{AjG2{&L&=F?n(>4{oG0HWC0_e*|>Js!2;#~dH+M9wWRu5n0>#C2NTi%z5fTF zr&&y0;`?K#ST}qWN5a9)PlbECgv%ZeUayzFiUGE4nnn_Fieg1%&OE%sLr(3TvN8@= zC0W02jNX&SDd{QZ&X-kWA`Zs%%>I7Z8Pn;d z3mt`YowlW9j0-71Am*5JbLPmkw#JyN=3j07(OUm~dVV-J*I2FfY~OvK=Xsy! z`~Ked_q@@qJA5e-X{isttRz3XMB2i!rbnDW%~rS-4=HwZ#KLK1$5tzhwXEH^+)-ne zMUA-BcSVh@zRT9wfxF$ZT~W*EnsG&pEx#ILE87uEeamuslpWZ%)+rlH*Dcj?M=i@} zpVe*|6R|8y>zx|yH*STA7)yQ2(N!HwW7|Y6+fv`HeY)3TkLnnO>TTQjQoZQ;9IL6R z!Ld6d!ltvc6np;UcaMjenU=-;rSKR06S6{H@^<_19V#a{T8lKfk?x0)^N%C5Ub0$* z+@GT(z9>XL7jxLIE^C zNm7I<#rKL|6v;ke;$2~8T)2KkTo*?v!7F5?4_=H38HS{#r5-sx*uPR_@V=3v*r-{8%&-RX;?C%@k#Hsh_-ydW6SU2hM zOJ-&!E3%j4^ZBR<`l(*?6wg-%X{xJW>xNo}-(1PWhkkyzUdH^*az4;K~CllUWRX?BU9-Jmx9-&*vYAtR>aez|33i+#QSm@AKdNB+WwV z0^c4x#k#?xQ7eA|w?H;P diff --git a/assets/voxygen/voxel/npc/troll/male/foot_l.vox b/assets/voxygen/voxel/npc/troll/male/foot_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..f8c2fb0c4f5ef84ffa187d60ed125ef0f7f7d2a6 GIT binary patch literal 1772 zcmah|ZA_JA7`~s6_necfMuZSxNFc!hg$~G9f*h0&!LK2DQX-ZNQ?#;?GGk1aI2Sq0 zl*l$yX>;nFhK5*c!&p=2Qs&GxT`hIO{9_LnV&S$%KKlkT#-S_jpq1Eft zheTv$b;Bwux$hBaZfL1})-`x&$}EaQS-+vB;f&^m=PX4(BO5Kn@yd*2WXAfaJu)Mf z+M#IPeT>r<#kkN%%@!0jqbMe(g_=3cH;$PR_A)-k4Dak?EHyDmhJK1R%-0dEOjs!u z7K(CA*eHn@W9icoqfFFLD@V~!u{LTP8&Mt=QA)zbW0*sqhq+cF%BqOCxtcMn!^-R4 zbyRzFSUkkADy*#uYp+Db(Tow3w({txSoYAw^$K~om=ZNcqRQj;b?-W=n4=7_4RdIV zVUL(?!eWT!C~_fx)+){*hWv=DG;7F7Y36%%M2Kt1#gK>6td05IdhWwZzMM^SR;^s_ zhFV3mrtO%B_DNK;MsrTBnXg@&agT~>Vrm~X_n?hCCvyyQIEN-bZQ0Mo;I6cX7>YD+NjK3FaIU%pVc>wh5l=6TC<}@th!Uc`@==m0>}s9G{N8jGA6S)1aXJg5aY& ztZhm`T4x64_2!~vG>Fu$1Y``PAotW<1a4#_sZ}uVWA+{rR9qFvTH^QkAcN0CE+wEp z`vshSZ8q*zrUH$xU{C~Ol;0>}%HS@+g(HHA(}J59X$J+vwSw>02&Oj+T4?VI2@ZA8 z-z`|`7qpcLx@!bS>0h-tfX>G*%a5bzM2uF0aJ)j&&G4){2QUTM-{0kL>Jhq^GAN;Lkuw{;RRNL;L37!pRKW zznP2a$vhk*=IANGtsez{{wnC{%)!yVB3wJa6o38RjIIN57&x1Ni+7SSjk!;qziDC0 z6X%bf>U`?_C21*W$eoAQl6-X4l*i`pT$qZ1`YepL6`-i72%ndpKtW&_i~9E>xi1+v zz7gDeQ*bUP2Y$aFTQa+`V%a4~Uk_$?&BoZ5kKS;13csDSH0;S5#NtJV(Q#luUTRCi z;qu^HXFwxXx^eSG!PU98x-2V1{5iMoR)(L8b& z>q0B=hXCTE;BT0_f`>mm;x~~|j9@VM#P~yge|g0P*toL>AI#6hnvM;q3#~-3sUDTf zmY}qH5js*6Vlg+~zP$nkd47}x7ND{$fZD1O@F#|Q9_yX^)}o_zK3d-?Li@WF|A{@$ I`InY|02eX0j{pDw literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/foot_r.vox b/assets/voxygen/voxel/npc/troll/male/foot_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..3d3192b71b065baaccb375e7ae77059b7f2f7fda GIT binary patch literal 1772 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 E2U*s~00000 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/hand_r.vox b/assets/voxygen/voxel/npc/troll/male/hand_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..9e134366b20c2a1bc29add4b6572e24fbb82e45b GIT binary patch literal 2912 zcmai#dyLgr5y$78Ip_TDy?bjAdB{V$E+8z+!-cZD2$ZF~%Cq6M7DS?CYk8;`1cHRL zu{4d?px7eTq!utCtszB<6f`DOVoK9kNP~@$2x)H2@7{m?%YVnuS<*yJNN+MZzjMx< znfcCqXYRlgPqv>Dk+q9gu49okZ6X_2Ze3Q-8-4{+K^{V$+_H7$_ zjIP%5Dh-Du-`0vq@NH#ORwVjb8IY*8Qld5jYjD+O^cD0foL8DbE3N2?R`NyZ)HR|n zS}sZ>uqG|gDVi=i-g57?;k<8nr;X?mZxXgr%cJiL?6XhGzVMBx3EK(Vu^Eu$Bf61z zVwse0jl{@46s?FPB!o&chDwaunOj6jRe_Y{Zyaf$x|ScJW^%?(h|fHG(1Wjkv)3 z6kD<2JOpA1Ez!_Od`k@EDu6GLzd)Y3_k1J41@aNF$%=#+u*rQ2#Kl<=%203~9652U z9^0N(!L8&)o56F31of?m1dopQ(n(7_jHGFvX*@x$?Zzwnwo+x}#@F`qUxD_PeJI9vT z6AOF|na_yAZPiMto_FwHwT2G1$%QJu5;i?6_%-7fZD@4Z;w{*H<_8?|aL5yj$G0Qa z0OvicSN!4M!+)7fHua-VYQ@n2pbrb3($)n?mMc|}^>-2)8(h+kMdP8EBo@IYH+yDY^k?W=9#O*<2oEhTpM~3od_;Zz8yYuJXLJe(5rGrjkF4< zi8;XcL{GR1xU+r@jP!<(OSmZXm4{D0VAEC0#EfwCSb|@k)iFbSsFJ4u4utp;{P3Yp zeRvCp1x`vxWgMzSjv?n1EShHry6`^|S0v6L)KBSYfeR78iM+)M_OdT}pT16-b5(6I z$cZme%UBBi<>?tW6j!1i)Un9*%kz{NscoVLE>R;SIC=-3C^!{fDE^dsYZB&WwN&aG z!KIFKSBKwq=4Bne*O@Ks`Tx)&&x0y6phl0gcVJ?!M+c5b{d12v`V?#mHZ2@85g(H0 z2R$kDi(^&@xbj@fz3h}aDQg8CPksIToPssXkG4M7@ev5vQd!4w3>~mHy&m6M{ z-^t~k%yFRywwQ!@$Qr;-%rVam@}tDNVZ~#MCEWj??Ca~Zix)52)vH(S+O=zTZ*7wcL**JiHkvl#>P?8jHWU`vmPtv@NYhfO*%&3Z2P+qiurtmF7tn|AJD>wa&Fjov0U>4(@pCAQ!lG1-Lw!xfX0pE0>K z!j4V(tiAr_k@nHTab~N&XeUMN3i3CkL{1(OyYRBu_1DGTe~W#;*x6-bzuzEs?`g5E z><Vyrj4@e zmtM15*WMV~&z(8hzB0Sh7WK}sr3<=k)#ADK#PWHzY4t+eJGj{{zq-w?zp>kf4&6dSsj(UoqJ(Z=Ypz=FG95^`5p_-Dhq7vFB{e(J}Vkuf;z4n%McNQ?0YJ({@fg zXlow7WODSdjodfVuKePD4WAhccP31*XD6SuN9Vs}gD<{dpWi;(ZvA$$UD-OuULsfj z??3BhTU$1MVEcBOeSiPccJR<{JACB3_RBxrwlxQywcS5IW6OVX#x`EOZJP(ySVPRD zg4n-JZ;O5Whx_qe@0e@-{rwNT{}}#t&7Ec6Jh0ThH+`aQ7~EpZ2i98u`W3eD@yD!p z@q8N`H)7~6-|yJFz-D!IT2J>3TiDla%NF$*U2OUH$$H@VO*Xh~x^4T`9NY2j1^;vR JiOzqm@*lNj$e92D literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/head.vox b/assets/voxygen/voxel/npc/troll/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..4323146ab3d0c18ed13718528fbf6d47fc9b1624 GIT binary patch literal 4704 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/leg_l.vox b/assets/voxygen/voxel/npc/troll/male/leg_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..a1b16691b37b039252b3bf49998ba706231712e8 GIT binary patch literal 1664 zcmah|ZA_JA7`~s6_rzK?Bg6nhLJ1B>p(FB@pa%sN6&#``C3593MJ*dCGsbj@bD2X; ziEJ}J+MG5gp&{1VFxJ$$lsR%O7tXczp7(FR`g?Uf$GKIT^WCo9_x;@8*Ymvb6>D<( zMWmsozL7$HD?OW|p zT0$kPRC-%SJvhHop6@BnV}!GCJ{$5Cdn@AwN=brraAp_ha-A-Lr|7eWwKZ#N&QG4S+l%v) z3&UI^>>=B19-PxbxJz;$L)+z%JI$HguH;dx5aDtyYm+Z!IHTj9 z{gt~La^t|d9&PL5EV&Z;$(s>FK6&Qy6m>!|UTf-vPV!3IFqY8P_|~{{A&X%g6r3>_ zxOeX!CMG6uq5kq?QGR(FCdJZ`@m3CUc0~|ASqZ80AX}b>oKA&YOUI-J!IXCeQx6Mf z4hmAX2%hZ`yg)nsydbiy6h(~{m=&+YC&MqHwp-BDCs;oq`0x&Mn=+Bzo{JgXg(w?} zA*&+|xxJYvJTnc^8~K>hDwy#RYxfJPt_oxo`*)>4`ksSaO2hvA=W+Jc$+%mc1uT6T zeIghpekFXOZ>M13s9^N0;O0fzF~R9N!FMYK_csb!Xzz>*4!7~VQ?M{BSXUwFtQ8#N zdE>k&+Us)B)l`7~4YSd`x*YwR7Gm_{*D*4@2a)ONsG2NFZANNpD)RI5k&}~yXgC*TMXx0D4)2|cfm6Bo?PekFk412tJ%`Q+ zZv7zm^A|x^djXF1l;GNhh4}0DW^^2wgx;^yaPdwC?qk{$_ivh$`Plt~Gwn~@zbrcw z^@TIgT2_RP+REhq?Q^owyEqR+>xxlQQi4y*Pog+_8guvWK}JsoZhR%U`-b3rK>@k_j~x_$8jv*u^XE|JB39DPoa5m9INBY@rMACLf~(h zalwP{AI>+LTZ&jL_E`S|zQ0ImG2Y%$i}zrAx1Q-bwdtN!DA6!R}B{{Y6Cp3VRO literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/leg_r.vox b/assets/voxygen/voxel/npc/troll/male/leg_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..57c36219035fcc0ed0050047503d94e049054987 GIT binary patch literal 1664 zcmah|ZA_JA7`~s6_rzK?BftPd0tpT%bVR-a^q_zug5$%J61j4i0v3&w8DqM{xyYfW zM7Ehqo73hbB!pTU#+o{pIA^Zqg1OetdH?pSzgO3LoLjXypY7WH+|P4=T=(@pZ)oG@ z)L{{+tEj1`kzGEKrka+jXFP|Ct~kU~#O5t6HD#I`t|NpIC#;QiMcc3zpQ}W>O6joD zPDCloy^1L9foDeZ%oowx7uMQFwDN_G@r9Lj2<97!DC3J5<{RycSjAf6u(soB(P3*H z*RZ}79nscd9SLj29Ptr`^=-rw$~ermuC}aWb;QzYqg~BjoWvEeuCdCsgf@yC6!TPA zTc4}7at&cU>-A77Y!!3J)sml(m$Br=-qtv-RYFb@Hk{Kk)@b@l!lE4VHLfw_O=$Mj zTC+C!&}wqj!X6$BHRP<~@fPw>)K2@z!LlA9o>tyGhCXA-U(<>=D|Ix~)R3d)x%JMK zAxBSp_E(misf~x|9L(|JcyEPqVyG?Q`O$dpX|3iRp_yl*y3#lF4Sj2TouP@eXS_tnFy)Hm+S=AvXGqq`0^kV`F2OnwrA&^fazt zzmD12S=_&WA9HhaxKwlHu_(IIg$2O`B)*l3)O|VdpDBSgE(&sL3y@o1jAfw`d@}hGD*FTtLxOFif)DR7w;>5B?P*xj zmyN=SAd~o6|xRHs4t%4;VvG%Z_?5aST*}pdiGV~l|JPrey&*S{7@wiu> z46J_{Ln4?YekJ%IF|=1OdO|RBUU2g={h(l^O7LByV19?7h5p`<;8+{adjxCzg001Z zo=U+O`PviFVg{WVUn}OGs`?0EM87j*HSYJ_q zjnyS+t}RDb+a^q$YQ@Zj4#dXBA~Q1+si~<5_|s6B`${zL*ug~@J)4H#Zf0Ztb`DOl z=fpX|tsew`{vzmY&%(+6d|bP<27mqDgzm!&F!*&GF5gMSJQhE3{)QDvkDcE=*Z#!$ z3saI%lf4A3g}LaiEQ!wFz9JceYcnvhH4pju`S`Tx4DtdaC>=O}#QsFw_)2i^4Z+2% zEcpF?>`d>$hIQkR{$9j)$7AyIhu?5t65mcr3if9VVP)xYv>iT#7q>3N?Qb$L*^-Fk z)aw8Jy*RJdmZn?i-U)oLdk1>^RANfg*j*di7>SU^n0xmLqVN_99 zS9OIkPK8_vQ<)zTt&-@bzfE5tS;wh%w#~?+fvvP+~sRgO_@;*ziH>K1vaiFjrvC(6Ge* z5DG7$?v-k^BN5Lv`yw#61kXMDhEYxOfN36(knSiEp%RlcAj&o|W!u;$W@*4;x|33> zrxY8JYRL*sRu__^)l;;FQI#sxKr-tc%?dO6i451@xIQbgT9K6fRHLf0pBiX;Y8Lhj z`-!owRG|jqg}DR!1N(#3jVKWk=rhlJL_BShxYp!T5xI6tv93he&M`JpjD-=6^iczS z*&@$_e%4!w&{2#k-y8cN-W z5{bg|6V5B#xA5N4PZbi_PD(#971oshdlHm>poy3HKj@jTnqOxya(3D&rCd`Y zDOW;DHRU%(h-yn!lxnoCr4poE3tFxOD_6Yaiq~BAmTM(Rm68%mHJ@V5$5buFSSdxL zKUPad)T$+kjBTn`N`dWQRUcAC0`rDk6`w0oN|oT5$Hz+GH!YN`DkY;|Yf_3;<@ZjT z>T^{&&iD;9`i!y0IH!5YLd#Goq`~0xU%ZtE%|;BV%R?gf4Q^QZ$Py=azpdTf-MDb! z0((v2vFfdR()HFJjO-bU@n3I6>r?G$JGB6Axx(!( z!<`ug_s&?1T<0+E+YS#LcbIv>A?K(dEx$*qHkFy)8LebQmk+YW9M z=RcI-PTUW7aWsxj`wU+D;uw6icp|X6f)mc+GWjd1lM@FW&cEbv?KOw@-lW~*aAvu~ z?>0Exe$rtp?Sp*|$NT9&;IOpKVSBg3fn^Ra)4%?q4h$@>;!y8&oP1&~4sY(l$(>7a z?fI|Z>g8w9UK@)=b0=fX!_)CZUl(?-b~y4ihg16;-u{WhOV91YxnCZ|pDw+MTYvs7 z`euy9wTrJ}=<4gk_WapX@uj(Kc(`j8mM!YQ>Lv5>*op<%v}Q5(^l!$cSGM8W>$@;& z)F@1wHVv(|d0qI32ahQ}R$_5qwfUB%ztn}ORy?RbTAUOMaW{vRCv`Juz1f$4bp z$UMCB#!~$2?;ElAg^@V+>(O}ggYmeH$)CFa-Ulb#bN|KJflu9k=cEZ(HDe04bsP({Tn1k3NI(N5Y4{bnjIZyk>pS*!n_ zzZuuewPoY`*t-+>-o7Vs;NUJCI{Y2{;*U45cK_4Z^|RAh@#E9jc;N;%_pQZ09N-ec zzY%UYeEj>n>$_H+kDi{Md-i|K``12y4!*H}8NNHSh7J8&u%d4rdU{u4@uQERYso_N zPaHkm*X-Z1XA$PKx1qCR78ZARVEMzH;J+Bn-zU2N*-hx*HWS;vIS)I&wdjBPK8g7+ Gb^ig=_N9LS literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/shoulder_r.vox b/assets/voxygen/voxel/npc/troll/male/shoulder_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..7cb763eabc50731f4215dcf0c5f8e94efadaeb35 GIT binary patch literal 2964 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 G)&Bt6qf*!a literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/troll/male/weapon_r.vox b/assets/voxygen/voxel/npc/troll/male/weapon_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..b526b85dfe1daacb1a312ba498d7709b8c0da70f GIT binary patch literal 2864 zcmai#Ym8M_7035E`@HU*2lKphUo(sY2*dDjpv(*cWhk%mYej4>OQt=Y)O)EkW1vS!E1MmOQ-zLP-&p4`4;%|G3M-)}r)66>dh zz|Uh4g?^U!%&nir*o)2v63@>I*kj+%iWY9@rxBb2{LuLgV-G(52wvzk4Rh8-AoTq_ zU|kVjggwL-zzrD(tcx0n8xYesS=8)h4ZfEr)?{&Dh;8x^6asvnLEEGao|ndrUS4#Z z29I1#YO83u^=?gI(>SzQVlDf!dE(owV6ice+}yM5hdC%Z8@_^Pvm(66w|S9q1VZMa z2gfI-+plM`hKc=<54NPyW^w4{Q30PNuB(f)I|POr8TRO9f$yQ?v3D;mg1|EOy)?pB z^t?Qn_!?^FWr@>rIVRMcaT0?9F^beD@zbOpVE3p4H7LNZQ~#ou+8W=;)t|Z$FKNJ! zZp``u^-72v2IvsG!FqY2hF+1}>S%_p=BzDJ_kcA{15V<2ZXS4P0nG?r!nZ)|#GL{D zBEHC>#imIGPR+~1D!vM~E`Tkm5xeB&el18t{I(WmVGFftN2g}80B)fc8~d0-prkFb8-pc z#vpzH)HO!MHKlAHh8dpsom0e8wh5aVvYkN53YM2$tEt=$~wwqk)oM{g|S`E`; zEnuxlee6jEUfohdlgEsG>K8ZAhmGV?Am0YpFU*^$VUgS#$c^4f8u_}hyK4E9K zy5-!s3-F>zUg{IWui&rZ2SJT>HJgS`huC4O)1+Q-3KiC(m7p2Iiyg1ck_R<{7q`GI zqf@q=FFg1m{1|@Zxb5tboZ?B`?>1s~p$9(!A^aGA1V8Lx?7&$jMY!$gb-{xlmZ?Ab zk>fY<)<6_K4*%*6|Gk43@;*HOy7kdDf3$G?aeDbs89=Ugkw>$(% zh5dt&_rW@@<8Vi8ot}pm*5I(002I))#JAm?19c1CyT<+lcm=dJuYPQq2_F3Kjf{-w z^5x6Ae*L;`+_<4zw{Ge7?c2J0_pa{UyQeqTy!}uNzr9~Aqa{_o+N<8D2h@Ldq0Guq zW?xa}e4EU>CADlY>iULJ{glzH%SOpQqo(6V?aWITjRw{&(437Unmx8qFI?-^iepBb zP8;pMWb~bnSi7mJo;`h+PBu|_*ab19yEIA2SzVHe^3{HdP2Xy`kLYte~kRXJYKdp|S!_{&BYXUtH4f4}l6hqeCk zD>BEAs`EgnuKoDI89rU5cY1pC%(T;bbkR#1fAM*hcXjE*Urf`r9TmMqt^Pm0<2kME zTRzZ%T>AFGOoxx`)zM?$)K7kQN9zwgqrE>mr&ZrSr!AN7XxrF&{nbb&0s6P>9ivZv z{UE=aeG4=?I{HxmC-mRIg1P$Ip%wbptSQ<&zFn)vHfVIyYAt#EF%2(Ur14tEgwOeR y?_aFB1N|BroUJ7zgIc+CNZew%->2V0&u!KC&RN=-&e!g*Fa96jr=0)#n*RVT&iSVR literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/truffler/male/chest.vox b/assets/voxygen/voxel/npc/truffler/male/chest.vox new file mode 100644 index 0000000000000000000000000000000000000000..f979ed09059745929ed269d086736da1c59c0703 GIT binary patch literal 15840 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/truffler/male/foot_bl.vox b/assets/voxygen/voxel/npc/truffler/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..8b1e89430e27564695bc203c03283733ac918022 GIT binary patch literal 1412 zcma)*eMsG96vxl+_gt4`h0E*v)Vr%TuMU?lseA1%wRtrsYLn@fwQ%Ldq#@#*To&_& zWXon|Zo!<{5Q~^?Vp0q-2^oX2hK&e9WJL6De?;`(r}MjO;b>G3d^pedob#M>p5IGT z-9gWoh}7;4>{lblqC^@4EtQWrLYGR}pgg1;Y;FnoE#2sLv^39H>a$!y+rhSj#xlB>I?JLjF6sx{wbYYk(9#>um_reZ0g zelc1n%BinJdTNepTkDDXY;o$Fpv##PLl_XM_{C^lW_!=|L}9 zpQZ!AdWE^*M|kE##H`yBX^~#M0zj{4)Ozd6^09D$Jnf=^TzWmC{iygkKOQx`o9v zLP>fGf!r+myIr zc4eHHm>81cHsbMkDDZhH$$x?!g+9D#Nfd6)V))HX%zWhKhwHhl-pu2?_MDp%Zd?_9 z`cCKz=5Q`t#PX$be*LkLuG6s$ed^}Qtz=foxc~lMy??$Za{t!6G{yr3|G0nXKq+JG z<*Z!nhqdMZegDHH`E*rmr)F~^<;so>H;ujwii(POuXKWK1(WO?>?b*#%(ah&+lK_E zrttZEv}gA4T-7WR?jyb{p82zP-{Hv={dUsRc_Vw2Jv&EeJ3T;BYa%y4&t|?QnGt@?wvbG$qI4Ih5J!c)fv+0#Ek&4oo8FR$SD`?;f|NVLN5 wm=$5|tGn~9>G$h($ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/truffler/male/foot_br.vox b/assets/voxygen/voxel/npc/truffler/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..8b1e89430e27564695bc203c03283733ac918022 GIT binary patch literal 1412 zcma)*eMsG96vxl+_gt4`h0E*v)Vr%TuMU?lseA1%wRtrsYLn@fwQ%Ldq#@#*To&_& zWXon|Zo!<{5Q~^?Vp0q-2^oX2hK&e9WJL6De?;`(r}MjO;b>G3d^pedob#M>p5IGT z-9gWoh}7;4>{lblqC^@4EtQWrLYGR}pgg1;Y;FnoE#2sLv^39H>a$!y+rhSj#xlB>I?JLjF6sx{wbYYk(9#>um_reZ0g zelc1n%BinJdTNepTkDDXY;o$Fpv##PLl_XM_{C^lW_!=|L}9 zpQZ!AdWE^*M|kE##H`yBX^~#M0zj{4)Ozd6^09D$Jnf=^TzWmC{iygkKOQx`o9v zLP>fGf!r+myIr zc4eHHm>81cHsbMkDDZhH$$x?!g+9D#Nfd6)V))HX%zWhKhwHhl-pu2?_MDp%Zd?_9 z`cCKz=5Q`t#PX$be*LkLuG6s$ed^}Qtz=foxc~lMy??$Za{t!6G{yr3|G0nXKq+JG z<*Z!nhqdMZegDHH`E*rmr)F~^<;so>H;ujwii(POuXKWK1(WO?>?b*#%(ah&+lK_E zrttZEv}gA4T-7WR?jyb{p82zP-{Hv={dUsRc_Vw2Jv&EeJ3T;BYa%y4&t|?QnGt@?wvbG$qI4Ih5J!c)fv+0#Ek&4oo8FR$SD`?;f|NVLN5 wm=$5|tGn~9>G$h($ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/truffler/male/foot_fl.vox b/assets/voxygen/voxel/npc/truffler/male/foot_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..8b1e89430e27564695bc203c03283733ac918022 GIT binary patch literal 1412 zcma)*eMsG96vxl+_gt4`h0E*v)Vr%TuMU?lseA1%wRtrsYLn@fwQ%Ldq#@#*To&_& zWXon|Zo!<{5Q~^?Vp0q-2^oX2hK&e9WJL6De?;`(r}MjO;b>G3d^pedob#M>p5IGT z-9gWoh}7;4>{lblqC^@4EtQWrLYGR}pgg1;Y;FnoE#2sLv^39H>a$!y+rhSj#xlB>I?JLjF6sx{wbYYk(9#>um_reZ0g zelc1n%BinJdTNepTkDDXY;o$Fpv##PLl_XM_{C^lW_!=|L}9 zpQZ!AdWE^*M|kE##H`yBX^~#M0zj{4)Ozd6^09D$Jnf=^TzWmC{iygkKOQx`o9v zLP>fGf!r+myIr zc4eHHm>81cHsbMkDDZhH$$x?!g+9D#Nfd6)V))HX%zWhKhwHhl-pu2?_MDp%Zd?_9 z`cCKz=5Q`t#PX$be*LkLuG6s$ed^}Qtz=foxc~lMy??$Za{t!6G{yr3|G0nXKq+JG z<*Z!nhqdMZegDHH`E*rmr)F~^<;so>H;ujwii(POuXKWK1(WO?>?b*#%(ah&+lK_E zrttZEv}gA4T-7WR?jyb{p82zP-{Hv={dUsRc_Vw2Jv&EeJ3T;BYa%y4&t|?QnGt@?wvbG$qI4Ih5J!c)fv+0#Ek&4oo8FR$SD`?;f|NVLN5 wm=$5|tGn~9>G$h($ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/truffler/male/foot_fr.vox b/assets/voxygen/voxel/npc/truffler/male/foot_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..8b1e89430e27564695bc203c03283733ac918022 GIT binary patch literal 1412 zcma)*eMsG96vxl+_gt4`h0E*v)Vr%TuMU?lseA1%wRtrsYLn@fwQ%Ldq#@#*To&_& zWXon|Zo!<{5Q~^?Vp0q-2^oX2hK&e9WJL6De?;`(r}MjO;b>G3d^pedob#M>p5IGT z-9gWoh}7;4>{lblqC^@4EtQWrLYGR}pgg1;Y;FnoE#2sLv^39H>a$!y+rhSj#xlB>I?JLjF6sx{wbYYk(9#>um_reZ0g zelc1n%BinJdTNepTkDDXY;o$Fpv##PLl_XM_{C^lW_!=|L}9 zpQZ!AdWE^*M|kE##H`yBX^~#M0zj{4)Ozd6^09D$Jnf=^TzWmC{iygkKOQx`o9v zLP>fGf!r+myIr zc4eHHm>81cHsbMkDDZhH$$x?!g+9D#Nfd6)V))HX%zWhKhwHhl-pu2?_MDp%Zd?_9 z`cCKz=5Q`t#PX$be*LkLuG6s$ed^}Qtz=foxc~lMy??$Za{t!6G{yr3|G0nXKq+JG z<*Z!nhqdMZegDHH`E*rmr)F~^<;so>H;ujwii(POuXKWK1(WO?>?b*#%(ah&+lK_E zrttZEv}gA4T-7WR?jyb{p82zP-{Hv={dUsRc_Vw2Jv&EeJ3T;BYa%y4&t|?QnGt@?wvbG$qI4Ih5J!c)fv+0#Ek&4oo8FR$SD`?;f|NVLN5 wm=$5|tGn~9>G$h($ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/truffler/male/head.vox b/assets/voxygen/voxel/npc/truffler/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..ccaf7bd9220e7afdb00cac3384a56acd26285b97 GIT binary patch literal 2992 zcma)-YmAmx5y#K{oaa36UXbNpV7q{2p`mgS=v69Uxkwwpl0qw5LzVZk?1m81l1)un zL#!>bBGQ@^5gUTW6kCEs(-0(vG)3s+ zGv_?-wnrZ8KdzM8^x*o3S=1}FQd`&WSlcKYeiM)$q(UCszGHnSqVW5J#-7bcw>Nvb zz24JPn~~mVhI^wP?(Xs<-3_G6jdXSUk)DPd>8bQ^Pt97}k)F(&St~o-n~}06JKWV3 zMtU^%+QIO{2P^7W9fr*McG9(GSpFo@pM=nf;@=-udD&JJ}u z)`Al(dp*?U%uoZVZ>*XX8#rCo40TyO)UYMS>}jxXl)b?RF_}zMk%-j9WQz^S!E_R9!}wOixK>0Dh{s3M zcLP^LJ(|8N`k?58q3?#i8~SePyQc3o@tWRidavoHruUlOYkFS8UD1DquIRs||BC)A z`mE@&!e7y6O`h6PpLH$G95m;eIcR)zIVZm+zb>4ZgJBNY`&LeNJSRP#3kPOVB{!~_ zhhsK|y+QZMj90<7Eimt{5;{k6=>A^ygyS+NKD&sm0_C4WU; z%gnNOt;{^K2b=jh=4qIxt=C#a87)E1@U!P;3UVv6-<~>?;?!%f%;BM`#B_yp64> z!88%y)XX+CE9@0qHG^!NWJhtHQS;U!|!L-=usqDR^lI z$JBNO6CV$rCs$A&0av?r;5;hVj0VxR-JmBm9Bb;z@XOk_Gq~BLW<^{@Tm^?pr%oa+ z83%vv0{K08J!b)X;BEx$QCZ$Tb2Y5mG#m7&hD(iq4VMgN1~U_v!K@V6hBu@wHCTG< z=yAb!P0yK!r`NU>lw~$05BE_UW?sHAP~~+)!^1()?j8!9=KF+sT};_QW@P&<*hid zt>!(NwzmZn0V8^_99YJ}*>DeSrv@VvpNY@ZQhBf(SXRT8Z?@BLE8h{*4(Ks};i;Kg zYFlCpml9`qPn!P(`sg)hx}Ay1#8iPZzC$U(i?_bzq0c_3+|B>pl`B`u=;)|?a8${< z6IWzT-#_GUeSLEI@+K+2*Vh01ze?|_$ujNB{nG#JLK!@Hx2UyVR6C10^$Af|CQI)o zB~yl!+%~S{&exTswvw(fB@@|C{;85>n`+rG)GIrln<(G9FjLlyD%pHY$yd%QdFDN0 zH&2&Y%>kJ^x9XMTY+3x)9Wvz!C3Bwx`?!+(E-6u8Ape0R>R7j^ zbA9ss9TVitrzXk!_spc#9kwZ_AI*ACli(Jt1{n%hZVz zq`$vk77q@{@<sS8o`kz?7NcOI|TQ=T4MOGvC%+_Du z1NR=4T`wGxsXM30yFZ&J7j{gOqx9^<{(qRi_!X?}Ti=nryG5RP>5PoMdS1SL?$`4D zUtN_?k326A96Tu-e{e~*zJ66!ty(1?Kt&}){x0^alIy>`$?rP%>wlf|3U9o#vR=G+ dQEuJKo2UPMR+NvN{cHbmwp)E~)j!5p{Sy+_3J(AP literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/foot_l.vox b/assets/voxygen/voxel/npc/wendigo/male/foot_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..309f5806cf325d8b9f4dc24f3047c6fcd5ff1313 GIT binary patch literal 2132 zcmaizZD^Kd6vxkfUFTf)v-RR^bGpskobOXB&1SyUd|5h6ZCRqzEFw`cAy$l%CDj3M(1%JkMMyOA;d!SthvWStb#Lh(zD}5Ye}P|7-Ormfi5>%P~m zSzmWZL{=?sSxqBN8IiRuZOymF7e0KIQgRDfzoD(AOu69W6A`CYNP;VxrUT}+;GGOA zan2Vl)q;y_FN2;aG2)o(9b-yAQDV`iRxq=IGx~`VizKY?=@0Z1B}SZu0T);&rJpD< z;*@@6FP07{G3FV4-g6!M^{$vWR}3lZvOn))ZC^~;Ti`6gh`ORPUv$9=n);$AW;~1i zDQELTvuPo)R$wicaYav*b1AJ6Veb-WV~<|gA4%y;>GLH~7oJPaG_I3m&=VyV;TcJq z3?_jXQR0b91_S+p{y=}A-&421nD=2oNy6R}&fw$BmKjjmzNI8>c}IBQ}%7nv99KvrzPqgdtfYB)~RC; zoQ;?=rtHgNKG(#|u`YeV<$Pcstp&z|u}*1^OSwO#pVlH;%Dp9=hZ^`yR)c1JQ08XX z6Jy@z)qCpab4t8;`lwIaCK1)uyQ;Wh@gf1NPZ;;UlR1bCpdpxaOou9n*^UU3%-0zaBZug zjqfk56YPJM{tm&?X@ZY8&qT*E!If7QqIFI+wl~*fSL;+9+AOluXnS-qc09crozHK?-rZYq`cgmozP*62ikI>A_XAkeI0IwKM`CPcIc80(N8??S zF@N?nG%uWmH4n|h{@2E$_v3o}bg2Q?3e)i+&+O|KTs|xKt6JqSc>0% zUW@jpSpk# zzPW-C+uld{t6!u3*mX=j^Cy~`ns9@yNQU4K_$z|zXa4T*I=`>~i}NQO`p<^7XS@G9 c#z@>V?7n|uar4+EJ27V7Q>eMSceq^n3kVnP)&Kwi literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/foot_r.vox b/assets/voxygen/voxel/npc/wendigo/male/foot_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..a6758dc217b470aa1060b4159f832aa312d52e44 GIT binary patch literal 2128 zcmaizZA_MB6vxkfo$I>q2eiaM5HP?;QC@sWGYmz;7g8uRw3wn%YdU4*)~GRM%JQ| zZ!78%k@_{Yn<%6zCbG4*sb;Ew;lo!+CsW9_?M<~)Efqc{5OLNe!_bU58;u&ZNoypf z#2Fnkkxe?UtE4PZVu*9$s5SIi+KCe5W#p2^xukQn6D7tIm@%WYhqMzVhBzCJx{!Gy z+KCe5VSZ=Xi;G5;7{-Na#;kgs{Tk+Dzd=OF{;cu2bu41efU^XSSkB~h%!Mwgk&ann z9BZ*ZV~<=}N{P@WwAnPj7uMy@)ayZzvP6mT zutpdKsW2ptSfa!Psetx?_JH<)cFVm5^jQr@m4xg)JxXs zIjAcUzf;cWJe*Vg4mqQtFXT=``a|{}viFd882Wn+I0p&2N2TQVz~1~0{oN?{NS*Nk z;{zWbBkF5%7sPn!@0L3=+`r+z4bK@L~&kNEG0K4;8;IyYdgOQ>~y z)<%75ql9WSU^K1Y+H}6B52#H`SQGTC3Hl7BGeN>>&}WGfqx890!r6eis8bqB=YoFg z0@eun4W(5#;KCqbiH3|Js;tW%Ttt7wvk~)o=`8zUT}@+5TA#780c%V`jbRUlc`bV| z?7^@H+LW_|jy=$4X|pC_sH=_jIp^c4JKCIKk1_UP*avNtCS;z_^{b}$xrqLV=Ofy^ z?$Q$K(l`(Ip)tnW0ZUY4%oVY|vc57WrB&8Z#w&9xWBIO@ew(nCXNcn&$DRyp8SczD zKbzOn6I(W{UBmBs;sKw|&Q9DtCfNA-2j#oiosE?{pFqv4 zt5JHg5>n$Jt?7`{k3dGUkx?(m*(WHknU4iu31Y2+hq?rrM+Mml!Ls@(sN0u;rbC%{ zfA~?X?-Vq23tkx%97yqOLmmoR;+Wf6hKiwTw_aO=$~G%U+QOHCXd4JGK=y%e1`W{v zjiX}GJgit+ikhk=*!*-Qj=nt$gQw#7>VJ zb@=1gt!O)(fg^ocIG@VJ9TZMFfAfSPS)cfB) bdiu`GeCbxxrZsfhicoYcAyy0>OR!Z? zVwtUJP^ihU_uxudBQZ3QWr91jB!rM5(f@u#`0wieX1`+D3m5nOJoov!pSO9-_R>Bg zYFt~tnFZakMBD0H((%lJKbPS!av0lpwA6noS>exPIM$3fMveI_%QKqebRrPe`qDZ+Y0bJ0r8S{3ZYaojTDZOvt|!Ui zGy9PZ9qokHL_DqHo>B48s(7F^>pJdR9S^mPb4}J|Jd}cCgu{2-8$+vDU>I7*Lc_4i z@vMw-A1t|Nt6bKtZ>?eJdP+upEu)+-8dw?il!}I0MSa7tiqD$un(Yj$qug)QGlK2R zi4okFjD&_^WrS--xORl=L_)12+;4{B?JC!8we9`)}m>7A==U@bTyTuZ_hGxzpw%WuQ%Z8;if73%90|~E-S$^PnBa&^9r;# z5PDuDoO*+B^+Q5>{v6a-&cm+i#pu{jgXYRSv@I{f(T!yoY+Ztu=hmYA<<01RZ6}T# z+KZu^!x;SGI=&mbg)2XeV0HCE%*vgC*?GBGT9HEa;`vy)tODuUrP%Ux4UWA%8w00P zxO1}-cSo!68P^=_C)~PB`0ZyxS6eww_B@W^^Xu`)uiMaZBnL;mBrc2>;4Vt0oxk-- znwtM4^D^E1ef!n}Kb`_6hfy^*@1gTo7Z*Ns{(`bnh6yU}egxfp$ z>Gt=-%}%1TvlGv5x(Mp&!px4D7&`G_hldLJ?GzW|qj!3-X4P@*KJqSRwdP~=t1=9= z6ySJiDgIqQ`W7{os>;n#-IES9IgZSX$b$t5$1hV&ig50;RAa!;U<(KZGuC5OE zxD|34_zP-+FnQ@gf0O*a{?E>T;naUNt-Rd--!`^nVy2Dz$Ce46y>35d)x3nFB?Hs> F(%;aYpW*-j literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/hand_r.vox b/assets/voxygen/voxel/npc/wendigo/male/hand_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..8c252edaa82ae3628fd01a60f45f3f5bba172f08 GIT binary patch literal 1772 zcmah|TWnQT5S{%z=RW$tURv5>TP_s(;30^`Lc#L5LaPM}+Caf-31Uhmp(JzN59_E6EOjUif3p2pKtUtr)YK#vLt3 zEvZqmYRr-zaikh?v>LHCv|J-;+*lg7B*z>n#taGGE4f~eI#P}bkrfCL_mzkRk|A^~ z&?**?aeXDTGE!#wf}s@qifh>lmF-K-R%Zp)THjbF<7n+!tJyahY21t@<0;{0v~UAM z4#(CrWHY3lK$r-h7x$!!^I7pg>3AS@+!LC4NcJWBGVU8;10x(y$(Sb@O0i`q%~r>J zp`481b)nfZXQ5o?WPM=`&%wQAl=nt`DWid4U#lqhj~CHGB47uuZ6?fu~y0n9I5#{hxf*qQ_R0Iv!)rO2tsB>^B^^FiBJh_^r}5wf zVbd4Gn45TrzY+;tzupw4aG~MbX^~r>k5#*#LhAK3s61T@N*Pc`6m<46&~QF-n+OH_ z3Dv0uSojUW?I2|J5b}-_@-u|xO))g?&qeFuJbXCxI5wmS&Ao)z1_%eod2e$OO4^f{ zm##w1U_FXE6G$E{LREh$mfl=|f?b4phY1V&2zA#8^dk4~c0s+_pi2pSuwVwxKQR+` zR~G|~bFhj>ZeaY%_=C}VfH3e0;re;Pt&1Gj6V9dx-)$w_-%Dua_&^Kc_-Xwz_xo0Y{r)32? z8VNlw6HdQHxOR+?nm-2(Rr9c`W-&T9)S{&-AMMMFadcxj2HTdP^@X+Qcy%+d|^HQ{B0XLkL2R0m%zpGLfl8`l=HVe zO_TGVVqK=1zi;1q;HT5T#4xJo=1)6+O-a$T^B0zvp&(g`qVgol7FDCLrw}*4B;4J} zPq)7xZcYMSU0ry7(g((A zfT@tnz~4}J2oskd@tffH^?&()|ALs(Ug@9w4^ElmOt?N>F5EnO-G0ofeFeo!2BxZ| Fe*nAapLqZP literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/head.vox b/assets/voxygen/voxel/npc/wendigo/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..9632063d1f9c655e40981a3c78b929b8c04d4009 GIT binary patch literal 3164 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/leg_l.vox b/assets/voxygen/voxel/npc/wendigo/male/leg_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..3567514b3f95713275577447c68523dba8e2f85d GIT binary patch literal 1528 zcmah|e@v8R9REH)-n;9k7{>tz0iGZ~)gZzUv_rV`C^V#)oQc}w$GmD`~7@>KhM*7 z;84*75w$gi_wz=-8$=!9Na#UF;H4R?qWc(!4oAXC!3SO^7)r~8lG2pIV<|E$K{_F& zE1{HTo!geqE)7$V!8*wt^W;iM;j*OGCTYo>o6piz(y){;EUBcWq_(A$wn)cy?6oDd zFr^mE3+6;ZDvrr|>G+djE8*A~3}KUEJL%+i*-|^XIkt4!N(xJ`zjB}z*TVH_#j;}F zkv*0aG9es0A-EpJJ-JL`nS{1^5~dJt&Y{@GFo}B+T!+wn=AK9xHc1BO6WoiClpxMa zQd>MM)@ktDSf>)ixrt{acxJ?U z!Fs8jdKCA}P{jVkb0?lH--{Dd6VHLngM0Thr7x844!mNq819S__I;YdX7646<@I7= zq0OOiDg5QS$O!t-(DejDCw8NJvK|yNKz;XvE<6HC`H;~@$nGaphDuTO1;NutcqmTD z93}WHLT%dvXzkBHWGEBw%{_{i7@>Wf@X8F~)GhXH_oJXUfZ|vM>XJd^MZE}&_)#%c zi0T`q$nGK(4-u*+2#xaudYAIrk+U3oz3CNyx%VaCslKN#aD z2{RuO7N!Y{mst)HE`$hQ9VDzACq!62*-02Z%K8C9b2;IB_f`zF5SHI)M0>3ty`caG z+siO?Qd1$OD#4}Ho;aKMm^tBS=FA^qSC(NHAgtlx#xS|+c zb=weasYhpp552W{7};BbWcPMNo@+wi%li>~^$3PfAIIEc3dwJ;s0WwqR#XIYN!qIPi2mM&HWE%=rL*S**ay%}RX2Ig?X_rK^PBej*I^ zmf>9dailIayM!0>1pYGHYJR7_i7#P5_`({D$L1aas5|^1FS#XlzoVXYhL&&23_lGh2_jumUUxwgK&U@}XU(b2Y zy>It{L%vBO>S&4VXGOnTh`J)t@Pp=om&U>-x{u}1;bZCMX2%9dHmJ!mDmSka@WS^E6WaW5kT4-8EalRy5MrhI?X)#DxI7jLv%{-|~ zVb2g*4I#9Q)Px~4kr7JhLYmr)H|sGDW0P4^SXhLi6#JzuEtHAFafi=mi{c{&F}lKi^@xa4GWTx>68wqN(Qzgiq{7^;9D$Yyl1254!LOXu*ks4npxDp(b33 z+Aj$90m4H`Lg5&}X%HGZ9zgqG0iwf&cyIPmv?U0g6NFc?gj2UTx6_TXem}|+0R(d) zcw!FtN8Jddyr{cTiQ*nY`7oh&lF&RypywHX$PSu#7&PO+yOkR;{a6uh@A3fco6y9R zBP>6&{J}DDl92t7Fh5OLyv*ki;X;`3)j`6_aYB^OC%Xw_N7)`Hv{n<&_ijbJjj;Si zGddgG=nwlb)LDheWA#Y9umjoG+A%lWnfLGXdeB_&#WPP;;aK+$473xHFA}C+C(NB8 zgtu%$Bv6i?;5NkC8qpnaqQAj|(Y+PO^=?P>xfTq(ydQ~Ik6`5Vam+3*AouNceEq`` zuKoBub_HuuQn(SN&O+2x`w`r>1v~4j5pJ%-fu|cW_Essf=l%F)F@TkuHTZ-vb1A~o zRl;vS5r+D!a4z{c7B02o&tJO`8!5o3?!e_+F08=2CjZ_iDbN2L&t)zClYOngcT>RX z0%|rp*X189bFa(aRpCRi-wStzAHJ~0#z(UEsh(p!w1pI2Zu>cY6shyUW6ab~Ts)*au=ac2zR&@va{fCsAai@`UmFQZD{}i literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/shoulder_l.vox b/assets/voxygen/voxel/npc/wendigo/male/shoulder_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..8f3e5e0882d05c9f0b7816bc64a6e434c236adfe GIT binary patch literal 2004 zcmaizZA?~W7{{-3-}iOSgT07>AYg!xqP+N$W*CZvFHZ`Eh89yaYE7q%&U4PFF=gat zR9iWVjL^24nq#hol#W===F1$Jo0*wwZOt*~`re1u{PyqvV4oV<*?#-q*Z;b%`{kVb zG_T)O+AkuFE9%!#_17kbx z87h5i292`DF(&ERq6Tkh-Nes6GPOohgf2WTE@g?FdP#lCKHRq zq7qs0BF}hfQ7^V)(w;G~SfVEOd=s0%(6^Bz#bQvc`r=thmsLi#^YU z#&eN+E*8VsxJWFOh;!_9p{G=znjv6)znhN5ln@=YrT! zt)oX3rALegu~m9h&u8qjkLrBR5wM=PAc&P%lL(zjaPCCf+C=P#+C*qvBDOA(c0@Tg znh32jPgGg!bL`WzS&<{wWwACZQeriWYiGsEymD@3Ug>!@!96Epk8>I3jN!aCD>VGx zM)=7oq$4B^Y|O0q6EMjpvt^6rpxe37&qk9NU|hpuIuR^Mc^;Yl3s{3sSRZpuTbz zwpPza$Lbn1SLUH@aS`^fDZ_B<0<=840_`uYLwCFd`}XX>$mLNCe|Hhz{&)pvfBFH- ztLI``&J;|~%fZ5mB&z4n#?nOm^P*#CJhPF^d(O_WS{{?^B3{QQUbUM4z!|ISsw_lJS8 zQB=*$yXX0LNZqe;t!|euSJi&LVki4CSZqpsubCx40Ea5c~yuT`+d~?*7Jj qzy2@Jzi|9Nn^4aT{CAF-OwWXU|Ku{w(^rO=R`Vi?77R^PD}MtCy`Yi+ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/wendigo/male/shoulder_r.vox b/assets/voxygen/voxel/npc/wendigo/male/shoulder_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..5e827ba18614a3402b90a2d10c23e16e1be9d46a GIT binary patch literal 2036 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 X7n^iG_r{K$v*xR|`0@j%%60z*w#qsz literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index 0d916f3f7a..28474862ca 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -406,4 +406,32 @@ central: ("npc.rabbit.male.tail"), ), ), + (Truffler, Male):( + head: ( + offset: (-8.5, 0.0, -4.5), + central: ("npc.truffler.male.head"), + ), + chest: ( + offset: (-10.5, -11.0, -15.0), + central: ("npc.truffler.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Truffler, Female):( + head: ( + offset: (-8.5, 0.0, -4.5), + central: ("npc.truffler.male.head"), + ), + chest: ( + offset: (-10.5, -11.0, -15.0), + central: ("npc.truffler.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index 791860d0e1..aa991feeec 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -520,4 +520,41 @@ lateral: ("npc.rabbit.male.foot_br"), ), ), + (Truffler, Male): ( + left_front: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_br"), + ), + ), + + (Truffler, Female): ( + left_front: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.0, -6.5), + lateral: ("npc.truffler.male.foot_br"), + ), + ), }) \ No newline at end of file diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index 0d79798692..524807a21f 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -30,6 +30,8 @@ impl From for super::Body { pub enum Species { Ogre = 0, Cyclops = 1, + Wendigo = 2, + Troll = 3, } /// Data representing per-species generic data. @@ -39,6 +41,8 @@ pub enum Species { pub struct AllSpecies { pub ogre: SpeciesMeta, pub cyclops: SpeciesMeta, + pub wendigo: SpeciesMeta, + pub troll: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -49,11 +53,18 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies match index { Species::Ogre => &self.ogre, Species::Cyclops => &self.cyclops, + Species::Wendigo => &self.wendigo, + Species::Troll => &self.troll, } } } -pub const ALL_SPECIES: [Species; 2] = [Species::Ogre, Species::Cyclops]; +pub const ALL_SPECIES: [Species; 4] = [ + Species::Ogre, + Species::Cyclops, + Species::Wendigo, + Species::Troll, +]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { type IntoIter = std::iter::Copied>; diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index a70d2721cf..63ce8f192c 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -42,6 +42,7 @@ pub enum Species { Holladon = 11, Hyena = 12, Rabbit = 13, + Truffler = 14, } /// Data representing per-species generic data. @@ -63,6 +64,7 @@ pub struct AllSpecies { pub holladon: SpeciesMeta, pub hyena: SpeciesMeta, pub rabbit: SpeciesMeta, + pub truffler: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -85,11 +87,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Holladon => &self.holladon, Species::Hyena => &self.hyena, Species::Rabbit => &self.rabbit, + Species::Truffler => &self.truffler, } } } -pub const ALL_SPECIES: [Species; 14] = [ +pub const ALL_SPECIES: [Species; 15] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -104,6 +107,7 @@ pub const ALL_SPECIES: [Species; 14] = [ Species::Holladon, Species::Hyena, Species::Rabbit, + Species::Truffler, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/voxygen/src/anim/src/biped_large/mod.rs b/voxygen/src/anim/src/biped_large/mod.rs index 29405a89e9..a017d111a2 100644 --- a/voxygen/src/anim/src/biped_large/mod.rs +++ b/voxygen/src/anim/src/biped_large/mod.rs @@ -132,30 +132,44 @@ impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { head: match (body.species, body.body_type) { (Ogre, _) => (3.0, 6.0), (Cyclops, _) => (3.0, 9.0), + (Wendigo, _) => (3.0, 13.5), + (Troll, _) => (6.0, 10.0), }, upper_torso: match (body.species, body.body_type) { (Ogre, _) => (0.0, 19.0), (Cyclops, _) => (-1.0, 27.0), + (Wendigo, _) => (-1.0, 27.0), + (Troll, _) => (-1.0, 25.5), }, lower_torso: match (body.species, body.body_type) { (Ogre, _) => (1.0, -9.5), (Cyclops, _) => (1.0, -10.5), + (Wendigo, _) => (-1.5, -8.0), + (Troll, _) => (1.0, -12.5), }, shoulder: match (body.species, body.body_type) { (Ogre, _) => (6.1, 0.5, 2.5), (Cyclops, _) => (9.5, 0.5, 2.5), + (Wendigo, _) => (9.0, 0.5, -0.5), + (Troll, _) => (11.0, 0.5, -2.5), }, hand: match (body.species, body.body_type) { (Ogre, _) => (10.5, -1.0, -0.5), (Cyclops, _) => (10.5, 0.0, -0.5), + (Wendigo, _) => (12.0, 0.0, -0.5), + (Troll, _) => (11.5, 0.0, -1.5), }, leg: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0, -6.0), (Cyclops, _) => (0.0, 0.0, -9.0), + (Wendigo, _) => (2.0, 0.0, -8.5), + (Troll, _) => (5.0, 0.0, -16.0), }, foot: match (body.species, body.body_type) { (Ogre, _) => (4.0, 0.5, 5.5), (Cyclops, _) => (4.0, 0.5, 5.0), + (Wendigo, _) => (5.0, 0.5, 5.5), + (Troll, _) => (6.0, 0.5, 3.0), }, } } diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index 0995dafd23..4665e928a4 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -128,6 +128,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (7.0, 1.0), (Hyena, _) => (7.5, 2.0), (Rabbit, _) => (4.0, 3.0), + (Truffler, _) => (7.5, -9.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 7.0), @@ -144,6 +145,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (-2.0, 9.0), (Hyena, _) => (-2.0, 9.0), (Rabbit, _) => (-2.0, 6.0), + (Truffler, _) => (-2.0, 16.0), }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.0, -2.0), @@ -160,6 +162,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (5.0, 4.0, -2.5), (Hyena, _) => (2.5, 5.0, -4.0), (Rabbit, _) => (3.0, 3.0, -3.0), + (Truffler, _) => (2.5, 5.0, -9.0), }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, -1.5), @@ -176,6 +179,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (4.0, -2.0, -3.0), (Hyena, _) => (3.0, -5.0, -2.5), (Rabbit, _) => (3.5, -2.0, -1.0), + (Truffler, _) => (3.0, -5.0, -9.5), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -192,6 +196,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (-1.0, 4.0), (Hyena, _) => (-7.0, 0.0), (Rabbit, _) => (-4.0, -0.0), + (Truffler, _) => (-7.0, 0.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => (0.9), @@ -208,6 +213,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (1.4), (Hyena, _) => (1.0), (Rabbit, _) => (0.7), + (Truffler, _) => (1.0), }, tempo: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -224,6 +230,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (1.0), (Hyena, _) => (1.1), (Rabbit, _) => (1.15), + (Truffler, _) => (1.0), }, maximize: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -240,6 +247,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (1.0), (Hyena, _) => (1.4), (Rabbit, _) => (1.3), + (Truffler, _) => (1.0), }, minimize: match (body.species, body.body_type) { (Pig, _) => (0.6), @@ -256,6 +264,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (0.7), (Hyena, _) => (1.4), (Rabbit, _) => (0.8), + (Truffler, _) => (1.0), }, spring: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -272,6 +281,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (0.7), (Hyena, _) => (1.4), (Rabbit, _) => (2.5), + (Truffler, _) => (0.8), }, } } From 654088820c8c579c0e268a952b19fe0d77ac5ce5 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Tue, 28 Jul 2020 22:44:47 -0400 Subject: [PATCH 06/12] maneater and feed anim --- assets/common/npc_names.json | 4 + .../voxygen/voxel/npc/maneater/male/chest.vox | Bin 0 -> 4676 bytes .../voxel/npc/maneater/male/foot_bl.vox | Bin 0 -> 1648 bytes .../voxel/npc/maneater/male/foot_br.vox | Bin 0 -> 1648 bytes .../voxel/npc/maneater/male/foot_fl.vox | Bin 0 -> 1648 bytes .../voxel/npc/maneater/male/foot_fr.vox | Bin 0 -> 1648 bytes .../voxel/npc/maneater/male/head_lower.vox | Bin 0 -> 3064 bytes .../voxel/npc/maneater/male/head_upper.vox | Bin 0 -> 1744 bytes .../voxygen/voxel/npc/maneater/male/jaw.vox | Bin 0 -> 5980 bytes .../voxel/npc/maneater/male/tail_front.vox | Bin 0 -> 1668 bytes .../voxel/npc/maneater/male/tail_rear.vox | Bin 0 -> 1288 bytes .../voxel/quadruped_low_central_manifest.ron | 52 +++++++++ .../voxel/quadruped_low_lateral_manifest.ron | 36 +++++++ common/src/comp/body/biped_large.rs | 2 +- common/src/comp/body/quadruped_low.rs | 6 +- common/src/states/utils.rs | 2 +- voxygen/src/anim/src/quadruped_low/mod.rs | 10 ++ voxygen/src/anim/src/quadruped_low/run.rs | 8 +- voxygen/src/anim/src/quadruped_small/feed.rs | 100 ++++++++++++++++++ voxygen/src/anim/src/quadruped_small/mod.rs | 26 ++++- voxygen/src/scene/figure/mod.rs | 22 +++- 21 files changed, 256 insertions(+), 12 deletions(-) create mode 100644 assets/voxygen/voxel/npc/maneater/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/tail_front.vox create mode 100644 assets/voxygen/voxel/npc/maneater/male/tail_rear.vox create mode 100644 voxygen/src/anim/src/quadruped_small/feed.rs diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index 7807251c42..f97abf5008 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -629,6 +629,10 @@ "pangolin": { "keyword": "pangolin", "generic": "Pangolin" + }, + "maneater": { + "keyword": "maneater", + "generic": "Maneater" } } } diff --git a/assets/voxygen/voxel/npc/maneater/male/chest.vox b/assets/voxygen/voxel/npc/maneater/male/chest.vox new file mode 100644 index 0000000000000000000000000000000000000000..38da2b88b169a6a39ee84be6541b09d7010c9be7 GIT binary patch literal 4676 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 RKaGAG?~^v4Tz`tL`8WEG(h&dv literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/maneater/male/foot_bl.vox b/assets/voxygen/voxel/npc/maneater/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..f08368c769db8e1a87f9ed3c5cae087bfcc92705 GIT binary patch literal 1648 zcmah|ZA_JA7{1@<<9$ydgmL&h2y_sGBOT@A01B&PK!^wpKS&Np+Hi8lOvjo-I@lVX z1L#yn4774!jj?8GF%GNs!(4OD&ADc+wKd0FYyGSrt@ZEfelQ(1w%+a9{oLR8eLc_H z_UgX8Ng`_A*4V;=I&GrejiLHAM&Zx(51wMVuRYXQER2=tG($?7mWl?Iq(N!xsI=^; z5HxMu+HXlas+2XTg|Uf2rR9jyVnizgJ}Vh;Y#q=_1(a3+M{B>WS!bJ+oTpVx+bU{n zhO+(2X5HZ!M+a=BVp7RrCFQVWD6XM7SF&A6j#HXzGPswLVnmvr+78$@gQaAfkWN%8 z$L~07lRBz+POXfOYYP<C6mGgz9l;|lOIn6@lyTJRo{@7`iaVfbavImh9iyBc2JM#{Vz zqN=JYL?RJ994BnQbPM_Jzwn3KjY~HP=DXS$M@!RY9Nb@x$nhq`M;j3zKZy9$F;vEn zA~CQQnFsQacXA_&rni9VHK_M#(B)@Ax6+W@Oh`XM$Q~mUe@1Zi5)y|9DXgbmA(S^K zprhT5(7P!(y|@l_5kl((;f-sA6W?-fYZh|CUaXJ!P_Yn%r_T-V*(~^Gb5U~pd32|g z;?%lY6i*V?fIxe=|9}fLkp!A|W7N}wxy`AVaR-4N&tZZHi;N$_Vf?~!qMvZ>J;Kd7 z!ky1q4-zid6Ta9*cyO2yZXoox5yrx4h#eqIh6!C&gyVID3v7>P_aTz969cVl5EX*Cy20l;DG!Y@DxPKB|*37VX7}qan;*9KhlyBN%_vi%5qD2?+_vNLhd_sZ%;L9`lY@5( zCh%hQIJ(cokkOTnd)EuF7|O(WULOA2-^A_QK9Ba@chT1aoS2%!(8minH~$STetjQ- zW1~pA{u>gub-?p_1i@es5BXOi7XyDn-X|=5`Dnf+eqaCR=U;I7KU*nhIy&)KH_pfB P)#Pfnl{qWVtHjdZXXI5p literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/maneater/male/foot_br.vox b/assets/voxygen/voxel/npc/maneater/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..c772e91e3ac8c651b3053765e1db63df46917d98 GIT binary patch literal 1648 zcmah|e@xV67=OO+kMH*iCF~9a4uK9aIOr7c5XIFQ5T1e!5z^yF+Hi7Xrelo(9kzyd zf=*?`P%DSlm}@2$16Jz~V~sgC=bE+F)*N%K^=JLjTK|1|-ZPywx4zqF&-?s-p3nP! zTVLIqKS@N5+rqn8P`gdk9FEkjFbaRJfAAE`z562JQemt_CmBl8lu|S#B@HQC$CYKr zwV)}>)&X1EajC2!A&gB7Ni9dD79&C#@L9pkX%D>u422C9H%tbWNr<21~^@EuFYh zPJkS?NgbCwr%=YnwS`J(Bc)DA#bBveDj`p3?x)$Wq|Nm?UTBVGAJ>!02};%_`-Id% zZE})xaV+Nut|?6oo?V+Act_h}zN8%x+6ii54JnJ`gpO;&t)&x|%{7fw%&*~+YirX} zuw=V!&dj@Q=I1(E@Ep=%E;&!R_#QZh=g^vWA#FRL7}DIG=3H%a56;(4 zKyY8d{0Qx0-WY}_$KgA(87$4&aRnWsDciE9H1DDK?rnw=hF|8KbBKHHu77zOspPYv zs;Vl)VlmtwCv3mCgaXfB_`~DD#YKYou7&5ZYv%?W=%_}lZztwQ!oH0V_X9QOdVdXHv&3eXF!p6oF zwC(dC@~#^v7uKLQMrfKKyfH%<_?B~Q1HM?S%~7ST4gomNKqUpPJmiGB+Dx|5~(H2GCo(8Lj>dL^pbIy1o!*|B8wVMD~Qx zbLbUho_rr!!&$ib5#jqb!quW8xHGenQ&5Q2d4-_iL8SMlW8vI`J3N-nZznew?-Wkp z#p-c%ok}3Hb2aWA&*9AMH@NWiT?CJg zBK7)jNZHl~@9QyyLLuDeUxi!@{0VuNu>9qN`Ih;8{hy!z!sLJUxV+TXj)%H&K0H53 OKFRiY&g17N#M0lVl2q&f literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/maneater/male/foot_fl.vox b/assets/voxygen/voxel/npc/maneater/male/foot_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..7cdb03344dc946f261ad78591190ecbc87ac7751 GIT binary patch literal 1648 zcmah|e@xV67=OO+kMCU}gmEC;Am?JO3CArp}23f}i7{z<3Oi_943?5@LOJ46 zI{Xe|o6>Q`b82aPTwAMzFjDD+k_?uTrPT7c;C_PrQrTRe(nuw(lM?C-8cbZ|Qs#+$J)xgQH>kDz+t zFw%o7k+-i1MMu}6EV&8Ps6qWtgDyP_x{-s-R>G=7g!~CY`DX-YKOsFv$YMR`3Snbw z8oKtl5PmlcCl*(uAxdbQBD^t682*-X+uSIKc(EqxL)Cl;o&guUr`+((6e4i*dGuyg z;MnSVlur{@fIz#r|A-Sbl>wS_VcgS)%Nw$B(G>!=J%=eGEHZwGMDPpCsUgDbdxWLS zgj=7p9wJ<7Bz&=xuzZjZX(9}D5+))!NbDm_M+iMNguw>FIkqq44+4rAv02o^sX!{nP@M7umlOG`s;)=I4R zWFk=JMU{UoHdmBk;#fXrFM9FgEgzQetiy-gbAE#Eq-<`2DAL zG@i`F+lx84elLJ!6e7%gr1tM+UIq#EW&hs4ZKE5JMsI5WLoI6`?f>aeYij?3+-KnP zX2VyQf!eYRbkwAyBfvG9GE)0j6}ZvtTZ6q-ehf5hLZ>eWk&PalYAS)*zp}Ct;aws0 zAAAM5C*DV1EDtw7B7EOPxKdh*tXwzpi%YPoumltvLH0m47SBGo!=r9~I|T)Jr(_B* z)=r}LWCFQ8t8nL92^Pb7m@F#7fBT!bmaTKx(|#KReZcV9%ZPnEkJEGC;QZHj5j--E zjBCFkt*#56*P{r9Lb%Vr3OO106Y?(M-j@&NyT|YA|NQ(Hrv9_X<;AYOc&Hoa!}F8m OlWdRYJbr#cEd33_(p2mK literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/maneater/male/foot_fr.vox b/assets/voxygen/voxel/npc/maneater/male/foot_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..b1fb06e7deab59329d2e328dc24ea5a8546b5620 GIT binary patch literal 1648 zcmah|e@xV67=OO+kMCU}gmL`3L!d(p4mv&H0L9f25Tam1l;i-@rqdfU9cvEhu(k6} z(5Z|VYUNIA%rz6s0ju?gxyGEEbIn?7YmB+p`m_FMt^Ynf@0pI8Ti@-o=Y4)Z&*y!= z-LLK}o+6@-#Nj;3GKH8>ughs^MpzWOT{h0 zkhWi1tP{tO4q8$rl$0l=k|z{Hat*<`itSQyoYY*C!M&ssqssIYcF?jIEEU_da>SK% z_=(u2bX@YBLK+{})+(WmR5~FggQa4rv^=4?pJu;OHrMBPtvQx`Tu(|zP_i!BCzK9q zlarc@V>w4~O=)WI?Aq+WJK8q$rEI?tj-b}oh_X3O>$o=D+B#ubT+>L&{2DH~wl+OA zOSaqQ%)HxXey*c6&!HU5CFe;e-vh_+99r;>yt|ehYdB&qq-FaRLz=r2oGWbZ!TG}B z7u;7cKSDT}H-_Pf9DHXsgQYo>Gw5(o(zdOn<~A{uA-(8I2V-+Y*t_QVf(7@B6%g=%qa*)|U$UR6X7$;PIMsN-g(qn`y)^n~BYC6); z+v7s`-7K7(Uxnr

vY(#th-;x18JQMq$K@)lna6XG8D|y5K$ShHttEf!ohxZ&nqK zuWCZ&6k!Djw4M78J3*5fpc^iXc@E&px@=r>g@Db^VUh^*j2|Kq{K9f_h%oaW;no$x zozGbh5iYk7zSu@s+)s$K5{9}7 zjyg;oXu_@0*YN9f1QjJY*jQDBEiaW}Uw0h_HWOm~gydU7(!(rg8uGi zY;E1}*f+atEm}4P@WI9coULU(8Zt2+AHdN=VN72b#{4Ivn0V8RXs-upX=%vIT8Xuu zOa#iksP(VGhN^OmA1}bnB`;3Vg^tXQv5wzasqn9bq_9hV!v%EL>~C?>}{+ zk6&(D8h>OWg9FZK4}k#3xi&QFq0 NvMtY9ettqM{S5+-RGa_+ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/maneater/male/head_lower.vox b/assets/voxygen/voxel/npc/maneater/male/head_lower.vox new file mode 100644 index 0000000000000000000000000000000000000000..6d33c7a9968ee1033b12bf56e74255cd8586f553 GIT binary patch literal 3064 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/quadruped_low_central_manifest.ron b/assets/voxygen/voxel/quadruped_low_central_manifest.ron index 727f31ee13..5df288e77b 100644 --- a/assets/voxygen/voxel/quadruped_low_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_central_manifest.ron @@ -416,4 +416,56 @@ central: ("npc.pangolin.male.tail_front"), ), ), + (Maneater, Male): ( + upper: ( + offset: (-5.5, 0.0, 0.0), + central: ("npc.maneater.male.head_upper"), + ), + lower: ( + offset: (-14.5, -5.5, -0.0), + central: ("npc.maneater.male.head_lower"), + ), + jaw: ( + offset: (-7.5, 0.0, -19.0), + central: ("npc.maneater.male.jaw"), + ), + chest: ( + offset: (-6.5, -6.5, -6.0), + central: ("npc.maneater.male.chest"), + ), + tail_rear: ( + offset: (-0.5, -14.0, -6.5), + central: ("npc.maneater.male.tail_rear"), + ), + tail_front: ( + offset: (-4.5, -15.0, -0.0), + central: ("npc.maneater.male.tail_front"), + ), + ), + (Maneater, Female): ( + upper: ( + offset: (-5.5, 0.0, 0.0), + central: ("npc.maneater.male.head_upper"), + ), + lower: ( + offset: (-14.5, -5.5, -0.0), + central: ("npc.maneater.male.head_lower"), + ), + jaw: ( + offset: (-7.5, 0.0, -19.0), + central: ("npc.maneater.male.jaw"), + ), + chest: ( + offset: (-6.5, -6.5, -6.0), + central: ("npc.maneater.male.chest"), + ), + tail_rear: ( + offset: (-0.5, -14.0, -6.5), + central: ("npc.maneater.male.tail_rear"), + ), + tail_front: ( + offset: (-4.5, -15.0, -0.0), + central: ("npc.maneater.male.tail_front"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron index c02fc81839..bdeee26027 100644 --- a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron @@ -287,4 +287,40 @@ lateral: ("npc.pangolin.male.foot_br"), ), ), + (Maneater, Male): ( + front_left: ( + offset: (-6.0, 0.0, -6.5), + lateral: ("npc.maneater.male.foot_fl"), + ), + front_right: ( + offset: (-2.0, 0.0, -6.5), + lateral: ("npc.maneater.male.foot_fr"), + ), + back_left: ( + offset: (-6.0, -8.0, -9.0), + lateral: ("npc.maneater.male.foot_bl"), + ), + back_right: ( + offset: (-2.0, -8.0, -9.0), + lateral: ("npc.maneater.male.foot_br"), + ), + ), + (Maneater, Female): ( + front_left: ( + offset: (-6.0, 0.0, -6.5), + lateral: ("npc.maneater.male.foot_fl"), + ), + front_right: ( + offset: (-2.0, 0.0, -6.5), + lateral: ("npc.maneater.male.foot_fr"), + ), + back_left: ( + offset: (-6.0, -8.0, -9.0), + lateral: ("npc.maneater.male.foot_bl"), + ), + back_right: ( + offset: (-2.0, -8.0, -9.0), + lateral: ("npc.maneater.male.foot_br"), + ), + ), }) diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index 524807a21f..5b90048c59 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -60,7 +60,7 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies } pub const ALL_SPECIES: [Species; 4] = [ - Species::Ogre, + Species::Ogre, Species::Cyclops, Species::Wendigo, Species::Troll, diff --git a/common/src/comp/body/quadruped_low.rs b/common/src/comp/body/quadruped_low.rs index de08a7da58..ceac93e830 100644 --- a/common/src/comp/body/quadruped_low.rs +++ b/common/src/comp/body/quadruped_low.rs @@ -36,6 +36,7 @@ pub enum Species { Tortoise = 5, Rocksnapper = 6, Pangolin = 7, + Maneater = 8, } /// Data representing per-species generic data. @@ -51,6 +52,7 @@ pub struct AllSpecies { pub tortoise: SpeciesMeta, pub rocksnapper: SpeciesMeta, pub pangolin: SpeciesMeta, + pub maneater: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -67,11 +69,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Tortoise => &self.tortoise, Species::Rocksnapper => &self.rocksnapper, Species::Pangolin => &self.pangolin, + Species::Maneater => &self.maneater, } } } -pub const ALL_SPECIES: [Species; 8] = [ +pub const ALL_SPECIES: [Species; 9] = [ Species::Crocodile, Species::Alligator, Species::Salamander, @@ -80,6 +83,7 @@ pub const ALL_SPECIES: [Species; 8] = [ Species::Tortoise, Species::Rocksnapper, Species::Pangolin, + Species::Maneater, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 56579e72c3..bd2b91b5cb 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -148,7 +148,7 @@ pub fn attempt_wield(data: &JoinData, update: &mut StateUpdate) { /// Checks that player can `Sit` and updates `CharacterState` if so pub fn attempt_sit(data: &JoinData, update: &mut StateUpdate) { - if data.physics.on_ground && data.body.is_humanoid() { + if data.physics.on_ground { update.character = CharacterState::Sit; } } diff --git a/voxygen/src/anim/src/quadruped_low/mod.rs b/voxygen/src/anim/src/quadruped_low/mod.rs index 3bf99f64fc..577ce0acac 100644 --- a/voxygen/src/anim/src/quadruped_low/mod.rs +++ b/voxygen/src/anim/src/quadruped_low/mod.rs @@ -142,6 +142,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (5.0, 1.0), (Rocksnapper, _) => (6.0, 0.5), (Pangolin, _) => (-0.5, 8.0), + (Maneater, _) => (6.0, 9.5), }, head_lower: match (body.species, body.body_type) { (Crocodile, _) => (8.0, 0.0), @@ -152,6 +153,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (12.0, -3.5), (Rocksnapper, _) => (12.0, -9.0), (Pangolin, _) => (8.0, -9.0), + (Maneater, _) => (1.0, 4.5), }, jaw: match (body.species, body.body_type) { (Crocodile, _) => (2.5, -3.0), @@ -162,6 +164,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (-3.5, -2.0), (Rocksnapper, _) => (-5.0, -1.5), (Pangolin, _) => (0.0, 0.0), + (Maneater, _) => (-1.0, 4.0), }, chest: match (body.species, body.body_type) { (Crocodile, _) => (0.0, 5.0), @@ -172,6 +175,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (0.0, 11.0), (Rocksnapper, _) => (0.0, 18.5), (Pangolin, _) => (0.0, 7.0), + (Maneater, _) => (0.0, 12.0), }, tail_rear: match (body.species, body.body_type) { (Crocodile, _) => (-12.5, -1.0), @@ -182,6 +186,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (-10.0, -1.5), (Rocksnapper, _) => (-14.5, -2.0), (Pangolin, _) => (-7.0, -3.0), + (Maneater, _) => (-15.0, 4.0), }, tail_front: match (body.species, body.body_type) { (Crocodile, _) => (-6.0, 0.0), @@ -192,6 +197,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (-13.0, -3.5), (Rocksnapper, _) => (-13.5, -6.5), (Pangolin, _) => (-7.5, -0.5), + (Maneater, _) => (-1.0, 4.0), }, feet_f: match (body.species, body.body_type) { (Crocodile, _) => (3.5, 6.0, -1.0), @@ -202,6 +208,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (5.5, 6.5, -3.0), (Rocksnapper, _) => (7.5, 5.0, -8.5), (Pangolin, _) => (5.5, 5.5, -1.0), + (Maneater, _) => (4.5, 4.0, -5.5), }, feet_b: match (body.species, body.body_type) { (Crocodile, _) => (3.5, -6.0, -1.0), @@ -212,6 +219,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (5.5, -11.5, -3.0), (Rocksnapper, _) => (8.0, -12.0, -9.5), (Pangolin, _) => (6.5, -3.5, -1.0), + (Maneater, _) => (4.5, -2.5, -3.0), }, lean: match (body.species, body.body_type) { (Pangolin, _) => (0.4, 0.0), @@ -226,6 +234,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (1.0), (Rocksnapper, _) => (1.4), (Pangolin, _) => (1.3), + (Maneater, _) => (1.4), }, tempo: match (body.species, body.body_type) { (Crocodile, _) => (0.8), @@ -236,6 +245,7 @@ impl<'a> From<&'a comp::quadruped_low::Body> for SkeletonAttr { (Tortoise, _) => (0.9), (Rocksnapper, _) => (0.9), (Pangolin, _) => (1.15), + (Maneater, _) => (1.0), }, } } diff --git a/voxygen/src/anim/src/quadruped_low/run.rs b/voxygen/src/anim/src/quadruped_low/run.rs index 7d7df6561b..a71979ee24 100644 --- a/voxygen/src/anim/src/quadruped_low/run.rs +++ b/voxygen/src/anim/src/quadruped_low/run.rs @@ -107,7 +107,7 @@ impl Animation for RunAnimation { skeleton_attr.tail_front.1 + skeleton_attr.lean.0 * 2.0, ); next.tail_front.ori = - Quaternion::rotation_z(shortalt * 0.18 * skeleton_attr.lean.0 + tilt * 1.8) + Quaternion::rotation_z(shortalt * 0.18 * skeleton_attr.lean.1 + tilt * 1.8) * Quaternion::rotation_y(shortalt * 0.1) * Quaternion::rotation_x(0.06 - skeleton_attr.lean.0 * 1.2 + x_tilt * 0.2); next.tail_front.scale = Vec3::one(); @@ -118,7 +118,7 @@ impl Animation for RunAnimation { skeleton_attr.tail_rear.1 + shortalt * 0.6, ); next.tail_rear.ori = - Quaternion::rotation_z(shortalt * 0.25 * skeleton_attr.lean.0 + tilt * 1.6) + Quaternion::rotation_z(shortalt * 0.25 * skeleton_attr.lean.1 + tilt * 1.6) * Quaternion::rotation_y(shortalt * 0.1) * Quaternion::rotation_x(-0.04 + x_tilt * 0.5); next.tail_rear.scale = Vec3::one(); @@ -156,7 +156,7 @@ impl Animation for RunAnimation { next.foot_bl.offset = Vec3::new( -skeleton_attr.feet_b.0, skeleton_attr.feet_b.1 + foothorilb * -1.0, - skeleton_attr.feet_b.2 + 1.0 + ((footvertlb * -1.2).max(-0.0)), + skeleton_attr.feet_b.2 + ((footvertlb * -1.2).max(-0.0)), ); next.foot_bl.ori = Quaternion::rotation_x(-0.2 + footvertlb * -0.5 - skeleton_attr.lean.0) * Quaternion::rotation_y(tilt * -1.0) @@ -166,7 +166,7 @@ impl Animation for RunAnimation { next.foot_br.offset = Vec3::new( skeleton_attr.feet_b.0, skeleton_attr.feet_b.1 + foothorirb * -1.0, - skeleton_attr.feet_b.2 + 1.0 + ((footvertrb * -1.2).max(-0.0)), + skeleton_attr.feet_b.2 + ((footvertrb * -1.2).max(-0.0)), ); next.foot_br.ori = Quaternion::rotation_x(-0.2 + footvertrb * -0.5 - skeleton_attr.lean.0) * Quaternion::rotation_y(tilt * -1.0) diff --git a/voxygen/src/anim/src/quadruped_small/feed.rs b/voxygen/src/anim/src/quadruped_small/feed.rs new file mode 100644 index 0000000000..aa4de97cb3 --- /dev/null +++ b/voxygen/src/anim/src/quadruped_small/feed.rs @@ -0,0 +1,100 @@ +use super::{super::Animation, QuadrupedSmallSkeleton, SkeletonAttr}; +use std::{f32::consts::PI, ops::Mul}; +use vek::*; + +pub struct FeedAnimation; + +impl Animation for FeedAnimation { + type Dependency = f64; + type Skeleton = QuadrupedSmallSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"quadruped_small_feed\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_feed")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + global_time: Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let slow = (anim_time as f32 * 5.0).sin(); + let quick = (anim_time as f32 * 14.0).sin(); + + let slow_alt = (anim_time as f32 * 3.5 + PI).sin(); + + let head_look = Vec2::new( + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(7331.0) + .sin() + * 1.0, + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(1337.0) + .sin() + * 0.5, + ); + + next.head.offset = Vec3::new( + 0.0, + skeleton_attr.head.0 + 1.5, + skeleton_attr.head.1 + slow * 0.2, + ); + next.head.ori = Quaternion::rotation_z(head_look.y) + * Quaternion::rotation_x(slow * 0.05 + quick * 0.08 - 0.4 * skeleton_attr.feed); + next.head.scale = Vec3::one(); + + next.chest.offset = Vec3::new(slow * 0.02, skeleton_attr.chest.0, skeleton_attr.chest.1) + / 11.0 + * skeleton_attr.scaler; + next.chest.ori = Quaternion::rotation_x(-0.35 * skeleton_attr.feed) + * Quaternion::rotation_y(head_look.y * 0.1); + next.chest.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; + + next.leg_fl.offset = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + 0.5, + ); + next.leg_fl.ori = Quaternion::rotation_x(slow * 0.01 + 0.25 * skeleton_attr.feed) + * Quaternion::rotation_y(slow * -0.02 - head_look.y * 0.1); + next.leg_fl.scale = Vec3::one(); + + next.leg_fr.offset = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + 0.5, + ); + next.leg_fr.ori = Quaternion::rotation_x(slow_alt * 0.01 + 0.25 * skeleton_attr.feed) + * Quaternion::rotation_y(slow * -0.02 - head_look.y * 0.1); + next.leg_fr.scale = Vec3::one(); + + next.leg_bl.offset = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1 + 1.0, + skeleton_attr.feet_b.2 - 1.0, + ); + next.leg_bl.ori = Quaternion::rotation_x(slow_alt * 0.01 + 0.15 * skeleton_attr.feed) + * Quaternion::rotation_y(slow * -0.02 - head_look.y * 0.1); + next.leg_bl.scale = Vec3::one(); + + next.leg_br.offset = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1 + 1.0, + skeleton_attr.feet_b.2 - 1.0, + ); + next.leg_br.ori = Quaternion::rotation_x(slow * 0.01 + 0.15 * skeleton_attr.feed) + * Quaternion::rotation_y(slow * -0.02 - head_look.y * 0.1); + next.leg_br.scale = Vec3::one(); + + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); + next.tail.ori = Quaternion::rotation_z(slow * 0.3 + head_look.y * 0.3); + next.tail.scale = Vec3::one(); + + next + } +} diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index 4665e928a4..5753307496 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -1,9 +1,10 @@ +pub mod feed; pub mod idle; pub mod jump; pub mod run; // Reexports -pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation}; +pub use self::{feed::FeedAnimation, idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation}; use super::{Bone, FigureBoneData, Skeleton}; use common::comp::{self}; @@ -80,6 +81,7 @@ pub struct SkeletonAttr { maximize: f32, minimize: f32, spring: f32, + feed: f32, } impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { type Error = (); @@ -105,6 +107,7 @@ impl Default for SkeletonAttr { maximize: 0.0, minimize: 0.0, spring: 0.0, + feed: 0.0, } } } @@ -149,7 +152,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.0, -2.0), - (Fox, _) => (3.0, 5.0, -5.0), + (Fox, _) => (3.0, 5.0, -5.5), (Sheep, _) => (3.5, 2.0, -2.0), (Boar, _) => (3.5, 6.0, -5.5), (Jackalope, _) => (3.0, 4.0, -2.0), @@ -166,7 +169,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, -1.5), - (Fox, _) => (3.0, -3.0, -2.0), + (Fox, _) => (3.0, -3.0, -3.0), (Sheep, _) => (3.5, -3.5, -2.0), (Boar, _) => (3.0, -3.0, -2.5), (Jackalope, _) => (3.5, -2.0, 0.0), @@ -283,6 +286,23 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Rabbit, _) => (2.5), (Truffler, _) => (0.8), }, + feed: match (body.species, body.body_type) { + (Pig, _) => (1.0), + (Fox, _) => (1.0), + (Sheep, _) => (1.0), + (Boar, _) => (0.6), + (Jackalope, _) => (1.0), + (Skunk, _) => (0.8), + (Cat, _) => (1.0), + (Batfox, _) => (0.7), + (Raccoon, _) => (0.8), + (Quokka, _) => (1.0), + (Dodarock, _) => (0.7), + (Holladon, _) => (1.0), + (Hyena, _) => (1.0), + (Rabbit, _) => (1.2), + (Truffler, _) => (0.6), + }, } } } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 923abac39b..8af00917bf 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -947,11 +947,29 @@ impl FigureMgr { &mut state_animation_rate, skeleton_attr, ), + _ => anim::quadruped_small::IdleAnimation::update_skeleton( + &QuadrupedSmallSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), + }; + let target_bones = match &character { + CharacterState::Sit { .. } => { + anim::quadruped_small::FeedAnimation::update_skeleton( + &target_base, + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, // TODO! - _ => state.skeleton_mut().clone(), + _ => target_base, }; - state.skeleton.interpolate(&target_base, dt); + state.skeleton.interpolate(&target_bones, dt); state.update( renderer, pos.0, From d7bafe7fb5e44deb586cab2565d0a92741288c5a Mon Sep 17 00:00:00 2001 From: Snowram Date: Wed, 29 Jul 2020 22:49:37 +0200 Subject: [PATCH 07/12] Bonerattler tweaks --- .../voxel/npc/bonerattler/male/jaw.vox | Bin 1564 -> 1564 bytes .../voxel/npc/bonerattler/male/torso_back.vox | Bin 4252 -> 4252 bytes voxygen/src/anim/src/quadruped_medium/mod.rs | 10 +++++----- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/voxygen/voxel/npc/bonerattler/male/jaw.vox b/assets/voxygen/voxel/npc/bonerattler/male/jaw.vox index d63349abbf680bf35e8f5382e3123b4ad92a2af7..8975f181f6a001ae9903ec0ca759b2f161011c7c 100644 GIT binary patch delta 35 mcmbQkGlyrx4@NO24yJD`K+MR-^oUxqw5Qk+ElT2j_X9 Jng}izHURxu5YPYs delta 54 zcmbQEI7e~9dBz_TFYIRI*xbW-nN9FND?4isD>F+EGb>{kD+Bxg%>^9djEo$UJ2-&~ KH%D-}umJ!N#}SJF diff --git a/voxygen/src/anim/src/quadruped_medium/mod.rs b/voxygen/src/anim/src/quadruped_medium/mod.rs index aa350fb841..d78069b986 100644 --- a/voxygen/src/anim/src/quadruped_medium/mod.rs +++ b/voxygen/src/anim/src/quadruped_medium/mod.rs @@ -184,7 +184,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Frostfang, _) => (1.0, -2.0), (Mouflon, _) => (-2.5, 6.0), (Catoblepas, _) => (-1.0, -6.5), - (Bonerattler, _) => (0.0, -0.5), + (Bonerattler, _) => (-1.0, 2.5), }, head_lower: match (body.species, body.body_type) { (Grolgar, _) => (1.0, -1.0), @@ -210,7 +210,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Frostfang, _) => (4.0, -3.0), (Mouflon, _) => (10.5, -4.0), (Catoblepas, _) => (1.0, -6.0), - (Bonerattler, _) => (3.5, -3.0), + (Bonerattler, _) => (3.0, -3.0), }, tail: match (body.species, body.body_type) { (Grolgar, _) => (-11.5, -0.5), @@ -223,7 +223,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Frostfang, _) => (-7.0, -3.5), (Mouflon, _) => (-10.5, 3.0), (Catoblepas, _) => (-8.5, -2.0), - (Bonerattler, _) => (-9.0, 2.5), + (Bonerattler, _) => (-10.0, 1.5), }, torso_front: match (body.species, body.body_type) { (Grolgar, _) => (10.0, 13.0), @@ -275,7 +275,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Frostfang, _) => (5.5, -5.5, -2.0), (Mouflon, _) => (4.0, -5.0, -5.0), (Catoblepas, _) => (7.0, 2.0, -6.0), - (Bonerattler, _) => (5.5, 3.5, -4.0), + (Bonerattler, _) => (5.5, 5.0, -4.0), }, leg_b: match (body.species, body.body_type) { (Grolgar, _) => (6.0, -6.5, -5.5), @@ -288,7 +288,7 @@ impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { (Frostfang, _) => (3.5, -4.5, -2.0), (Mouflon, _) => (3.5, -8.0, -4.5), (Catoblepas, _) => (6.0, -2.5, -2.5), - (Bonerattler, _) => (6.5, -9.5, -4.0), + (Bonerattler, _) => (6.0, -8.0, -4.0), }, feet_f: match (body.species, body.body_type) { (Grolgar, _) => (0.0, -9.0, -7.0), From 2645f9e631fbb089ca3c14893572b74837907f76 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Thu, 30 Jul 2020 02:13:58 -0400 Subject: [PATCH 08/12] cyclops run anim --- .../voxel/biped_large_center_manifest.ron | 4 +- .../voxel/quadruped_low_lateral_manifest.ron | 4 +- common/src/states/utils.rs | 4 +- voxygen/src/anim/src/biped_large/mod.rs | 29 +++-- voxygen/src/anim/src/biped_large/run.rs | 107 ++++++++++-------- 5 files changed, 85 insertions(+), 63 deletions(-) diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_center_manifest.ron index 158c86588f..438b6705e7 100644 --- a/assets/voxygen/voxel/biped_large_center_manifest.ron +++ b/assets/voxygen/voxel/biped_large_center_manifest.ron @@ -37,7 +37,7 @@ center: ("npc.cyclops.male.torso_upper"), ), torso_lower: ( - offset: (-6.0, -5.5, -6.0), + offset: (-6.0, -5.5, -12.0), center: ("npc.cyclops.male.torso_lower"), ) ), @@ -51,7 +51,7 @@ center: ("npc.cyclops.male.torso_upper"), ), torso_lower: ( - offset: (-6.0, -5.5, -6.0), + offset: (-6.0, -5.5, -12.0), center: ("npc.cyclops.male.torso_lower"), ) ), diff --git a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron index bdeee26027..ce8d8db9ac 100644 --- a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron @@ -225,11 +225,11 @@ lateral: ("npc.rocksnapper.male.foot_fr"), ), back_left: ( - offset: (-11.0, 0.0, -9.0), + offset: (-11.0, -6.0, -9.0), lateral: ("npc.rocksnapper.male.foot_bl"), ), back_right: ( - offset: (0.0, 0.0, -9.0), + offset: (0.0, -6.0, -9.0), lateral: ("npc.rocksnapper.male.foot_br"), ), ), diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index bd2b91b5cb..9e5d6642a5 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -38,9 +38,9 @@ impl Body { Body::Dragon(_) => 250.0, Body::BirdSmall(_) => 75.0, Body::FishSmall(_) => 40.0, - Body::BipedLarge(_) => 120.0, + Body::BipedLarge(_) => 75.0, Body::Object(_) => 40.0, - Body::Golem(_) => 130.0, + Body::Golem(_) => 60.0, Body::Critter(_) => 85.0, Body::QuadrupedLow(_) => 120.0, } diff --git a/voxygen/src/anim/src/biped_large/mod.rs b/voxygen/src/anim/src/biped_large/mod.rs index a017d111a2..2926dce544 100644 --- a/voxygen/src/anim/src/biped_large/mod.rs +++ b/voxygen/src/anim/src/biped_large/mod.rs @@ -40,6 +40,7 @@ impl Skeleton for BipedLargeSkeleton { #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_compute_mats")] fn compute_matrices_inner(&self) -> ([FigureBoneData; 16], Vec3) { let upper_torso_mat = self.upper_torso.compute_base_matrix(); + let lower_torso_mat = self.lower_torso.compute_base_matrix(); let shoulder_l_mat = self.shoulder_l.compute_base_matrix(); let shoulder_r_mat = self.shoulder_r.compute_base_matrix(); let leg_l_mat = self.leg_l.compute_base_matrix(); @@ -49,19 +50,23 @@ impl Skeleton for BipedLargeSkeleton { [ FigureBoneData::new(torso_mat * upper_torso_mat * self.head.compute_base_matrix()), FigureBoneData::new(torso_mat * upper_torso_mat), - FigureBoneData::new( - torso_mat * upper_torso_mat * self.lower_torso.compute_base_matrix(), - ), + FigureBoneData::new(torso_mat * upper_torso_mat * lower_torso_mat), FigureBoneData::new(torso_mat * upper_torso_mat * shoulder_l_mat), FigureBoneData::new(torso_mat * upper_torso_mat * shoulder_r_mat), FigureBoneData::new( - torso_mat * upper_torso_mat * self.hand_l.compute_base_matrix(), + torso_mat + * upper_torso_mat + * shoulder_l_mat + * self.hand_l.compute_base_matrix(), ), FigureBoneData::new( - torso_mat * upper_torso_mat * self.hand_r.compute_base_matrix(), + torso_mat + * upper_torso_mat + * shoulder_r_mat + * self.hand_r.compute_base_matrix(), ), - FigureBoneData::new(torso_mat * upper_torso_mat * leg_l_mat), - FigureBoneData::new(torso_mat * upper_torso_mat * leg_r_mat), + FigureBoneData::new(torso_mat * upper_torso_mat * lower_torso_mat * leg_l_mat), + FigureBoneData::new(torso_mat * upper_torso_mat * lower_torso_mat * leg_r_mat), FigureBoneData::new(self.foot_l.compute_base_matrix()), FigureBoneData::new(self.foot_r.compute_base_matrix()), FigureBoneData::default(), @@ -131,7 +136,7 @@ impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { Self { head: match (body.species, body.body_type) { (Ogre, _) => (3.0, 6.0), - (Cyclops, _) => (3.0, 9.0), + (Cyclops, _) => (4.5, 7.5), (Wendigo, _) => (3.0, 13.5), (Troll, _) => (6.0, 10.0), }, @@ -143,25 +148,25 @@ impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { }, lower_torso: match (body.species, body.body_type) { (Ogre, _) => (1.0, -9.5), - (Cyclops, _) => (1.0, -10.5), + (Cyclops, _) => (1.0, -4.5), (Wendigo, _) => (-1.5, -8.0), (Troll, _) => (1.0, -12.5), }, shoulder: match (body.species, body.body_type) { (Ogre, _) => (6.1, 0.5, 2.5), - (Cyclops, _) => (9.5, 0.5, 2.5), + (Cyclops, _) => (9.5, 2.5, 2.5), (Wendigo, _) => (9.0, 0.5, -0.5), (Troll, _) => (11.0, 0.5, -2.5), }, hand: match (body.species, body.body_type) { (Ogre, _) => (10.5, -1.0, -0.5), - (Cyclops, _) => (10.5, 0.0, -0.5), + (Cyclops, _) => (0.0, 0.0, -3.5), (Wendigo, _) => (12.0, 0.0, -0.5), (Troll, _) => (11.5, 0.0, -1.5), }, leg: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0, -6.0), - (Cyclops, _) => (0.0, 0.0, -9.0), + (Cyclops, _) => (0.0, 0.0, -5.0), (Wendigo, _) => (2.0, 0.0, -8.5), (Troll, _) => (5.0, 0.0, -16.0), }, diff --git a/voxygen/src/anim/src/biped_large/run.rs b/voxygen/src/anim/src/biped_large/run.rs index b02dade71b..a375034e1e 100644 --- a/voxygen/src/anim/src/biped_large/run.rs +++ b/voxygen/src/anim/src/biped_large/run.rs @@ -21,39 +21,52 @@ impl Animation for RunAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let lab = 10.0; - - let belt = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); - let beltsnap = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * lab as f32 + PI * 1.5).sin()).powf(2.0 as f32))) + let lab = 0.55; //.65 + let foothoril = (((1.0) + / (0.4 + + (0.6) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 + PI * 1.5).sin()); - let foothoril = (anim_time as f32 * lab as f32 + PI * 1.4).sin(); - let foothorir = (anim_time as f32 * lab as f32 + PI * 0.4).sin(); - - let footvertl = (anim_time as f32 * lab as f32).sin().max(0.1); - let footvertr = (anim_time as f32 * lab as f32 + PI).sin().max(0.1); + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); + let foothorir = (((1.0) + / (0.4 + + (0.6) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + let footvertl = (anim_time as f32 * 16.0 * lab as f32).sin(); + let footvertr = (anim_time as f32 * 16.0 * lab as f32 + PI).sin(); + let handhoril = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin(); + let handhorir = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); let footrotl = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) + / (2.5 + + (2.5) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 + PI * 1.4).sin()); + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); let footrotr = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) + / (1.0 + + (4.0) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 + PI * 0.4).sin()); + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + + let short = (anim_time as f32 * lab as f32 * 16.0).sin(); + + let shortalt = (anim_time as f32 * lab as f32 * 16.0 + PI / 2.0).sin(); next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) * 1.02; - next.head.ori = Quaternion::rotation_z(belt * -0.3) * Quaternion::rotation_x(0.1); + next.head.ori = Quaternion::rotation_z(short * -0.18) * Quaternion::rotation_x(-0.05); next.head.scale = Vec3::one() * 1.02; next.upper_torso.offset = Vec3::new( 0.0, skeleton_attr.upper_torso.0, - skeleton_attr.upper_torso.1 + belt * 1.0, + skeleton_attr.upper_torso.1 + shortalt * -1.5, ) / 8.0; - next.upper_torso.ori = Quaternion::rotation_z(belt * 0.40) * Quaternion::rotation_x(0.0); + next.upper_torso.ori = Quaternion::rotation_z(short * 0.18); next.upper_torso.scale = Vec3::one() / 8.0; next.lower_torso.offset = Vec3::new( @@ -61,25 +74,27 @@ impl Animation for RunAnimation { skeleton_attr.lower_torso.0, skeleton_attr.lower_torso.1, ); - next.lower_torso.ori = Quaternion::rotation_z(belt * -0.55) * Quaternion::rotation_x(0.0); + next.lower_torso.ori = Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); next.lower_torso.scale = Vec3::one() * 1.02; next.shoulder_l.offset = Vec3::new( -skeleton_attr.shoulder.0, - skeleton_attr.shoulder.1, + skeleton_attr.shoulder.1 + foothoril * -3.0, skeleton_attr.shoulder.2, ); - next.shoulder_l.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(footrotl * -0.15); + next.shoulder_l.ori = Quaternion::rotation_x(footrotl * -0.36) + * Quaternion::rotation_y(0.1) + * Quaternion::rotation_z(footrotl * 0.3); next.shoulder_l.scale = Vec3::one(); next.shoulder_r.offset = Vec3::new( skeleton_attr.shoulder.0, - skeleton_attr.shoulder.1, + skeleton_attr.shoulder.1 + foothorir * -3.0, skeleton_attr.shoulder.2, ); - next.shoulder_r.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(footrotr * -0.15); + next.shoulder_r.ori = Quaternion::rotation_x(footrotr * -0.36) + * Quaternion::rotation_y(-0.1) + * Quaternion::rotation_z(footrotr * -0.3); next.shoulder_r.scale = Vec3::one(); next.hand_l.offset = Vec3::new( @@ -87,8 +102,8 @@ impl Animation for RunAnimation { skeleton_attr.hand.1, skeleton_attr.hand.2, ); - next.hand_l.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.3 + foothoril * -0.6); + next.hand_l.ori = Quaternion::rotation_x(0.3 + (handhoril * -0.6).max(0.0)) + * Quaternion::rotation_y(handhoril * -0.1); next.hand_l.scale = Vec3::one() * 1.02; next.hand_r.offset = Vec3::new( @@ -96,47 +111,49 @@ impl Animation for RunAnimation { skeleton_attr.hand.1, skeleton_attr.hand.2, ); - next.hand_r.ori = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.3 + foothorir * -0.6); + next.hand_r.ori = Quaternion::rotation_x(0.3 + (handhorir * -0.6).max(0.0)) + * Quaternion::rotation_y(handhorir * 0.1); next.hand_r.scale = Vec3::one() * 1.02; next.leg_l.offset = Vec3::new( -skeleton_attr.leg.0, skeleton_attr.leg.1, skeleton_attr.leg.2, - ) * 1.02; + ) * 0.98; next.leg_l.ori = - Quaternion::rotation_z(belt * -0.8) * Quaternion::rotation_x(foothoril * 0.2); - next.leg_l.scale = Vec3::one() * 1.02; + Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothoril * 0.3); + next.leg_l.scale = Vec3::one() * 0.98; next.leg_r.offset = Vec3::new( skeleton_attr.leg.0, skeleton_attr.leg.1, skeleton_attr.leg.2, - ) * 1.02; + ) * 0.98; next.leg_r.ori = - Quaternion::rotation_z(belt * -0.8) * Quaternion::rotation_x(foothorir * 0.2); - next.leg_r.scale = Vec3::one() * 1.02; + Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothorir * 0.3); + next.leg_r.scale = Vec3::one() * 0.98; next.foot_l.offset = Vec3::new( -skeleton_attr.foot.0, - skeleton_attr.foot.1 + foothoril * 8.0 + 3.0, - skeleton_attr.foot.2 + footvertl * 4.0, + 4.0 + skeleton_attr.foot.1 + foothoril * 8.5, + skeleton_attr.foot.2 + ((footvertl * 6.5).max(0.0)), ) / 8.0; - next.foot_l.ori = Quaternion::rotation_x(footrotl * 0.5); - next.foot_l.scale = Vec3::one() / 8.0 * 0.98; + next.foot_l.ori = + Quaternion::rotation_x(-0.5 + footrotl * 0.85) * Quaternion::rotation_y(0.0); + next.foot_l.scale = Vec3::one() / 8.0; next.foot_r.offset = Vec3::new( skeleton_attr.foot.0, - skeleton_attr.foot.1 + foothorir * 8.0 + 3.0, - skeleton_attr.foot.2 + footvertr * 4.0, + 4.0 + skeleton_attr.foot.1 + foothorir * 8.5, + skeleton_attr.foot.2 + ((footvertr * 6.5).max(0.0)), ) / 8.0; - next.foot_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(footrotr * 0.5); - next.foot_r.scale = Vec3::one() / 8.0 * 0.98; + next.foot_r.ori = + Quaternion::rotation_x(-0.5 + footrotr * 0.85) * Quaternion::rotation_y(0.0); + next.foot_r.scale = Vec3::one() / 8.0; - next.torso.offset = Vec3::new(0.0, 0.0, beltsnap * 0.25); - next.torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.13); + next.torso.offset = Vec3::new(0.0, 0.0, 0.0); + next.torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.25); next.torso.scale = Vec3::one(); next } From b37c0962afb356ff1dd71c20b8fc2e8f8b433e3b Mon Sep 17 00:00:00 2001 From: Snowram Date: Thu, 30 Jul 2020 21:53:48 +0200 Subject: [PATCH 09/12] Add frog npc, tweak pig model --- assets/common/npc_names.json | 4 ++ assets/voxygen/voxel/npc/frog/male/chest.vox | Bin 0 -> 1980 bytes .../voxygen/voxel/npc/frog/male/foot_bl.vox | Bin 0 -> 1240 bytes .../voxygen/voxel/npc/frog/male/foot_br.vox | Bin 0 -> 1240 bytes .../voxygen/voxel/npc/frog/male/foot_fl.vox | Bin 0 -> 1164 bytes .../voxygen/voxel/npc/frog/male/foot_fr.vox | Bin 0 -> 1164 bytes assets/voxygen/voxel/npc/frog/male/head.vox | Bin 0 -> 1868 bytes assets/voxygen/voxel/npc/pig/female/chest.vox | Bin 3176 -> 0 bytes .../voxygen/voxel/npc/pig/female/foot_bl.vox | Bin 1240 -> 0 bytes .../voxygen/voxel/npc/pig/female/foot_br.vox | Bin 1240 -> 0 bytes .../voxygen/voxel/npc/pig/female/foot_fl.vox | Bin 1196 -> 0 bytes .../voxygen/voxel/npc/pig/female/foot_fr.vox | Bin 1196 -> 0 bytes assets/voxygen/voxel/npc/pig/female/head.vox | Bin 2576 -> 0 bytes assets/voxygen/voxel/npc/pig/female/tail.vox | Bin 1140 -> 0 bytes assets/voxygen/voxel/npc/pig/male/foot_bl.vox | Bin 1240 -> 1240 bytes assets/voxygen/voxel/npc/pig/male/foot_br.vox | Bin 1240 -> 1240 bytes assets/voxygen/voxel/npc/pig/male/foot_fl.vox | Bin 1196 -> 1196 bytes assets/voxygen/voxel/npc/pig/male/head.vox | Bin 2576 -> 2576 bytes assets/voxygen/voxel/npc/pig/male/tail.vox | Bin 1140 -> 1140 bytes .../quadruped_small_central_manifest.ron | 38 +++++++++++++-- .../quadruped_small_lateral_manifest.ron | 45 ++++++++++++++++-- common/src/comp/body/quadruped_small.rs | 6 ++- voxygen/src/anim/src/quadruped_small/mod.rs | 19 ++++++-- 23 files changed, 98 insertions(+), 14 deletions(-) create mode 100644 assets/voxygen/voxel/npc/frog/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/frog/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/frog/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/frog/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/frog/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/frog/male/head.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/chest.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/foot_br.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/foot_fr.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/head.vox delete mode 100644 assets/voxygen/voxel/npc/pig/female/tail.vox diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index f97abf5008..02b904a488 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -457,6 +457,10 @@ "truffler": { "keyword": "truffler", "generic": "Truffler" + }, + "frog": { + "keyword": "frog", + "generic": "Frog" } } }, diff --git a/assets/voxygen/voxel/npc/frog/male/chest.vox b/assets/voxygen/voxel/npc/frog/male/chest.vox new file mode 100644 index 0000000000000000000000000000000000000000..00b9a892af8f210e65dcad849890716939cf24cf GIT binary patch literal 1980 zcmchWTWnNS6o%KnojF56K}w-5mO3*~<`gM(#$K#qp;RcfMW|G$KtLc;8-+B6KrhG*je6M5Lvmt$uvy@S!W?h(}hhX=~VNXz&>$+DY6H>m+8PE-lui zJ>r~-J5R-wQ!y8{38N&Ys9G~mbV967SWn_&bi#NN)5KYuHrA$$Wj9%N(b5LJ_Oj zkGLppVu%jan6!G?773cVSmOg)iG`(E@`7K&=D8ds7>n7rdr=7ji{uJ z*g&jGicx`!sKBG`8OEa~X^4)RKrwE86Ig2lZMoNw2-l2djB#UJuz|>muU0f8f{LT#Sx3A$(3Y45PVm9yYG4L1srIhI<+?+_w?K1KUwK zybTj;^N_!x7{$9wkvv)rsdtc$agby8K`!QDVv}I%3xesrf;nddeurQ}w_q~;yblHG zrW}0veF?s}F$?y&nYj@XE%{fS90#ppuqOda;u>%DNj?cjSOC^}P zR*=}kn&%5K{-XlOQ|#a6L;CN5oXbT|$s`QUn}QpU76Qv2K)(n^$T#Fi(!W!1>P^Au zpy2XZ`n7^%^@5LA3dWujw9(($D(KzJ_zpo`Qn0>Cuw${{5aTP-1!%92p=-r#9Nbcl z%&JNp+**gxSD(gD$J(t)ADeZcRxF?3`tMo&DC zoSYm?n>-1{#l@JPjG}n~Fu;<( z?i4Pbtivxqw4ihUL>%}a7iX{KV+=F?_w&!35dFvbQ>hfbeg8Dd<{v{%&tBwr=i}15 zf}dX`b%JCviLdq#;EAQ@Al+S<(m4eq19#uy?t%go6%}D*Qzzz?ZO7*Q`!H?&R9rnh z6C-W;=;K}e`~DZy^kr+UX}N;Vt-!8~pD literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/frog/male/foot_bl.vox b/assets/voxygen/voxel/npc/frog/male/foot_bl.vox new file mode 100644 index 0000000000000000000000000000000000000000..2d5ca268dcefc9e759fda47940c8a66da07b454f GIT binary patch literal 1240 zcmchWYfPJU6voecK~XjZDX^9a^=-Kn=C~BOh+?-6p+h`I?@=jk!HzO zT_lJSBruXGqCqrfY{Noa{4j|l3vo_@#7hiWmc{tV#1Eo=`}uE4j2b_Ck|)pmJm>wN z^S`$3+Upz+iIpdz_yinIpW>o>%OiX??Q6_hP|_q7Lx701J^pzFHZ6y0s;hSxOo z3PaP~x~X)M@=e2Sn99?2uc;|kLk!KRFvaldnz(gC{b$6rrfP^=OA<>pbLpC9X{NZe zJH#c1f-Ww@&@I!{EkiVyE@EkhSi17HI5d^l)L2uj-3{BfB_^uoR$X09Bog7)kkI(n z0xsJh{A#l?Ki^C|&Ie`*HkER4e=U)oCT9Br%nlu7cC?$S*<+;oGO-_U;yhW5XS@cf zPeQuxMkek<7BWd~7P4LtHV+D0E(*zA!p5kOu5{){LPc{5Uw&V}7c2Qh7Vl?AL}(cn zo}Cs>EUo9g!4%w)A}V7(vcop40S85sxs+WiAge=gpHek1XS3mB2lABa-ntJYuVUBZH9Xl+L)U>I zy~o-ae5H%n)EW5wHnDRZ%zyAaDJdyzN>9V-bW-NAsN9;*!{r_ZU*630I~Lz97O{Gx zm~*OUY*M)Xsc`#ip*K{>*{GL=^L~E$p_OodDgz(dxU^(vmE8Y*{dpVj`p5dcUN7Ii ze}R&+32OUJV~^Uo_O9^riwb_huQG*wf41MCwvr6j7|}KFUIRLpELH^G7ok4QFnTr zrnj%qdT|+_&&MqRNmk%DjAbRRTC6-H+*J4Lzw$RP%U^l*1SxiGC(dP>LJ59Q zt0iquIPskqdM&|i`C|#L(IW{i@dqex46b{JP9=ED*b?dY+VN_k#2a2)TT5`fM?C(< F@+X-|6Jr1X literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/frog/male/foot_br.vox b/assets/voxygen/voxel/npc/frog/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..2b778387c767d88b9ea8139c48f8b0e405465b54 GIT binary patch literal 1240 zcmchWZA@EL7{{M`Z&8#@K?LPJBMWg(g2a~?vMh`7lZhWh{r2VwC&pK7!i@??ZJ?OT(gL@2HWd5BphW)N_Q)%uNOEXlBMOV~a7G0bcL!5?1oVupD47JvEaT!TUDrab_kCJhh zxGYJk)~pk^mKbL-5+ju~CEcy-x?4+9v?ywdhVI_ouw%RVp{lT|s)}ed%IzVc@%#cV z>mU4TwK6~7Ou{Y%X9+cxa&UhQ(Viw|`-0349b|U2o66Z^r1~?l9dO_{S&V1A8mUi0 zy6#0L9zYf{No^LgUKBPD3R^D;$z8(6n2@gg%#Q?La|&O6U%(eD`9v2Vq%JD73=7Xq z3n!M=^WIPj?r0GeaX;A+E6xEsMU%OdT`wT3LvWu`J+EZ5;bS}Uw3^?Wj11q0%vk9w zNMourgO$g!Vdoaqy)dWrjna=w!^ef`w}kmAVezu^{lY}O@X2mr^?9LP`N!LY!NV%v zBLqA`XO+-XC!AIB7N4DPy_4RSLPn016WvqE$k71vuRX(0lVOTonLJvaOVi_p9BHeh zYo`#~FO0t|Tzylh$gvYFa???fe^jN z+8KPci}=(T`27y?a~;fo@B%3*DQrql!{KmH=5bQ7EuTlqJq*6Gndx_&e79J{>dj)# zshROf;l`)Jov(%7a3N=7UKTC{_~nOIBK@fhd}!tJl8sez|M&gpZM^3n`}caieEa@I zO3Egv={t=rX5;$1!p|=$1q6@B!&m*IJlQyd#CpkyWH2|neupRRc5-rZm^&1qw4|HE z{b$(JnZ?bEdCaxj7*c2T@AI#%88UnAYrR3_D4ZCbBKBUKH)cL(?6YMa?(U=Z^f*m# zU#0cZGJe0G+X9lT#BUhO%DLub*nGolYilMGGZOYU%AYAR B6G{L8 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/frog/male/foot_fl.vox b/assets/voxygen/voxel/npc/frog/male/foot_fl.vox new file mode 100644 index 0000000000000000000000000000000000000000..d994053164168492adc00ea615950915f0a30ac7 GIT binary patch literal 1164 zcmchWYfRf^7{#Cezbrx76r_~3OsH+S6y~@Txrk!7g3w_*8Ln=Xk=1HO?POT=FoJ_ks$_$ zK~WdoVbFA&L3F#WX?8J)Jwwy&8KT=XU2M8RY?{in46%zY_PuSpc1o(bLPJ9Xu~>{- zBSQNdi`b37^NZ2Q!h(+!E_jppJE}N*u!&e-2gw01$&te($9t(yo*>(8!hFbz^;8AU z$ws7g6B51?nYssAG?DES@}Cp74GY^Z37KJGOI*lR-t>V`>&xPc?@IZ6wS?Hxy|l!H z&Qam%S>fdJM&0Gl!VxQ{F5#viV#GFNp?tcC>T9LscMFcws^^sgHh*YAo>23nnaJo} z$efXZ(i~>0@>qSi0CwNUs0j0lUn~BgINC4FzAh}x2uqihcMDUk!bf|BwP%E&^8Eo} z_^8VJ1dmhbX%PBagmWtIthEqowGr(sW9(QBv3>Q79rv*C@{{~H9iqZ+;-Q)%Ivy$G zSfHNpZXte9n0!IF`kGKzXu(_Vpu27dk(NdRdS1~ZIGs+u931Dd_BkXTB`=c4{P@Nlp0ZddEG%UHNQA1& zUXBi)Wou79H!c=4A2c(f&g$Ri-`q5k?scH+I+5dWa(ssPI|*K$`;>`KR(POyfaWuk zbi8?$u1hPp-EM9PNTwpcVpvh;GaIW<2{+aI`mg%UEAm%eeL*TLyGUuX)|*yeX(+At zYfa?ri=@}Zp;yuxD49rWqaI6ZrN>K6yMH4)ayqTsCzi>*+l)&KrT_5y`g&SZGgA1Q F${$tB4;26a literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/frog/male/foot_fr.vox b/assets/voxygen/voxel/npc/frog/male/foot_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..362de03e04d7a8767c49bc223ed83f571713ef19 GIT binary patch literal 1164 zcmchWT}<0$7{#Cezbrx76r_~3OsH-7Xqn@q2viii6@(7yWH{U^Bb(deYNI2KA&fLj zw(255lpukTOc4#DF=HFH#Knu*C|QVe5+r`akY!nnS0-MFdiV2fF-DEop5)}b=RC>t z<~}y5`Wt;K(qDO;;_G9=$i6st!tWH6WuPFZWGaMnx@#<@XhEJ(^9M4KvAd9Y zBZH+m%vR>H`fvg4zK<~x78Ji${6TT7UzmGcNX`mNmzDPl)6K$1dxf=UgrM^MUBbvw zmG=ogr_fU`^fd|RRNhfzA=GSRprefOW7S0W)iHkDNAl$-`Ee#hx!uG=)kU;DQpT~a zI>Nh!*g;|H1>x#zLT#Z1zso^)?G7SM9=cp6LNx^pw-giasUYC1W6z@=9&hmwJ``Z! zM39k}!o+9K!f&^UpYJC5-m_$7WwA9k2dmXemD5J;juIZMb~5tfHs;>4@$Hg}wHxJ} zS2N=?!u5}Z+g}L-p)$_J+$>)3@$>hcM24~%e&5LDWix9O{qOrP-g3u3_V0GP`R3h= zR8&pVFn9)Y%*?g7g`b{R^a)OdU&^t)unJL=d zyh`V#6}(V5rJ{pJ<2eEPjzcxBRg_Bt=lJ;$-Uc*TMMQC@cR0CT2nJp_?yZf DQQ8j_ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/frog/male/head.vox b/assets/voxygen/voxel/npc/frog/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..4670f5fd75b79a2699103f3540b511aa3479d0fc GIT binary patch literal 1868 zcmchWZD^Hc7{{;s?P)bF%{kqf&2^s5dCtt~p3`1h*>o;FuFZ70bg5`6c^c(7gy=X3 zx{`)kV-2TZnT4$g-L!2aeXvm?l9`zFLWqcjpMpMQ_3hvPIYLzQxf_1`ueaxZx$gUE zTfVyZpolatOtw&@<}Q)eWP9U;(BYt)#iOoX)1J&RVN_(CIH!F}jMGs~l(h*(--YU# zglBZrv&uKLHL=bnJga@BT|ya`5TkvuDk|FEa@r=0V;xb%F|U;l6wx|VRicR@mWbtg znlWOCB`!NJV}>zeiQ`;0oYyi&Y>3A_6YaP+Vu`jUVYrSBF**=shsD|xIRxzdx&tn2F>{DomF)<~|@LQ@5 zRcp@4`p{Ok#7MY*@vYSfLo{*BnQTmaV{}5a85U!PHEm_XoZ+4<&r4;@QJvy_u*PGp zu{Q9G8#2lUqFtv)gn7|Co7M@dxEAq@z2)(Kl(s`cTlkF^)+zQvB+BOywIaS!64k^I ztHgIyrN!5pF{-6Hq73UyxM#+Qqwgsd^|bOmqkIX`><#C4+>4{H_=X(ciO0TJ&jyBQ zqMQv}h{s+LOoLl0^%J4G2d~O${=c3~uxZmcDfke%>GWH7^h2+D;|SLrIWD;Pso>@}g09qT9O@2m?nDEA`LPx0eUotD!#te2T!3qs`M;mPbmHCr zIDZfX`0o87RLnnyx}H5K=q|wdcLhJcL>dIKSPWn98^DuGPeZ!9Ff~0DV*_{Ya91RP zqM{;dt?>+luS*Vp5Q0Fp!S8_X3tUqo^BS;2L_um8$lKO=wT`3s^v zvIwCrP@P$AE=y(gAytRTtI}D!G_^mgZL(w0&Y79?oew1iL_Vrn59 zl8Q7|f+a{OCRX|bH^O=FBtCO#PB+xWScH)DBqlP`15 zoSFH~nVEBcY<+Os&?ynww06S-2zlfaB3m|$k0JWMoA|dw2HUoeZ&+A*wG=Oss?@|P zwF*L&>Z)i{O0089wJ)i4B{qW2SFv`L)}_)Wv(7$Ec~CrhP*iHC(&Qkm2gyqlfqH2J zNP&H)CvK|HRnoW=>fFUEv5h57DTq~U6yzdp$x_E8t)$SD3{Q@Yj6uH5+x`S{i) zkBx6i7059(uJTRBE+*GTxU>>DwT^Hp2$i}6=xN9s7lwD&R)m9#6HubL>?7! zLqf;QRn)y=76P@;Jp#P3%{@9FX$p3^%LO0LI?=CA{ z_5oz{ijVJQXA7@`uLIwbsN7lU4R9gU0-WdGp1lLgy_Nd%?Ww$C@7t)ZjsY2vo|*DU zM@`U4KzeGSd~X8q%%7)!aB0UU%qv`x*il)-7Xxt}YdE7LmQeG+w@A4oyivHHcHm7A zUjy$CUiI7!-rVWoQ}`4VbpoT&%3Nb49J?B2a8^{+vPd^ep_lk}fsn>CT@~D`Z ziW(>4ChDKys<@L^e#1hVs^~?9U!g~ZTnd~8zC`SVUFznK+ysDE%OO2=^30IqF1hO=>jDD5oyu>h zx-^+IT}T1x(}kdEG6W>+?8Y!@BP|Z(d++TShZ@EO-xMKM<>MYd+CbZHt=uz=fHqnzP!o0zt=bX`i7W3I%u>~Ih_$xU1 zjM({~id{Y@_RgE^N5x(l6Z_4>V%HuQ8)yH_RO`A5&Zkchj4Gj(1(%}WR;;zrxmzE9N*qWvG;61DD_z!Qj z^Di&3KfSZquD!R!eh%l=h#lOs$W9*~u`92yvw!?~i|s!;-H!coz}|d+ zwq3LN|M&ZkjEvaH?c;WO$4+~B_qT2K;o0`~t70GQ5Nj4Kvf<%j+c$ELeShUfd*PvN zHgo?>yZGYu9v+&*?97{IV?%e^-CsUoj~;!_ZrL@<-uu<-SCC z_AT$){wK^1ym-zIzcyt*nS9HB_WP^$#iyRPyMJ)T?*GLl+w#U$8yy|BzaKD@0_ZTl9)Nj5b>NgCN#v55N6v~E}G(KmWw1z2d zm^I&Q)wn#(&C?vK=H~h+YcEk<%+{2c@=}NP>}pyYR)?vtuO}Xl^I%fgdtsR^w!it) zW@Blojoi8#`f6Pi2JATcUARUn@y;|LK`Rn{9J#a+S+-NyCX@^anP5kvb zrj9kU^uZhaHXEUGi=D>ma`wIA;Yep4(N-bxrZDrauy{_WEprm`RnS|zgIG%gojyB} zno`F1Y$eKheY3$Weyh2{SPoB|CS9l^Yi*C@5f4(FR;D7gb(2wL6~W z#cD6X#wrf%ZeZg5&CFkP^V2OKt9L5-RC{J;h1=f>zx*H!M?6d?{48H>=8vB{h>aC8 z{)LU}cO9%!{=fgf-|r{c9cH?xmy7*x;Yc{R`MGefM@V}-c)eZ*{JS|-*UGtrT@=TP zSvddj3`d-Lcgo5Ly0)|PrAZEtoncd733tBS%0k$|r0&_j_dgf+>fQ|99k+=cgQ4?t zBra$9D072PzFXmi6KC1^-VFObTcqRK3V}d?--kf*75s&HMY#XX!}%B;UDF@Pf9v;; ZA4i|y+B8IsbavTH*EcE9-JN5lXZ|Q#=k&In%WcjwJxwe&w&QS(BQ}*o zSeK(EHnGDQwA>1jJZGC+QuK$(k}()#*oa`r7$f>C=#Pm0d-Z(Xf3f-RKJe!G@&3G@ z=lOm<-%s2AcK5i5G}njssga+vL|Vg<&{Jlh%c9VfJfUdsh=fyW%~h%}3^^%=^r<^< zD8yo$(cKE`tRdF4SgdKoqOoC}F^sIV7|L6+W<`C&{%kwi!dTj@5+vmhAMw-8<{ohSh;;YHCO%65JaT_MBg4v;ANG zw%b`+YQ|ib!r!fnyr2VTj~n-38NSI{BxFNkPa+qeMV1}pH4BBk!lqGS+hrjqCOn-K z@-=p(h05k!ntJnyoXY2uh39BY2rVh$y*Z)(mTFsE6h}RjCj3-of)vH=ct%|Kr%EWl zww1yzq4bp29vA8s1$k5Z59A=JXOMY2XSQx&`lSMHzg7fI&!hLkg5p=j?}}8PF!!0T zG%Z}eqH$2T7!tleD6Ae4A{zI#38RNJe?n;R3EefqiAG^U^DUJwq9G3hEndbCSCDwC zn(?CzEPeboe@sOw+w7pOqJ+J#dpX=zO{_^sz9US2AS|90s)}8N{iSqOZ71GXOPk+8 zw6chi-CM|XzewajJ+YpBB#w77Ja~kG_alrB#mG#bX65R6a&vRpn7;wH+fBL8L)G>d zc%{NesIHv-yJ{KzXcKc6Jp6Xu&+5%GzR;eTDdEPC!u?-_fvA^>WPs&M4g7VdmH2QT zBj4D$a?8moC6E341AzdkjtCQ-U0mpS7iZGRwXcNRokH5{#pmL$(}Xr~}v zz{0r)cR1+Mf2X*Zkb4_DULE7m@M$)77jpC4Ei6QwjOm&E|NPB;Z|s?;qxA;yqtJhD zn&j6RKApeH=Rd9R^6@k5_;8ZFUoO&md4*sw$e;ZnIST&4x+2{D;lX?i4XyF_`Zxc1H-Wli!?oS9#bTPwW2Uj73;nmS|v diff --git a/assets/voxygen/voxel/npc/pig/female/foot_fl.vox b/assets/voxygen/voxel/npc/pig/female/foot_fl.vox deleted file mode 100644 index d30124b8889b2e412c7d25341100bf5936345550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmc(ee@N7K7{{OQ_jJhIhRyTr&Zf7^*4-Ixdd?r4Yv=T;vsszV>FLCcB9Frs$0(IU zXg6a`T;dLMux2ep(sCs?+1MW@ArVA`MFb%cWAs}hq6iAZB@c(*zk&k$)2M?x=HLd{fc%5zF2ZeJX;pctA${``5y0=9bIiT^QLY+_O ztP+ma3*#DZDt8eLdFXHQGIp?x#0Qm(b=R@@<%c|;j8d}EK}}f^yWaJ3u%(h%gOL14 znD|UsI3-jRx(NG=>8RLByuO+izk_Ib0mC~sk?wq*$lh9FUAsvfX=iBQ5dEJ<7#WO_ zo;tzuwKHUAXR|(c9d5UqQlE#4t*`M`nU7FSDSNh8GxEg-X3u)Kf5XqptrEV|p6N;9 z=C8tUcZB|^m+@qPrAu}E@t~RbP!7Wv>|D9+WQC&t{rv-h0I9YJCe68H-!fVf$e*pe6GGzb& diff --git a/assets/voxygen/voxel/npc/pig/female/foot_fr.vox b/assets/voxygen/voxel/npc/pig/female/foot_fr.vox deleted file mode 100644 index 479eff66452edc38ce71da184fa969e6558758b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmc(ee@NVQ7{{OQ_cSCc+&s_Sx%9fZc6W}Ip82C}o#|~mm)o3WdYV{l%;Rv4BQ}*o zSeK(EHnGDQY`HZ==5211n-u+FGGq+K7&amZ86%><-ZH0R7&0#wrt}-8 zoDkDYYcOM&ih40rTVvClH4F<|+AwWelXXSREcMwM)A3qdwP~9*#CAnHrbVop?Ae36 z->etilVvqEH6#)V9*qlo&M&jY{x^Tx?JO-dW7*a4&2`BOI&k*5aSxT@o2o@Z*+}eZ zRewIeN5Hs{jRmq+AeKA$Z-Ph&!8NeLg!2?O_a zZi|cJsE5*opQ=odqPQK;s0;se3FWu9QP?Gvp47D`gt|pR-q!wuIY{a`WZur{Z5x<* zxqt_+7eUhtq(oRyepG%{QvJf*7sAqvaOZ~Vpl~rHd~;A(Jt9O@_qPdShctd%Xz&T$ zHNx>mVN&BQl`f(o4}&dUCJtASc&D0)-UgOFeV5;+qm*rNP*+jH-Z#7)ZmTBNBqZMx zralrD&j?k;F2ep&x~g^%Z>*)w?;u)P#OUs=WV&A>a-g1A&pr~zIvE){!r+Gy#)e~L zW=^qk>pZ!+xopbcfZOe++~=Wc$BVpL;UiR6&i-AsjD511xeFeCy5nc{UK!`KXJ%Ts z`w%NFJk??cBKUWR;Tt{rdxf0I7}$lbu~$=y@M!(#h?w zg$JEN+Uv#V^U)XB#fj=B&Kzi`AYQ=2*~kBI$fb9uxR{W8J3C(+=g`P0Hgy+r@7h)t zB2LEj%>I4;R^3~B=ILm?OS~5b&d!j$l;QLFTYUNb3a=bH&CZXf*!$HYt=Crw27~-Q w0FtBd7q%7Q;kS?X$MEo4{*nB5{^8N1=o4IfXHW80@<}->zFux^;q~XsKk?c!VgLXD diff --git a/assets/voxygen/voxel/npc/pig/female/head.vox b/assets/voxygen/voxel/npc/pig/female/head.vox deleted file mode 100644 index c9b53e997aed0d7f480fb63446dbffdbbb7132b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2576 zcmc&!U5r&%6<&Mowf8=!sG%|pouR^XO6|H+L`tG(n{)oUfC*x=>dYs+Cd~f~$jfP2t1& zU`F1P_f=4>Q?UIZFrKHckLN?M+GRU$)YFbQLeScouY}~hZ=yQpa*d-rs?-JJ7r~lj zwqK*|PbB4cVN#{wiBGAgUywSQG?HTktDMs+dLgl_pl}4V8shdmlT2Z=y|d>{npCEH}mpjKLf+MAjM_%RV_r zw$o4tzG|U~#&2SZj1?_1M_?aAZOo;NVVTHBpJP)_+vGS;VO@@Oapp=&qP0@ysq@Y^ zp1t+r8*{EwzQLqc=NhGtI`&w!iCIor;+trnD0hK#rGIqPXFK`_;T}*HC^PZgySzWj zn9Rf6C3mId%u4oOIq#CQD~;q`<+)p)GY{Nb&)qWajpxjL)^Sfg{hTRv{N}tpcf)hm z-Yfg)X_HB-QnTFg)yC0JX|K%Zqg58UqkJPtqpwo*O%Yw~xRXU>pU6k%*T{R}omjq= z$h{+r^v@*WN+Ku^?yJ@@u&9QR-S-WwTCG9+4 zq`BL6b(*_j*2BEUxd`t<0`DVgBj$K_tbx6A?1y9Sf_IR(lLdR5=#z+5n5SSpiCBw# zKg3xON6K0`U}fxK@ei!Gx~O4=$cwM$Da<#(dKG}?%@ zybJA=TwCcM=@a=KqHBfd+c79#+DC0i%ETgH-?pUfz&Pe&D`b+;Hj*-T^05`g+R+92 zxpp*d3-f8l!Wb5P%QLPcR!2;M_Qv?$w58O0#`oEdc$9Ku93!s4Itq=FH^FbX;)nE0=I<*FW+1t}a}> zxCQz5#@Mf}OY=v%(X+P?eTSA~@YFiUXn;)K0D0}RkW1Z|zeTWUpWxukee*H?>;nAw+~=@qTCjCi@SU@Q1Mky!YcG~e^kdod5LS0auz0Eq z{YQH-bb2XPymLDi?G`M1ma$I=)?X0FH<_q}7GzZ@&>|zPJz{e04Ff`4-HI z;2h}>q>o9n&j`-`L~!wp;N7>#j|g5H75w^P!PUnFCjU~;oy z<`KcE?+GrvC|JFu7h^-quzU5LnA)@s+lRU_v1&1n-g6r|d%l42hc;kx?*o{AY8Q?i zdK?G8JC0+AC($|c9Im|m3g*q5hnp7Mh`zo)tQhRa>N`J=FRvWL==v3S@a}au_QRWT z_SJs;@!cU@eQ!B_%AB3kg3G@Z{Q38SgA)TdIWvq)Z*0Wh{s@&3{T^J! z(*Jw?!^6Xv-8qhvyLRK%z28R9Ob_1qx!{9cf_h*8gM)+EH+(m~zh*ODd}s$2PA$Z_ zm#)q5P%n39$r6nA-GRHlavYByc@8)2S%mj~c^l4+_ux2t_TT-_cK6@g!p?1%G4%v+ z;H5K|`9%jWwBE+czq^7jJ@q{9`oSsO_p=Mw_U09gjEvx~2LLHZ_y_zI!H2)Oh7X4i j&*?vs|E>S<$tS@poV&A6db9GAbXk5q-CW@7`^&!peZngP diff --git a/assets/voxygen/voxel/npc/pig/female/tail.vox b/assets/voxygen/voxel/npc/pig/female/tail.vox deleted file mode 100644 index f42417fa420a834ea536c74f5caef2cb67c6d1b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmc(eZ%EU59LGP~PeIys=s9Pbp6-^_Hp5eA{<*Vmp01i@WtQnQv7@LlG#Q7dGKAVG z*NK1L8NZAPz8 zit2P)R7}B^s%^^73**p%5#h!p=(ztT(>rZ=;d<`8wip%X@EC zq`FO*+pSpp^Knd6Af99-um-vM1+riwwNA+F5VA*v&3A;9fUq_!q^sO?Qz)r3P}`A; z?^HU!&VETvNT`npKTHd~FH~*4g&e<)ypWU9n47Gi5!Stim4(eg|jjD<*WXjIk5d%>QzTHBbdSL`44y4Z&7b2CkKyp zGuyr$<>=5L>)JATetQG6J~N~0%sxK<__*CWqck@>BX|OO&rcD)9^<#@V=g>eWJ}i> zww<0}*X21H?kwVVyLsCSlA^#rXp6$@2OrkQz(B%Zk^lBzcXpz_VB(*BisR;|ytuxa KmuS3tz5ENOFevi? diff --git a/assets/voxygen/voxel/npc/pig/male/foot_bl.vox b/assets/voxygen/voxel/npc/pig/male/foot_bl.vox index 1fd30d5dee8e756b9de32fc83245ec6f347bf8bf..f32ab20fb3251ea784c0fbe2687224395d1303fe 100644 GIT binary patch delta 156 zcmWlR!3_d23ry?ieP7Y{Oc#pPZW^bf9mc$nvU&(zlG1;8<(;nS!Ur=_-PF)A`qui-M^!ff> F+8_P&9WDR> delta 156 zcmWlS!41Mt3`1=v`BJ4`*oVE~#tO`l-%Al=FhIw_|6o~h{E}6evSmZ2``uzEfVx3 yqrj1{Xo$Igbg?zSFR7>j-J5B}%`V^Namt-d4!J|lNJ2ZlBeq%Z*Ykn6elz~46&pwZ diff --git a/assets/voxygen/voxel/npc/pig/male/foot_fl.vox b/assets/voxygen/voxel/npc/pig/male/foot_fl.vox index d30124b8889b2e412c7d25341100bf5936345550..e96706c733827228c74acf48ef16392e8c613a7a 100644 GIT binary patch delta 111 zcmW-Y!4ZHk5CVZq9+|Nu%drP7!xDTa_tCLHi4TSa?y_Y&*Nw!3DdC{7LmD7o%Cdv% hm@FmDWF!>{mV}CLt2^`GJ1Yj^9npc}-#YGVDIb!+6yyK^ delta 111 zcmW-XyA6Oa5JPQWQbb}T#$g8-gAu5cYd{Q$L-FK~UbbxKx`B8&5e^7Dr9twAjFa@9 fUFzT@1{8KmQpH*Qx&Obnq63kH9ZaY8`&!Bel1&uk diff --git a/assets/voxygen/voxel/npc/pig/male/head.vox b/assets/voxygen/voxel/npc/pig/male/head.vox index c9b53e997aed0d7f480fb63446dbffdbbb7132b6..3b311170bf75e5be4580e5f7449673b5004a0470 100644 GIT binary patch delta 35 rcmbOrGC^d*Z`K#=Y%DJ}F=jLI7P7FhtYKwiS;fZ2QnrMQKfDW~NPy%nX~Dm>D-SGc#{yWMbLGz{tFb2}}d!7#TM+F)(dn J+L+4E0swP)3;qBA delta 57 zcmeyu@r7f80we20MQKeIW~NO{%nX~DnHe{;Ff(svVq)3E$jH2j8B7D^7#TM+Gcavp J-k8eI0swTr3<>}M diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index 28474862ca..d1d5628738 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -9,22 +9,22 @@ central: ("npc.pig.male.chest"), ), tail: ( - offset: (-2.5, -3.0, -0.0), + offset: (-2.0, -3.0, -0.0), central: ("npc.pig.male.tail"), ), ), (Pig, Female):( head: ( offset: (-5.0, 0.0, -4.0), - central: ("npc.pig.female.head"), + central: ("npc.pig.male.head"), ), chest: ( offset: (-5.0, -5.0, -3.5), - central: ("npc.pig.female.chest"), + central: ("npc.pig.male.chest"), ), tail: ( - offset: (-2.5, -3.0, -0.0), - central: ("npc.pig.female.tail"), + offset: (-2.0, -3.0, -0.0), + central: ("npc.pig.male.tail"), ), ), @@ -434,4 +434,32 @@ central: ("armor.empty"), ), ), + (Frog, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Frog, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index aa991feeec..d89037e22b 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -20,19 +20,19 @@ (Pig, Female): ( left_front: ( offset: (-1.0, -1.5, -5.0), - lateral: ("npc.pig.female.foot_fl"), + lateral: ("npc.pig.male.foot_fl"), ), right_front: ( offset: (-1.0, -1.5, -5.0), - lateral: ("npc.pig.female.foot_fr"), + lateral: ("npc.pig.male.foot_fr"), ), left_back: ( offset: (-1.0, -2.0, -6.0), - lateral: ("npc.pig.female.foot_bl"), + lateral: ("npc.pig.male.foot_bl"), ), right_back: ( offset: (-1.0, -2.0, -6.0), - lateral: ("npc.pig.female.foot_br"), + lateral: ("npc.pig.male.foot_br"), ), ), @@ -557,4 +557,41 @@ lateral: ("npc.truffler.male.foot_br"), ), ), + (Frog, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.frog.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.frog.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.frog.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.frog.male.foot_br"), + ), + ), + + (Frog, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.frog.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.frog.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.frog.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.frog.male.foot_br"), + ), + ), }) \ No newline at end of file diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index 63ce8f192c..63055e856a 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -43,6 +43,7 @@ pub enum Species { Hyena = 12, Rabbit = 13, Truffler = 14, + Frog = 15, } /// Data representing per-species generic data. @@ -65,6 +66,7 @@ pub struct AllSpecies { pub hyena: SpeciesMeta, pub rabbit: SpeciesMeta, pub truffler: SpeciesMeta, + pub frog: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -88,11 +90,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Hyena => &self.hyena, Species::Rabbit => &self.rabbit, Species::Truffler => &self.truffler, + Species::Frog => &self.frog, } } } -pub const ALL_SPECIES: [Species; 15] = [ +pub const ALL_SPECIES: [Species; 16] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -108,6 +111,7 @@ pub const ALL_SPECIES: [Species; 15] = [ Species::Hyena, Species::Rabbit, Species::Truffler, + Species::Frog, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index 5753307496..dc860029ec 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -132,9 +132,10 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (7.5, 2.0), (Rabbit, _) => (4.0, 3.0), (Truffler, _) => (7.5, -9.0), + (Frog, _) => (4.0, 2.0), }, chest: match (body.species, body.body_type) { - (Pig, _) => (0.0, 7.0), + (Pig, _) => (0.0, 6.0), (Fox, _) => (0.0, 8.0), (Sheep, _) => (2.0, 7.0), (Boar, _) => (0.0, 9.5), @@ -149,9 +150,10 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (-2.0, 9.0), (Rabbit, _) => (-2.0, 6.0), (Truffler, _) => (-2.0, 16.0), + (Frog, _) => (-2.0, 4.5), }, feet_f: match (body.species, body.body_type) { - (Pig, _) => (4.5, 3.0, -2.0), + (Pig, _) => (4.5, 3.5, -1.0), (Fox, _) => (3.0, 5.0, -5.5), (Sheep, _) => (3.5, 2.0, -2.0), (Boar, _) => (3.5, 6.0, -5.5), @@ -166,9 +168,10 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (2.5, 5.0, -4.0), (Rabbit, _) => (3.0, 3.0, -3.0), (Truffler, _) => (2.5, 5.0, -9.0), + (Frog, _) => (4.5, 6.5, 0.0), }, feet_b: match (body.species, body.body_type) { - (Pig, _) => (3.5, -2.0, -1.5), + (Pig, _) => (3.5, -2.0, 0.0), (Fox, _) => (3.0, -3.0, -3.0), (Sheep, _) => (3.5, -3.5, -2.0), (Boar, _) => (3.0, -3.0, -2.5), @@ -183,6 +186,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (3.0, -5.0, -2.5), (Rabbit, _) => (3.5, -2.0, -1.0), (Truffler, _) => (3.0, -5.0, -9.5), + (Frog, _) => (5.0, -3.5, 0.0), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -199,7 +203,8 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Holladon, _) => (-1.0, 4.0), (Hyena, _) => (-7.0, 0.0), (Rabbit, _) => (-4.0, -0.0), - (Truffler, _) => (-7.0, 0.0), + (Truffler, _) => (0.0, 0.0), + (Frog, _) => (0.0, -0.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => (0.9), @@ -217,6 +222,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.0), (Rabbit, _) => (0.7), (Truffler, _) => (1.0), + (Frog, _) => (0.7), }, tempo: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -234,6 +240,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.1), (Rabbit, _) => (1.15), (Truffler, _) => (1.0), + (Frog, _) => (1.15), }, maximize: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -251,6 +258,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.4), (Rabbit, _) => (1.3), (Truffler, _) => (1.0), + (Frog, _) => (1.3), }, minimize: match (body.species, body.body_type) { (Pig, _) => (0.6), @@ -268,6 +276,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.4), (Rabbit, _) => (0.8), (Truffler, _) => (1.0), + (Frog, _) => (0.8), }, spring: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -285,6 +294,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.4), (Rabbit, _) => (2.5), (Truffler, _) => (0.8), + (Frog, _) => (2.5), }, feed: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -302,6 +312,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.0), (Rabbit, _) => (1.2), (Truffler, _) => (0.6), + (Frog, _) => (1.2), }, } } From 0eaa41f5bac9c4da34733a5d074f70b68464e742 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Fri, 31 Jul 2020 02:30:54 -0400 Subject: [PATCH 10/12] arming the cyclops --- .../voxel/biped_large_center_manifest.ron | 32 ++ .../voxygen/voxel/npc/cyclops/male/hammer.vox | Bin 2952 -> 3112 bytes voxygen/src/anim/src/biped_large/idle.rs | 20 +- voxygen/src/anim/src/biped_large/mod.rs | 36 +-- voxygen/src/anim/src/biped_large/run.rs | 33 ++- voxygen/src/anim/src/biped_large/wield.rs | 273 ++++++++++++++++++ voxygen/src/anim/src/character/wield.rs | 4 + voxygen/src/scene/figure/cache.rs | 6 +- voxygen/src/scene/figure/load.rs | 22 ++ voxygen/src/scene/figure/mod.rs | 23 +- 10 files changed, 411 insertions(+), 38 deletions(-) create mode 100644 voxygen/src/anim/src/biped_large/wield.rs diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_center_manifest.ron index 438b6705e7..2e5c424de2 100644 --- a/assets/voxygen/voxel/biped_large_center_manifest.ron +++ b/assets/voxygen/voxel/biped_large_center_manifest.ron @@ -11,6 +11,10 @@ torso_lower: ( offset: (-5.0, -4.5, -4.5), center: ("npc.ogre.male.torso_lower"), + ), + main: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.ogre.male.torso_upper"), ) ), (Ogre, Female): ( @@ -25,6 +29,10 @@ torso_lower: ( offset: (-5.0, -4.5, -4.5), center: ("npc.ogre.male.torso_lower"), + ), + main: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.ogre.male.torso_upper"), ) ), (Cyclops, Male): ( @@ -39,6 +47,10 @@ torso_lower: ( offset: (-6.0, -5.5, -12.0), center: ("npc.cyclops.male.torso_lower"), + ), + main: ( + offset: (-5.0, -6.5, -4.0), + center: ("npc.cyclops.male.hammer"), ) ), (Cyclops, Female): ( @@ -53,6 +65,10 @@ torso_lower: ( offset: (-6.0, -5.5, -12.0), center: ("npc.cyclops.male.torso_lower"), + ), + main: ( + offset: (-5.0, -6.5, -4.0), + center: ("npc.cyclops.male.hammer"), ) ), (Wendigo, Male): ( @@ -67,6 +83,10 @@ torso_lower: ( offset: (-4.0, -2.0, -2.0), center: ("npc.wendigo.male.torso_lower"), + ), + main: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.ogre.male.torso_upper"), ) ), (Wendigo, Female): ( @@ -81,6 +101,10 @@ torso_lower: ( offset: (-4.0, -2.0, -2.0), center: ("npc.wendigo.male.torso_lower"), + ), + main: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.ogre.male.torso_upper"), ) ), (Troll, Male): ( @@ -95,6 +119,10 @@ torso_lower: ( offset: (-6.0, -3.5, -2.5), center: ("npc.troll.male.torso_lower"), + ), + main: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.ogre.male.torso_upper"), ) ), (Troll, Female): ( @@ -109,6 +137,10 @@ torso_lower: ( offset: (-6.0, -3.5, -2.5), center: ("npc.troll.male.torso_lower"), + ), + main: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.ogre.male.torso_upper"), ) ), }) diff --git a/assets/voxygen/voxel/npc/cyclops/male/hammer.vox b/assets/voxygen/voxel/npc/cyclops/male/hammer.vox index 92a065b5c76de9e35de9ce7a39ed98d3d0159b14..ff155aa3bbad96f5e92bafdd81126b9588779e39 100644 GIT binary patch literal 3112 zcmai#ZH!!H6~~{s&)c0lx9zsO-R{iXmzmi@yKQYPg<@%`f*v z+2@|;{LlZK^E~G{yZ@ehTc?y#dvDo&H;WpJmFn#-rdbw$5r3B;tC4%}D|Y|cFK(;% zD@p}6>*=UH3{2Lq#3|D3+psxj!se`Y%^B^RbE=m1RGjop)GlV@W9Y?M$J-%+z~d}9!BPC>2N3pmptN_v$VYn=5B96C(! zha*fmzhr1#9iGO}Rul4R5U8ijl%loz=AQZ2|g*bBR5BG zzEuP+Eqs&@J+=5K9U9x5v$n}OG-sV}&iXLxd!Kc~I9pJ0+EsDZb7f9p-V1!*^Komz zo2=*Q8|#{dXW#q0YdtaOg-VomeVi^BmlTyaU#P&NE&l8Uj`;8gmVCK8&mH>m%shM% zwvxM=4t3mKaO7>u)z!(XPCwSUulk&Jb$Sxr*2$aIb!M&W%o*R|&N{QYJl9%6KjvM{ znd*2FeUkIeIs0HPh&w&w0<%fL?3yE(bH=>HDVqVHPN-tJra%hVb@!#$da zyL8FGl9#c`(6MSm-Im-9HF0mgytfi#$=@V=2jm}+FEK5v;_ft3;Y2Ra*g?%4a*&^vO76MT{dgJ{H= zqzFqM4Q~Ze>A(afUs@QI!Iu`glEFtmX?Ps9a8FKCLx~4#E9uaJHDFC8D|FBr=pZAH zd>8~d_*UVAyl?^irI8@RFCRMW4x9_fO=pECUmuk5^MS=?iD}_-#CLFejhK=v@TFjxVE+r^XA!Q3X6DQ6`8@8Iz4d3rY>mL`^oI@l3%v-lYB8oU8-;daa?hmT{PdiuUX z{Xx{`eIT_KZ>ZDPaA-I*`5N-oiyX}8#hS`lSLT5b*D((iu`BpjxRVP0)>U3Ii1n>4`aWA|`GtQ*0;9Q$(cD~8=WZoNgB5B}c^zxnxjdG8q|cYgn} zOpd)T{}>ySOPBVRCV64^Pd`*fc8$yS;SDnV#ho&BdYhdXpJm&avfuaZ>{ zD_K9iMmD^tBs{2O$uT9PPbnGyv6Ace)@0AaBT^h4m2bV0%I)(?_MKGnne$2>dkf!v z4ap94WcB};gpvzqmAvt)l0W@M$&mwV<+)>9 z09alS9Wx!10Uk_UD!m*+T_`?sg^(5-DbvTv=Ndhj~= z>#r}!->>{a{`LDyBJW<7^^@bW}dExkxTsv&M(kzh%o7 zdHTlFvT5@f+5W`iQa@Ig*M6wv?ST?Gdv@{c4<9}(pS<&BQOAzR%0nyVm1jS=!>=~z zoh*~5zkX77ZhuA|IQ|Wpm{}!n{^S~YrKrm@t=50VFL5Q;eZ4p2(C0-Sd-j|h`_TpY z_RGJL@BZ?N-0;W~vh(rNa@P+oO7F!hvTN5ad5=_7h{!)hUs3Yz&p*iTUHa?)*?EPF k@9e7Ut7reW4NK{BRlon(O6TO(hh<{htTZ>BzZzEk8`01tW&i*H delta 1941 zcmW-iPmb$048|pjr0gW`CH|i&y69C3w2QZB3)n{SY8#n3MEBYD1U*A%`Ou5>Nd0L7 z5EiA6A1RVz{<;4(J%9i0>kog25Ptdb%ddRGpXU&kFWb+TqVPK*-yxrnuYYV`e#$KP z{TD-!J}+sKL;7lsU07oiR*U{k5sSvxzJ)F>p$)4}vZW~X6x07#n#?jd~y%=lo z7u)p$@h97*7j*Vm>nA_-vu&v*LxXJ6r$ag}#lC$u&aio2A!}t%Er&zeWRzXHv>S)U zSt2vm%BELt*2t!|y@IU5pe8dFdW~L#Kar8127aM|2byk_HQu?zNTZH%4ihip7HG7%D5ca! zxG44nrfoj_$s)DYA!8=B)sd-P{-_EYh81=-cDgB< z$~_pemOI-Vdn@+fjXmRBu~Y1{D;%f&nL0?i6RE3t$Mv46a~`Q<$FpiNLKI1ex7Ah^ zqPB+kyjgdlKTd~sXPiR_PwL_8PxMO-k8>Gr+42Mn9;|ie!@w$7?a$9Gji){J$Z*E! zv}ZDrhtuZ6i5hdW{U`z*lfsK>Ze)T^d$HAADG;+jA9g#EBqL!2x2YNl2_g}J8Y8C;&&A7rhjuv9%9 zcWiskd7^m;yo9*=RB(cXCEvmKGFNx-VCpANq%ITf103l5xEPKcqI^ex!GIT0F-o1h~Nc}F0(|G=Z9nDy^2s6UFuo#zeY;!AXW@hA%X&Pt6$I~!0qOlj8 zzTl+HaGYrwmo3DQWcD&0EI3Oz(>sF*XG(B}je<|$6}&<23@XRQnXH-ak7Ph5nT5>B z$gsK>9zmG@iHMbmQz0pT3guRi7$jDL!Lc(J0?s1@k+MVxgrJ2dCj_2euww$sfCGX^ z1g*hdHTbIqe;8{MeN`lhJ(92|`Ay}SA1?Oh0`NnOO@AnRrum_WtG&89x}xjD?hxON zufORXyDLOUx*7uURnhg~=zjHAZ?JE`HSjgy8gLCh8hy2Mqi;!xNd5KS@2iXc4~yC8 Ap#T5? diff --git a/voxygen/src/anim/src/biped_large/idle.rs b/voxygen/src/anim/src/biped_large/idle.rs index 7c7fdfa976..d240811ace 100644 --- a/voxygen/src/anim/src/biped_large/idle.rs +++ b/voxygen/src/anim/src/biped_large/idle.rs @@ -49,9 +49,9 @@ impl Animation for IdleAnimation { 0.0, skeleton_attr.upper_torso.0, skeleton_attr.upper_torso.1 + torso * 0.5, - ) / 8.0; - next.upper_torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.upper_torso.scale = Vec3::one() / 8.0; + ); + next.upper_torso.ori = Quaternion::rotation_z(0.0); + next.upper_torso.scale = Vec3::one(); next.lower_torso.offset = Vec3::new( 0.0, @@ -61,6 +61,15 @@ impl Animation for IdleAnimation { next.lower_torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); next.lower_torso.scale = Vec3::one() * 1.02; + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + + next.main.offset = Vec3::new(-5.0, -7.0, 7.0); + next.main.ori = + Quaternion::rotation_x(PI) * Quaternion::rotation_y(0.6) * Quaternion::rotation_z(1.57); + next.main.scale = Vec3::one() * 1.02; + next.shoulder_l.offset = Vec3::new( -skeleton_attr.shoulder.0, skeleton_attr.shoulder.1, @@ -125,9 +134,10 @@ impl Animation for IdleAnimation { next.foot_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); next.foot_r.scale = Vec3::one() / 8.0; - next.torso.offset = Vec3::new(0.0, 0.0, 0.0); + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) / 8.0; next.torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.torso.scale = Vec3::one(); + next.torso.scale = Vec3::one() / 8.0; + next } } diff --git a/voxygen/src/anim/src/biped_large/mod.rs b/voxygen/src/anim/src/biped_large/mod.rs index 2926dce544..a15d030039 100644 --- a/voxygen/src/anim/src/biped_large/mod.rs +++ b/voxygen/src/anim/src/biped_large/mod.rs @@ -1,9 +1,12 @@ pub mod idle; pub mod jump; pub mod run; +pub mod wield; // Reexports -pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation}; +pub use self::{ + idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation, wield::WieldAnimation, +}; use super::{Bone, FigureBoneData, Skeleton}; use common::comp::{self}; @@ -14,6 +17,7 @@ pub struct BipedLargeSkeleton { head: Bone, upper_torso: Bone, lower_torso: Bone, + main: Bone, shoulder_l: Bone, shoulder_r: Bone, hand_l: Bone, @@ -23,6 +27,7 @@ pub struct BipedLargeSkeleton { foot_l: Bone, foot_r: Bone, torso: Bone, + control: Bone, } impl BipedLargeSkeleton { @@ -35,36 +40,32 @@ impl Skeleton for BipedLargeSkeleton { #[cfg(feature = "use-dyn-lib")] const COMPUTE_FN: &'static [u8] = b"biped_large_compute_mats\0"; - fn bone_count(&self) -> usize { 11 } + fn bone_count(&self) -> usize { 12 } #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_compute_mats")] fn compute_matrices_inner(&self) -> ([FigureBoneData; 16], Vec3) { let upper_torso_mat = self.upper_torso.compute_base_matrix(); let lower_torso_mat = self.lower_torso.compute_base_matrix(); + let main_mat = self.main.compute_base_matrix(); let shoulder_l_mat = self.shoulder_l.compute_base_matrix(); let shoulder_r_mat = self.shoulder_r.compute_base_matrix(); + let hand_l_mat = self.hand_l.compute_base_matrix(); + let hand_r_mat = self.hand_r.compute_base_matrix(); let leg_l_mat = self.leg_l.compute_base_matrix(); let leg_r_mat = self.leg_r.compute_base_matrix(); let torso_mat = self.torso.compute_base_matrix(); + let control_mat = self.control.compute_base_matrix(); + ( [ FigureBoneData::new(torso_mat * upper_torso_mat * self.head.compute_base_matrix()), FigureBoneData::new(torso_mat * upper_torso_mat), FigureBoneData::new(torso_mat * upper_torso_mat * lower_torso_mat), + FigureBoneData::new(torso_mat * control_mat * upper_torso_mat * main_mat), FigureBoneData::new(torso_mat * upper_torso_mat * shoulder_l_mat), FigureBoneData::new(torso_mat * upper_torso_mat * shoulder_r_mat), - FigureBoneData::new( - torso_mat - * upper_torso_mat - * shoulder_l_mat - * self.hand_l.compute_base_matrix(), - ), - FigureBoneData::new( - torso_mat - * upper_torso_mat - * shoulder_r_mat - * self.hand_r.compute_base_matrix(), - ), + FigureBoneData::new(torso_mat * control_mat * upper_torso_mat * hand_l_mat), + FigureBoneData::new(torso_mat * control_mat * upper_torso_mat * hand_r_mat), FigureBoneData::new(torso_mat * upper_torso_mat * lower_torso_mat * leg_l_mat), FigureBoneData::new(torso_mat * upper_torso_mat * lower_torso_mat * leg_r_mat), FigureBoneData::new(self.foot_l.compute_base_matrix()), @@ -73,7 +74,6 @@ impl Skeleton for BipedLargeSkeleton { FigureBoneData::default(), FigureBoneData::default(), FigureBoneData::default(), - FigureBoneData::default(), ], Vec3::default(), ) @@ -83,6 +83,7 @@ impl Skeleton for BipedLargeSkeleton { self.head.interpolate(&target.head, dt); self.upper_torso.interpolate(&target.upper_torso, dt); self.lower_torso.interpolate(&target.lower_torso, dt); + self.main.interpolate(&target.main, dt); self.shoulder_l.interpolate(&target.shoulder_l, dt); self.shoulder_r.interpolate(&target.shoulder_r, dt); self.hand_l.interpolate(&target.hand_l, dt); @@ -92,6 +93,7 @@ impl Skeleton for BipedLargeSkeleton { self.foot_l.interpolate(&target.foot_l, dt); self.foot_r.interpolate(&target.foot_r, dt); self.torso.interpolate(&target.torso, dt); + self.control.interpolate(&target.control, dt); } } @@ -142,7 +144,7 @@ impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { }, upper_torso: match (body.species, body.body_type) { (Ogre, _) => (0.0, 19.0), - (Cyclops, _) => (-1.0, 27.0), + (Cyclops, _) => (-2.0, 27.0), (Wendigo, _) => (-1.0, 27.0), (Troll, _) => (-1.0, 25.5), }, @@ -160,7 +162,7 @@ impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { }, hand: match (body.species, body.body_type) { (Ogre, _) => (10.5, -1.0, -0.5), - (Cyclops, _) => (0.0, 0.0, -3.5), + (Cyclops, _) => (10.0, 2.0, -0.5), (Wendigo, _) => (12.0, 0.0, -0.5), (Troll, _) => (11.5, 0.0, -1.5), }, diff --git a/voxygen/src/anim/src/biped_large/run.rs b/voxygen/src/anim/src/biped_large/run.rs index a375034e1e..ac33aa2fb9 100644 --- a/voxygen/src/anim/src/biped_large/run.rs +++ b/voxygen/src/anim/src/biped_large/run.rs @@ -65,9 +65,9 @@ impl Animation for RunAnimation { 0.0, skeleton_attr.upper_torso.0, skeleton_attr.upper_torso.1 + shortalt * -1.5, - ) / 8.0; + ); next.upper_torso.ori = Quaternion::rotation_z(short * 0.18); - next.upper_torso.scale = Vec3::one() / 8.0; + next.upper_torso.scale = Vec3::one(); next.lower_torso.offset = Vec3::new( 0.0, @@ -77,6 +77,15 @@ impl Animation for RunAnimation { next.lower_torso.ori = Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); next.lower_torso.scale = Vec3::one() * 1.02; + next.control.offset = Vec3::new(0.0, 0.0, 0.0); + next.control.ori = Quaternion::rotation_z(0.0); + next.control.scale = Vec3::one(); + + next.main.offset = Vec3::new(-5.0, -7.0, 7.0); + next.main.ori = + Quaternion::rotation_x(PI) * Quaternion::rotation_y(0.6) * Quaternion::rotation_z(1.57); + next.main.scale = Vec3::one() * 1.02; + next.shoulder_l.offset = Vec3::new( -skeleton_attr.shoulder.0, skeleton_attr.shoulder.1 + foothoril * -3.0, @@ -98,20 +107,20 @@ impl Animation for RunAnimation { next.shoulder_r.scale = Vec3::one(); next.hand_l.offset = Vec3::new( - -skeleton_attr.hand.0, - skeleton_attr.hand.1, - skeleton_attr.hand.2, + -1.0 + -skeleton_attr.hand.0, + skeleton_attr.hand.1 + foothoril * -4.0, + skeleton_attr.hand.2 + foothoril * 1.0, ); - next.hand_l.ori = Quaternion::rotation_x(0.3 + (handhoril * -0.6).max(0.0)) + next.hand_l.ori = Quaternion::rotation_x(0.15 + (handhoril * -1.2).max(-0.3)) * Quaternion::rotation_y(handhoril * -0.1); next.hand_l.scale = Vec3::one() * 1.02; next.hand_r.offset = Vec3::new( - skeleton_attr.hand.0, - skeleton_attr.hand.1, - skeleton_attr.hand.2, + 1.0 + skeleton_attr.hand.0, + skeleton_attr.hand.1 + foothorir * -4.0, + skeleton_attr.hand.2 + foothorir * 1.0, ); - next.hand_r.ori = Quaternion::rotation_x(0.3 + (handhorir * -0.6).max(0.0)) + next.hand_r.ori = Quaternion::rotation_x(0.15 + (handhorir * -1.2).max(-0.3)) * Quaternion::rotation_y(handhorir * 0.1); next.hand_r.scale = Vec3::one() * 1.02; @@ -152,9 +161,9 @@ impl Animation for RunAnimation { Quaternion::rotation_x(-0.5 + footrotr * 0.85) * Quaternion::rotation_y(0.0); next.foot_r.scale = Vec3::one() / 8.0; - next.torso.offset = Vec3::new(0.0, 0.0, 0.0); + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) / 8.0; next.torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.25); - next.torso.scale = Vec3::one(); + next.torso.scale = Vec3::one() / 8.0; next } } diff --git a/voxygen/src/anim/src/biped_large/wield.rs b/voxygen/src/anim/src/biped_large/wield.rs new file mode 100644 index 0000000000..332e1ecfa0 --- /dev/null +++ b/voxygen/src/anim/src/biped_large/wield.rs @@ -0,0 +1,273 @@ +use super::{super::Animation, BipedLargeSkeleton, SkeletonAttr}; +use std::{f32::consts::PI, ops::Mul}; +use vek::*; + +pub struct WieldAnimation; + +impl Animation for WieldAnimation { + type Dependency = (f32, f64); + type Skeleton = BipedLargeSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"biped_large_wield\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_wield")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (velocity, global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let lab = 0.55; + let breathe = (anim_time as f32 + 1.5 * PI).sin(); + let test = (anim_time as f32 + 36.0 * PI).sin(); + + let look = Vec2::new( + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + + let foothoril = (((1.0) + / (0.4 + + (0.6) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); + let foothorir = (((1.0) + / (0.4 + + (0.6) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + let footvertl = (anim_time as f32 * 16.0 * lab as f32).sin(); + let footvertr = (anim_time as f32 * 16.0 * lab as f32 + PI).sin(); + let handhoril = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin(); + let handhorir = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); + + let footrotl = (((5.0) + / (2.5 + + (2.5) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); + + let footrotr = (((5.0) + / (1.0 + + (4.0) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + + let short = (anim_time as f32 * lab as f32 * 16.0).sin(); + + let shortalt = (anim_time as f32 * lab as f32 * 16.0 + PI / 2.0).sin(); + + next.main.offset = Vec3::new(0.0, 0.0, 0.0); + next.main.ori = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(-1.57) + * Quaternion::rotation_z(1.0); + next.main.scale = Vec3::one() * 1.02; + + next.hand_l.offset = Vec3::new( + -skeleton_attr.hand.0 - 7.0, + skeleton_attr.hand.1 - 7.0, + skeleton_attr.hand.2 + 10.0, + ); + next.hand_l.ori = Quaternion::rotation_x(0.57) * Quaternion::rotation_z(1.57); + next.hand_l.scale = Vec3::one() * 1.02; + + next.hand_r.offset = Vec3::new( + skeleton_attr.hand.0 - 7.0, + skeleton_attr.hand.1 - 7.0, + skeleton_attr.hand.2 + 10.0, + ); + next.hand_r.ori = Quaternion::rotation_x(0.57) * Quaternion::rotation_z(1.57); + next.hand_r.scale = Vec3::one() * 1.02; + + if velocity < 0.5 { + next.head.offset = Vec3::new( + 0.0, + skeleton_attr.head.0, + skeleton_attr.head.1 + breathe * 0.2, + ) * 1.02; + next.head.ori = + Quaternion::rotation_z(look.x * 0.6) * Quaternion::rotation_x(look.y * 0.6); + next.head.scale = Vec3::one() * 1.02; + + next.upper_torso.offset = Vec3::new( + 0.0, + skeleton_attr.upper_torso.0, + skeleton_attr.upper_torso.1 + breathe * 0.5, + ); + next.upper_torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.upper_torso.scale = Vec3::one(); + + next.lower_torso.offset = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1 + breathe * 0.15, + ); + next.lower_torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.lower_torso.scale = Vec3::one() * 1.02; + + next.shoulder_l.offset = Vec3::new( + -skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2, + ); + next.shoulder_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.shoulder_l.scale = Vec3::one(); + + next.shoulder_r.offset = Vec3::new( + skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2, + ); + next.shoulder_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.shoulder_r.scale = Vec3::one(); + + next.leg_l.offset = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + breathe * 0.2, + ) * 1.02; + next.leg_l.ori = Quaternion::rotation_z(0.0); + next.leg_l.scale = Vec3::one() * 1.02; + + next.leg_r.offset = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + breathe * 0.2, + ) * 1.02; + next.leg_r.ori = Quaternion::rotation_z(0.0); + next.leg_r.scale = Vec3::one() * 1.02; + + next.foot_l.offset = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 8.0; + next.foot_l.ori = Quaternion::rotation_z(0.0); + next.foot_l.scale = Vec3::one() / 8.0; + + next.foot_r.offset = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 8.0; + next.foot_r.ori = Quaternion::rotation_z(0.0); + next.foot_r.scale = Vec3::one() / 8.0; + + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) / 8.0; + next.torso.ori = Quaternion::rotation_z(test * 0.0); + next.torso.scale = Vec3::one() / 8.0; + + next.control.offset = Vec3::new(7.0, 9.0, -10.0); + next.control.ori = Quaternion::rotation_x(test * 0.02) + * Quaternion::rotation_y(test * 0.02) + * Quaternion::rotation_z(test * 0.02); + next.control.scale = Vec3::one(); + } else { + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) * 1.02; + next.head.ori = Quaternion::rotation_z(short * -0.18) * Quaternion::rotation_x(-0.05); + next.head.scale = Vec3::one() * 1.02; + + next.upper_torso.offset = Vec3::new( + 0.0, + skeleton_attr.upper_torso.0, + skeleton_attr.upper_torso.1 + shortalt * -1.5, + ); + next.upper_torso.ori = Quaternion::rotation_z(short * 0.18); + next.upper_torso.scale = Vec3::one(); + + next.lower_torso.offset = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1, + ); + next.lower_torso.ori = + Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); + next.lower_torso.scale = Vec3::one() * 1.02; + + next.shoulder_l.offset = Vec3::new( + -skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1 + foothoril * -1.0, + skeleton_attr.shoulder.2, + ); + next.shoulder_l.ori = Quaternion::rotation_x(0.5 + footrotl * -0.16) + * Quaternion::rotation_y(0.1) + * Quaternion::rotation_z(footrotl * 0.1); + next.shoulder_l.scale = Vec3::one(); + + next.shoulder_r.offset = Vec3::new( + skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1 + foothorir * -1.0, + skeleton_attr.shoulder.2, + ); + next.shoulder_r.ori = Quaternion::rotation_x(0.5 + footrotr * -0.16) + * Quaternion::rotation_y(-0.1) + * Quaternion::rotation_z(footrotr * -0.1); + next.shoulder_r.scale = Vec3::one(); + + next.leg_l.offset = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2, + ) * 0.98; + next.leg_l.ori = + Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothoril * 0.3); + next.leg_l.scale = Vec3::one() * 0.98; + + next.leg_r.offset = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2, + ) * 0.98; + + next.leg_r.ori = + Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothorir * 0.3); + next.leg_r.scale = Vec3::one() * 0.98; + + next.foot_l.offset = Vec3::new( + -skeleton_attr.foot.0, + 4.0 + skeleton_attr.foot.1 + foothoril * 8.5, + skeleton_attr.foot.2 + ((footvertl * 6.5).max(0.0)), + ) / 8.0; + next.foot_l.ori = + Quaternion::rotation_x(-0.5 + footrotl * 0.85) * Quaternion::rotation_y(0.0); + next.foot_l.scale = Vec3::one() / 8.0; + + next.foot_r.offset = Vec3::new( + skeleton_attr.foot.0, + 4.0 + skeleton_attr.foot.1 + foothorir * 8.5, + skeleton_attr.foot.2 + ((footvertr * 6.5).max(0.0)), + ) / 8.0; + next.foot_r.ori = + Quaternion::rotation_x(-0.5 + footrotr * 0.85) * Quaternion::rotation_y(0.0); + next.foot_r.scale = Vec3::one() / 8.0; + + next.torso.offset = Vec3::new(0.0, 0.0, 0.0) / 8.0; + next.torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.25); + next.torso.scale = Vec3::one() / 8.0; + + next.control.offset = Vec3::new(7.0, 9.0, -10.0); + next.control.ori = Quaternion::rotation_x(test * 0.02) + * Quaternion::rotation_y(test * 0.02) + * Quaternion::rotation_z(test * 0.02); + next.control.scale = Vec3::one(); + } + + next + } +} diff --git a/voxygen/src/anim/src/character/wield.rs b/voxygen/src/anim/src/character/wield.rs index 299146b5f4..53b0c2f77e 100644 --- a/voxygen/src/anim/src/character/wield.rs +++ b/voxygen/src/anim/src/character/wield.rs @@ -346,6 +346,10 @@ impl Animation for WieldAnimation { * Quaternion::rotation_y(-1.27) * Quaternion::rotation_z(0.0); next.main.scale = Vec3::one(); + next.control.offset = Vec3::new(0.0, 6.0, 6.0); + next.control.ori = + Quaternion::rotation_x(u_slow * 0.2) * Quaternion::rotation_z(u_slowalt * 0.1); + next.control.scale = Vec3::one(); }, Some(ToolKind::Farming(_)) => { if velocity < 0.5 { diff --git a/voxygen/src/scene/figure/cache.rs b/voxygen/src/scene/figure/cache.rs index 20f4f0ea48..3a1ecfc3d9 100644 --- a/voxygen/src/scene/figure/cache.rs +++ b/voxygen/src/scene/figure/cache.rs @@ -586,6 +586,11 @@ impl FigureModelCache { body.body_type, generate_mesh, )), + Some(biped_large_center_spec.mesh_main( + body.species, + body.body_type, + generate_mesh, + )), Some(biped_large_lateral_spec.mesh_shoulder_l( body.species, body.body_type, @@ -630,7 +635,6 @@ impl FigureModelCache { None, None, None, - None, ] }, Body::Golem(body) => { diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index ab5fdb8e7b..486b94fb85 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -2485,6 +2485,7 @@ struct SidedBLCenterVoxSpec { head: BipedLargeCenterSubSpec, torso_upper: BipedLargeCenterSubSpec, torso_lower: BipedLargeCenterSubSpec, + main: BipedLargeCenterSubSpec, } #[derive(Serialize, Deserialize)] struct BipedLargeCenterSubSpec { @@ -2596,6 +2597,27 @@ impl BipedLargeCenterSpec { generate_mesh(¢er, Vec3::from(spec.torso_lower.offset)) } + + pub fn mesh_main( + &self, + species: BLSpecies, + body_type: BLBodyType, + generate_mesh: impl FnOnce(&Segment, Vec3) -> Mesh, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No main weapon specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); + }, + }; + let center = graceful_load_segment(&spec.main.center.0); + + generate_mesh(¢er, Vec3::from(spec.main.offset)) + } } impl BipedLargeLateralSpec { pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 8af00917bf..c937e7d2e0 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -1680,12 +1680,29 @@ impl FigureMgr { &mut state_animation_rate, skeleton_attr, ), - + _ => anim::biped_large::IdleAnimation::update_skeleton( + &BipedLargeSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), + }; + let target_bones = match &character { + CharacterState::Wielding { .. } => { + anim::biped_large::WieldAnimation::update_skeleton( + &target_base, + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, // TODO! - _ => state.skeleton_mut().clone(), + _ => target_base, }; - state.skeleton.interpolate(&target_base, dt); + state.skeleton.interpolate(&target_bones, dt); state.update( renderer, pos.0, From 030f29d1022d91c9189102b80371dc6c774afedc Mon Sep 17 00:00:00 2001 From: jshipsey Date: Sat, 1 Aug 2020 02:19:01 -0400 Subject: [PATCH 11/12] cleanup, last tweaks --- .../voxel/biped_large_center_manifest.ron | 24 ++--- .../voxel/bird_medium_center_manifest.ron | 12 +-- .../voxygen/voxel/npc/peacock/male/chest.vox | Bin 1932 -> 0 bytes .../voxygen/voxel/npc/peacock/male/torso.vox | Bin 2296 -> 1932 bytes voxygen/src/anim/src/biped_large/mod.rs | 22 ++-- voxygen/src/anim/src/biped_large/wield.rs | 2 - voxygen/src/anim/src/bird_medium/feed.rs | 94 ++++++++++++++++++ voxygen/src/anim/src/bird_medium/mod.rs | 21 +++- voxygen/src/anim/src/dragon/run.rs | 21 +--- voxygen/src/anim/src/quadruped_small/mod.rs | 2 +- voxygen/src/scene/figure/mod.rs | 23 ++++- 11 files changed, 163 insertions(+), 58 deletions(-) delete mode 100644 assets/voxygen/voxel/npc/peacock/male/chest.vox create mode 100644 voxygen/src/anim/src/bird_medium/feed.rs diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_center_manifest.ron index 2e5c424de2..78447fca21 100644 --- a/assets/voxygen/voxel/biped_large_center_manifest.ron +++ b/assets/voxygen/voxel/biped_large_center_manifest.ron @@ -9,12 +9,12 @@ center: ("npc.ogre.male.torso_upper"), ), torso_lower: ( - offset: (-5.0, -4.5, -4.5), + offset: (-5.0, -4.5, -9.0), center: ("npc.ogre.male.torso_lower"), ), main: ( offset: (-8.0, -4.5, -5.0), - center: ("npc.ogre.male.torso_upper"), + center: ("armor.empty"), ) ), (Ogre, Female): ( @@ -27,12 +27,12 @@ center: ("npc.ogre.male.torso_upper"), ), torso_lower: ( - offset: (-5.0, -4.5, -4.5), + offset: (-5.0, -4.5, -9.0), center: ("npc.ogre.male.torso_lower"), ), main: ( offset: (-8.0, -4.5, -5.0), - center: ("npc.ogre.male.torso_upper"), + center: ("armor.empty"), ) ), (Cyclops, Male): ( @@ -81,12 +81,12 @@ center: ("npc.wendigo.male.torso_upper"), ), torso_lower: ( - offset: (-4.0, -2.0, -2.0), + offset: (-4.0, -2.0, -4.0), center: ("npc.wendigo.male.torso_lower"), ), main: ( offset: (-8.0, -4.5, -5.0), - center: ("npc.ogre.male.torso_upper"), + center: ("armor.empty"), ) ), (Wendigo, Female): ( @@ -99,12 +99,12 @@ center: ("npc.wendigo.male.torso_upper"), ), torso_lower: ( - offset: (-4.0, -2.0, -2.0), + offset: (-4.0, -2.0, -4.0), center: ("npc.wendigo.male.torso_lower"), ), main: ( offset: (-8.0, -4.5, -5.0), - center: ("npc.ogre.male.torso_upper"), + center: ("armor.empty"), ) ), (Troll, Male): ( @@ -117,12 +117,12 @@ center: ("npc.troll.male.torso_upper"), ), torso_lower: ( - offset: (-6.0, -3.5, -2.5), + offset: (-6.0, -3.5, -5.0), center: ("npc.troll.male.torso_lower"), ), main: ( offset: (-8.0, -4.5, -5.0), - center: ("npc.ogre.male.torso_upper"), + center: ("armor.empty"), ) ), (Troll, Female): ( @@ -135,12 +135,12 @@ center: ("npc.troll.male.torso_upper"), ), torso_lower: ( - offset: (-6.0, -3.5, -2.5), + offset: (-6.0, -3.5, -5.0), center: ("npc.troll.male.torso_lower"), ), main: ( offset: (-8.0, -4.5, -5.0), - center: ("npc.ogre.male.torso_upper"), + center: ("armor.empty"), ) ), }) diff --git a/assets/voxygen/voxel/bird_medium_center_manifest.ron b/assets/voxygen/voxel/bird_medium_center_manifest.ron index 7f79179c51..6657154280 100644 --- a/assets/voxygen/voxel/bird_medium_center_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_center_manifest.ron @@ -57,7 +57,7 @@ ), (Goose, Male): ( head: ( - offset: (-2.0, -3.5, -2.5), + offset: (-2.0, -3.5, -0.0), center: ("npc.goose.male.head"), ), torso: ( @@ -71,7 +71,7 @@ ), (Goose, Female): ( head: ( - offset: (-2.0, -3.5, -2.5), + offset: (-2.0, -3.5, -0.0), center: ("npc.goose.male.head"), ), torso: ( @@ -85,7 +85,7 @@ ), (Peacock, Male): ( head: ( - offset: (-2.0, -1.5, -6.5), + offset: (-2.0, -1.5, -0.0), center: ("npc.peacock.male.head"), ), torso: ( @@ -99,7 +99,7 @@ ), (Peacock, Female): ( head: ( - offset: (-2.0, -1.5, -6.5), + offset: (-2.0, -1.5, -0.0), center: ("npc.peacock.female.head"), ), torso: ( @@ -197,7 +197,7 @@ ), (Cockatrice, Male): ( head: ( - offset: (-2.5, -3.5, -8.0), + offset: (-2.5, 0.0, -8.0), center: ("npc.cockatrice.male.head"), ), torso: ( @@ -211,7 +211,7 @@ ), (Cockatrice, Female): ( head: ( - offset: (-2.5, -3.5, -8.0), + offset: (-2.5, 0.0, -8.0), center: ("npc.cockatrice.male.head"), ), torso: ( diff --git a/assets/voxygen/voxel/npc/peacock/male/chest.vox b/assets/voxygen/voxel/npc/peacock/male/chest.vox deleted file mode 100644 index e8b0c5a0e65a27a7dbf36d7fb3a95ca19fd47f4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1932 zcmb7@eQ4EH7{{OUa$jm{Gw0T}+UBNncZzen=AD}_^W~;Qu=bY#LIluOG zn@Wa6qs`_-0iF}9 zEBDrrph-HeCaAJYO4uen?R-#DhA=>i!BP_PN%35rNjcj1ph+9GcLCZ7&lK7*o&+uZ zS)SXZBc6!r)6UR`p+6huN_<#jGQQ>-_DMr5?;Y_9^{vMBfuvLYK!Cm|s~_fKJbeaC zQUWF|o-r)Xj7eGIh-cnDY|@^(mU@nO>U!#0+FCuQjZ?HX_2-zsCjsWIc$*eStfhbM z4OheZh$EhR&pS^YOMOSYLOV-8mi{d5oI=^DZ}!P>28Oc`g)#@16!yUd*=yoM+I#JZ z&W0=ZM(gKl^^CQ-F!R#-RFAVTYMasFy|5=C_C)nUoKsl)LI1=OqbvJr*iR$Ol{jMP z(}$QRvBVHjIdg8(E~Bsh>5EvMM~E}vd+_=uC>!FKhhv^j^RfZH1C7m^^sO-;!+f01 zoU&)$jylG0{=^ZlahRW2>JUpD@hYnyr!`Y1j(COdS3J*&C60KNGr90>uuqmag?+J_ zm%c6SgJWNbBkNbMSkCvJ`D$xxkw_$PZ$Pl-{ROBzU5x6lW+QKlVCH`M9uh3RB9Ipte_t3fI0bSk2Zv`*#pwL$xV@wh zSUUrQA{ZmzlAp-n9>MvK1mmNE>le9i5S)q&zF04~^NOH@`#tS~V_iJ&6|9U1I%@^J zs|3S5Z(C4+?szHowN+qfM-37$#xS&VCC1;|h@Ve)V@_Ev7S|M`X;}q!w8zl1R?xRq zF!HA0$_IjlMFnWAoQciRx#)~lp}jH}-3toQzj_u1o-apyaW&RGw+J1r%hB_43trpa zii3N%BQ<&mx2~Q<>ckd|pLrEoSy?D4DalYBDaFEh<*2KP;Ml>ZasHE1e0RMPcP8fG z1Y@R73%>qR@Z&dveccrp?u+8uxs~|k`wiHABpdyo<>2CteB43tzv{0m{eSfrOqukb z_16^_qN~0JyH_oGsQy%E6{687K8%f^s`?b_4C z&YO+)=p4MeF^+@V*5T~XF6=!%ioQ=%IC|+S?%%(U^0qE4Jurf%kFQ|EgY>W&qC_T TAHJjR1HFIR{k2zvN9f2OW0tXZ diff --git a/assets/voxygen/voxel/npc/peacock/male/torso.vox b/assets/voxygen/voxel/npc/peacock/male/torso.vox index cdeac7ff6cddd0f053cd642107ecbaca2b5668ee..e8b0c5a0e65a27a7dbf36d7fb3a95ca19fd47f4a 100644 GIT binary patch delta 589 zcmW-dJxT;Y5Ju~-XIfYgV-bW676b!B0|ODk4ORnTSru)_0rZcM(}#E^pc7xfi)#Zm(x~U=`Sd4mJa0;P2Zuh@A-zBZoLhUwm2t( z15l9E6$fN{M-|D}^va#H_lj#i4~7prd?7;jj$7&~b-mIb9rSl2ront@h^!cRGIGGc fAyQ`@Pw!}Oh@|2wh=YMcq-Hj+!`e^Ucg*4s6l!y5 delta 956 zcmW-eJE~Mc5Qgj3k24O4u?WHh1EPVUfq{s@1Xly$GF}Xg-NM`jm|PCHkv^Td02kr{ z3=REi2EM7T>U#WL=f~rJPtLcW&d+~}$j!UcM~wXGBA-upANJ|+EAR*wIDff2ZNY)x zOBHeV;pW2<&K5o*d`9v4a6Xh7#^L^Ov#DlA8CGTUD`dJ)sW!D5aT^YSFI6|KIy7X{ zBAazAL?<5}{=R>`Nswfqx*0e`ixC~`#EK4wDEQ>A-}Lx)O4ue2W>nh{#VX^$A@GB{ zAjb+Zh+;FSTYu~E866Oj!g-n37y{8`lM-{?+u_v~oRp_(-j*_?`83ff4Yerr#u`#3 z@%5`6-%M{P00n6_tuv8quXK^DW>#8!Z;EPG4C^m@dZC)>mD{BbrLXs(Q(=|NGCF8X z1Bb|tfhI$v1s^VRcmcj;A5ZPX!6EPiH4?;wI5-5p@iy=4t-rX~!q;6Gd$okIj&BQJ zH{(51D=>b^dn~?PSCQ+;Gx9579qU*tz&Xg1d=gKSd|qwD8+ncVcA*#tv~vNT From<&'a comp::biped_large::Body> for SkeletonAttr { upper_torso: match (body.species, body.body_type) { (Ogre, _) => (0.0, 19.0), (Cyclops, _) => (-2.0, 27.0), - (Wendigo, _) => (-1.0, 27.0), - (Troll, _) => (-1.0, 25.5), + (Wendigo, _) => (-1.0, 29.0), + (Troll, _) => (-1.0, 27.5), }, lower_torso: match (body.species, body.body_type) { - (Ogre, _) => (1.0, -9.5), + (Ogre, _) => (1.0, -5.5), (Cyclops, _) => (1.0, -4.5), - (Wendigo, _) => (-1.5, -8.0), - (Troll, _) => (1.0, -12.5), + (Wendigo, _) => (-1.5, -6.0), + (Troll, _) => (1.0, -10.5), }, shoulder: match (body.species, body.body_type) { (Ogre, _) => (6.1, 0.5, 2.5), @@ -167,16 +167,16 @@ impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { (Troll, _) => (11.5, 0.0, -1.5), }, leg: match (body.species, body.body_type) { - (Ogre, _) => (0.0, 0.0, -6.0), + (Ogre, _) => (0.0, 0.0, 0.0), (Cyclops, _) => (0.0, 0.0, -5.0), - (Wendigo, _) => (2.0, 0.0, -8.5), - (Troll, _) => (5.0, 0.0, -16.0), + (Wendigo, _) => (2.0, 2.0, -2.5), + (Troll, _) => (5.0, 0.0, -6.0), }, foot: match (body.species, body.body_type) { - (Ogre, _) => (4.0, 0.5, 5.5), + (Ogre, _) => (4.0, 2.5, 2.5), (Cyclops, _) => (4.0, 0.5, 5.0), - (Wendigo, _) => (5.0, 0.5, 5.5), - (Troll, _) => (6.0, 0.5, 3.0), + (Wendigo, _) => (5.0, 0.5, 6.0), + (Troll, _) => (6.0, 0.5, 4.0), }, } } diff --git a/voxygen/src/anim/src/biped_large/wield.rs b/voxygen/src/anim/src/biped_large/wield.rs index 332e1ecfa0..4edd995536 100644 --- a/voxygen/src/anim/src/biped_large/wield.rs +++ b/voxygen/src/anim/src/biped_large/wield.rs @@ -52,8 +52,6 @@ impl Animation for WieldAnimation { * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); let footvertl = (anim_time as f32 * 16.0 * lab as f32).sin(); let footvertr = (anim_time as f32 * 16.0 * lab as f32 + PI).sin(); - let handhoril = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin(); - let handhorir = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); let footrotl = (((5.0) / (2.5 diff --git a/voxygen/src/anim/src/bird_medium/feed.rs b/voxygen/src/anim/src/bird_medium/feed.rs new file mode 100644 index 0000000000..a5ca080177 --- /dev/null +++ b/voxygen/src/anim/src/bird_medium/feed.rs @@ -0,0 +1,94 @@ +use super::{super::Animation, BirdMediumSkeleton, SkeletonAttr}; +use std::ops::Mul; +use vek::*; + +pub struct FeedAnimation; + +impl Animation for FeedAnimation { + type Dependency = f64; + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_feed\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_feed")] + + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + global_time: Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let wave_slow = (anim_time as f32 * 4.5).sin(); + let wave = (anim_time as f32 * 8.0).sin(); + + let wave_slow_cos = (anim_time as f32 * 4.5).cos(); + + let duck_head_look = Vec2::new( + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0 + 1.0, -2.0 + skeleton_attr.head.1); + next.head.ori = Quaternion::rotation_z(duck_head_look.x) + * Quaternion::rotation_x(-0.3 / skeleton_attr.feed + wave_slow_cos * 0.03 + wave * 0.1); + next.head.scale = Vec3::one(); + + next.torso.offset = Vec3::new( + 0.0, + skeleton_attr.chest.0 + skeleton_attr.feed, + -1.0 - 5.0 * (skeleton_attr.feed - 1.0) + wave_slow * 0.3 + skeleton_attr.chest.1, + ) / 11.0; + next.torso.ori = Quaternion::rotation_x(-0.5 * skeleton_attr.feed) + * Quaternion::rotation_y(wave_slow * 0.03); + next.torso.scale = Vec3::one() / 11.0; + + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); + next.tail.ori = Quaternion::rotation_x(wave_slow_cos * 0.03); + next.tail.scale = Vec3::one(); + + next.wing_l.offset = Vec3::new( + -skeleton_attr.wing.0, + skeleton_attr.wing.1, + skeleton_attr.wing.2, + ); + next.wing_l.ori = Quaternion::rotation_y(0.4 - wave_slow * 0.1); + next.wing_l.scale = Vec3::one() * 1.05; + + next.wing_r.offset = Vec3::new( + skeleton_attr.wing.0, + skeleton_attr.wing.1, + skeleton_attr.wing.2, + ); + next.wing_r.ori = Quaternion::rotation_y(-0.4 + wave_slow * 0.1); + next.wing_r.scale = Vec3::one() * 1.05; + + next.leg_l.offset = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 11.0; + next.leg_l.ori = Quaternion::rotation_y(0.0); + next.leg_l.scale = Vec3::one() / 11.0; + + next.leg_r.offset = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 11.0; + next.leg_r.ori = Quaternion::rotation_x(0.0); + next.leg_r.scale = Vec3::one() / 11.0; + next + } +} diff --git a/voxygen/src/anim/src/bird_medium/mod.rs b/voxygen/src/anim/src/bird_medium/mod.rs index d759616c7a..fddd7dfa07 100644 --- a/voxygen/src/anim/src/bird_medium/mod.rs +++ b/voxygen/src/anim/src/bird_medium/mod.rs @@ -1,9 +1,10 @@ +pub mod feed; pub mod fly; pub mod idle; pub mod run; // Reexports -pub use self::{fly::FlyAnimation, idle::IdleAnimation, run::RunAnimation}; +pub use self::{feed::FeedAnimation, fly::FlyAnimation, idle::IdleAnimation, run::RunAnimation}; use super::{Bone, FigureBoneData, Skeleton}; use common::comp::{self}; @@ -77,6 +78,7 @@ pub struct SkeletonAttr { tail: (f32, f32), wing: (f32, f32, f32), foot: (f32, f32, f32), + feed: f32, } impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { @@ -98,6 +100,7 @@ impl Default for SkeletonAttr { tail: (0.0, 0.0), wing: (0.0, 0.0, 0.0), foot: (0.0, 0.0, 0.0), + feed: 0.0, } } } @@ -109,12 +112,12 @@ impl<'a> From<&'a comp::bird_medium::Body> for SkeletonAttr { head: match (body.species, body.body_type) { (Duck, _) => (4.0, 3.0), (Chicken, _) => (4.0, 3.0), - (Goose, _) => (5.0, 5.0), - (Peacock, _) => (4.0, 7.0), + (Goose, _) => (5.0, 2.5), + (Peacock, _) => (1.0, 1.0), (Eagle, _) => (2.5, 5.0), (Snowyowl, _) => (2.5, 5.0), (Parrot, _) => (0.5, 4.5), - (Cockatrice, _) => (3.0, 4.0), + (Cockatrice, _) => (0.0, 4.0), }, chest: match (body.species, body.body_type) { (Duck, _) => (0.0, 5.0), @@ -156,6 +159,16 @@ impl<'a> From<&'a comp::bird_medium::Body> for SkeletonAttr { (Parrot, _) => (1.5, -3.0, 3.0), (Cockatrice, _) => (4.0, -3.5, 12.0), }, + feed: match (body.species, body.body_type) { + (Duck, _) => 1.0, + (Chicken, _) => 1.0, + (Goose, _) => 1.4, + (Peacock, _) => 1.6, + (Eagle, _) => 1.2, + (Snowyowl, _) => 1.0, + (Parrot, _) => 1.2, + (Cockatrice, _) => 1.3, + }, } } } diff --git a/voxygen/src/anim/src/dragon/run.rs b/voxygen/src/anim/src/dragon/run.rs index 255349dd7a..49f42dcf12 100644 --- a/voxygen/src/anim/src/dragon/run.rs +++ b/voxygen/src/anim/src/dragon/run.rs @@ -1,5 +1,5 @@ use super::{super::Animation, DragonSkeleton, SkeletonAttr}; -use std::{f32::consts::PI, ops::Mul}; +use std::f32::consts::PI; use vek::*; pub struct RunAnimation; @@ -14,7 +14,7 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "dragon_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (velocity, orientation, last_ori, global_time, avg_vel): Self::Dependency, + (_velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, @@ -34,20 +34,6 @@ impl Animation for RunAnimation { let shortalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.5).sin(); - let footvert = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.0).sin(); - let footvertt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); - let footvertalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.2).sin(); - let footverttalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.6).sin(); - - let footvertf = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.3).sin(); - let footverttf = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.7).sin(); - let footvertaltf = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.5).sin(); - let footverttaltf = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.9).sin(); - - let footvertfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.6).sin(); - let footverttfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.0).sin(); - let footvertaltfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.8).sin(); - let footverttaltfslow = (anim_time as f32 * 16.0 * lab as f32 + PI * 2.2).sin(); // let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -79,9 +65,6 @@ impl Animation for RunAnimation { let horilboffset = (anim_time as f32 * lab as f32 + PI * 1.4).sin(); let horirb = (anim_time as f32 * lab as f32 + PI * 0.4).sin(); - let vertchest = (anim_time as f32 * lab as f32 + PI * 0.3).sin().max(0.2); - let horichest = (anim_time as f32 * lab as f32 + PI * 0.8).sin(); - let center = (anim_time as f32 * lab as f32 + PI / 2.0).sin(); let centeroffset = (anim_time as f32 * lab as f32 + PI * 1.5).sin(); diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index dc860029ec..0c19fc6ed2 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -312,7 +312,7 @@ impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { (Hyena, _) => (1.0), (Rabbit, _) => (1.2), (Truffler, _) => (0.6), - (Frog, _) => (1.2), + (Frog, _) => (0.7), }, } } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index c937e7d2e0..d0b962808e 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -1231,12 +1231,29 @@ impl FigureMgr { &mut state_animation_rate, skeleton_attr, ), - + _ => anim::bird_medium::IdleAnimation::update_skeleton( + &BirdMediumSkeleton::new(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), + }; + let target_bones = match &character { + CharacterState::Sit { .. } => { + anim::bird_medium::FeedAnimation::update_skeleton( + &target_base, + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, // TODO! - _ => state.skeleton_mut().clone(), + _ => target_base, }; - state.skeleton.interpolate(&target_base, dt); + state.skeleton.interpolate(&target_bones, dt); state.update( renderer, pos.0, From 1fe795839f7f924e9fc1fbe9b4ae924f3ee03381 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Sat, 1 Aug 2020 02:28:57 -0400 Subject: [PATCH 12/12] changelog --- CHANGELOG.md | 4 ++-- voxygen/src/anim/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48b76f69e8..3a7a76af54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,7 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial crafting system implementation - Protection stat to armor that reduces incoming damage - Loading-Screen tips - +- Feeding animation for some animals ### Changed - Improved camera aiming @@ -64,7 +64,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced `log` with `tracing` in all crates - Switch to a new network backend that will allow several improvements in the future - Connection screen fails after 4 minutes if it can't connect to the server instead of 80 minutes -- Rebuilt quadruped_medium animation and assets +- Rebuilt quadruped_medium/quadruped_small animation and assets - Disabled destruction of most blocks by explosions - Disable damage to pets - Made pets healable diff --git a/voxygen/src/anim/Cargo.toml b/voxygen/src/anim/Cargo.toml index 92ce71acb0..ab4d0e2bfe 100644 --- a/voxygen/src/anim/Cargo.toml +++ b/voxygen/src/anim/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" name = "voxygen_anim" # Uncomment to use animation hot reloading # Note: this breaks `cargo test` -crate-type = ["lib", "cdylib"] +# crate-type = ["lib", "cdylib"] [features] use-dyn-lib = ["libloading", "notify", "lazy_static", "tracing", "find_folder"]