diff --git a/assets/common/abilities/unique/quadlowquick/quadstrike.ron b/assets/common/abilities/unique/quadlowquick/quadstrike.ron
index 8c1b87511e..b2af288b80 100644
--- a/assets/common/abilities/unique/quadlowquick/quadstrike.ron
+++ b/assets/common/abilities/unique/quadlowquick/quadstrike.ron
@@ -5,7 +5,7 @@ ComboMelee(
             base_damage: 100,
             max_damage: 120,
             damage_increase: 10,
-            knockback: 10.0,
+            knockback: 2.0,
             range: 3.5,
             angle: 30.0,
             base_buildup_duration: 600,
@@ -18,7 +18,7 @@ ComboMelee(
             base_damage: 80,
             max_damage: 110,
             damage_increase: 15,
-            knockback: 10.0,
+            knockback: 2.0,
             range: 3.5,
             angle: 30.0,
             base_buildup_duration: 200,
@@ -31,7 +31,7 @@ ComboMelee(
             base_damage: 130,
             max_damage: 170,
             damage_increase: 20,
-            knockback: 10.0,
+            knockback: 2.0,
             range: 3.5,
             angle: 30.0,
             base_buildup_duration: 200,
@@ -44,7 +44,7 @@ ComboMelee(
             base_damage: 130,
             max_damage: 170,
             damage_increase: 20,
-            knockback: 10.0,
+            knockback: 8.0,
             range: 3.5,
             angle: 30.0,
             base_buildup_duration: 200,
diff --git a/assets/common/abilities/unique/quadlowtail/charged.ron b/assets/common/abilities/unique/quadlowtail/charged.ron
index 825ab64e2c..00db4133fb 100644
--- a/assets/common/abilities/unique/quadlowtail/charged.ron
+++ b/assets/common/abilities/unique/quadlowtail/charged.ron
@@ -1,8 +1,8 @@
 ChargedMelee(
     energy_cost: 0,
     energy_drain: 0,
-    initial_damage: 10,
-    max_damage: 50,
+    initial_damage: 40,
+    max_damage: 70,
     initial_knockback: 10.0,
     max_knockback: 30.0,
     range: 6.0,
diff --git a/assets/common/abilities/unique/quadmedhoof/basic.ron b/assets/common/abilities/unique/quadmedhoof/basic.ron
index 3054ad10b4..0cf2994c10 100644
--- a/assets/common/abilities/unique/quadmedhoof/basic.ron
+++ b/assets/common/abilities/unique/quadmedhoof/basic.ron
@@ -3,7 +3,7 @@ BasicMelee(
     buildup_duration: 600,
     swing_duration: 500,
     recover_duration: 350,
-    base_damage: 200,
+    base_damage: 70,
     knockback: 25.0,
     range: 2.0,
     max_angle: 120.0,
diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs
index 0ec5ea5b3d..aac9e35523 100644
--- a/common/src/comp/body.rs
+++ b/common/src/comp/body.rs
@@ -512,6 +512,7 @@ impl Body {
             Body::QuadrupedSmall(quadruped_small) => match quadruped_small.species {
                 quadruped_small::Species::Dodarock => 30,
                 quadruped_small::Species::Hyena => 40,
+                quadruped_small::Species::Holladon => 40,
                 quadruped_small::Species::Porcupine => 30,
                 _ => 20,
             },
diff --git a/common/src/loadout_builder.rs b/common/src/loadout_builder.rs
index d3eb45560c..52fa703aef 100644
--- a/common/src/loadout_builder.rs
+++ b/common/src/loadout_builder.rs
@@ -104,7 +104,10 @@ impl LoadoutBuilder {
                     _ => {},
                 },
                 Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species {
-                    quadruped_medium::Species::Wolf | quadruped_medium::Species::Grolgar => {
+                    quadruped_medium::Species::Wolf
+                    | quadruped_medium::Species::Grolgar
+                    | quadruped_medium::Species::Lion
+                    | quadruped_medium::Species::Bonerattler => {
                         main_tool = Some(Item::new_from_asset_expect(
                             "common.items.npc_weapons.unique.quadmedquick",
                         ));
@@ -113,6 +116,8 @@ impl LoadoutBuilder {
                     | quadruped_medium::Species::Horse
                     | quadruped_medium::Species::Zebra
                     | quadruped_medium::Species::Kelpie
+                    | quadruped_medium::Species::Hirdrasil
+                    | quadruped_medium::Species::Deer
                     | quadruped_medium::Species::Antelope => {
                         main_tool = Some(Item::new_from_asset_expect(
                             "common.items.npc_weapons.unique.quadmedhoof",
diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs
index ef7027f811..1df11bdaf3 100644
--- a/common/src/states/utils.rs
+++ b/common/src/states/utils.rs
@@ -1,7 +1,7 @@
 use crate::{
     comp::{
         item::{Hands, ItemKind, Tool},
-        quadruped_low, quadruped_medium, Body, CharacterState, StateUpdate,
+        quadruped_low, quadruped_medium, theropod, Body, CharacterState, StateUpdate,
     },
     event::LocalEvent,
     states::*,
@@ -118,8 +118,19 @@ impl Body {
             Body::BipedLarge(_) => 12.0,
             Body::Object(_) => 5.0,
             Body::Golem(_) => 8.0,
-            Body::Theropod(_) => 1.0,
-            Body::QuadrupedLow(_) => 12.0,
+            Body::Theropod(theropod) => match theropod.species {
+                theropod::Species::Archaeos => 1.5,
+                theropod::Species::Odonto => 1.5,
+                _ => 10.0,
+            },
+            Body::QuadrupedLow(quadruped_low) => match quadruped_low.species {
+                quadruped_low::Species::Monitor => 9.0,
+                quadruped_low::Species::Asp => 8.0,
+                quadruped_low::Species::Tortoise => 3.0,
+                quadruped_low::Species::Rocksnapper => 4.0,
+                quadruped_low::Species::Maneater => 5.0,
+                _ => 6.0,
+            },
         }
     }
 
diff --git a/voxygen/src/anim/src/character/swim.rs b/voxygen/src/anim/src/character/swim.rs
index a2d7f8f885..5c03fdd3b0 100644
--- a/voxygen/src/anim/src/character/swim.rs
+++ b/voxygen/src/anim/src/character/swim.rs
@@ -93,7 +93,7 @@ impl Animation for SwimAnimation {
         let abstilt = tilt.abs();
 
         let squash = if abstilt > 0.2 { 0.35 } else { 1.0 }; //condenses the body at strong turns
-        next.head.position = Vec3::new(0.0,  s_a.head.0, s_a.head.1 - 1.0 + short * 0.3);
+        next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 - 1.0 + short * 0.3);
         next.head.orientation =
             Quaternion::rotation_z(head_look.x * 0.3 + short * -0.2 * intensity + tilt * 3.0)
                 * Quaternion::rotation_x(
diff --git a/voxygen/src/anim/src/quadruped_low/breathe.rs b/voxygen/src/anim/src/quadruped_low/breathe.rs
index 4d10f87f25..097876c7e4 100644
--- a/voxygen/src/anim/src/quadruped_low/breathe.rs
+++ b/voxygen/src/anim/src/quadruped_low/breathe.rs
@@ -36,35 +36,38 @@ impl Animation for BreatheAnimation {
         let subtract = global_time - timer;
         let check = subtract - subtract.trunc();
         let mirror = (check - 0.5).signum() as f32;
-        let twitch2 = mirror*(twitch*20.0).sin()*pullback;
-        let twitch2alt = mirror*(twitch*20.0+PI/2.0).sin()*pullback;
+        let twitch2 = mirror * (twitch * 20.0).sin() * pullback;
+        let twitch2alt = mirror * (twitch * 20.0 + PI / 2.0).sin() * pullback;
 
         let movement1abs = movement1base * pullback;
 
-        next.head_upper.orientation = Quaternion::rotation_x(movement1abs * 0.3+twitch2alt*0.02);
+        next.head_upper.orientation =
+            Quaternion::rotation_x(movement1abs * 0.3 + twitch2alt * 0.02);
 
         next.head_lower.orientation =
-            Quaternion::rotation_x(movement1abs * -0.3 )
-                * Quaternion::rotation_y(twitch2 * 0.02);
+            Quaternion::rotation_x(movement1abs * -0.3) * Quaternion::rotation_y(twitch2 * 0.02);
 
         next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.7 + twitch2 * 0.1);
-        next.chest.orientation = Quaternion::rotation_y(twitch2 * -0.02)
-            * Quaternion::rotation_z(0.0);
+        next.chest.orientation =
+            Quaternion::rotation_y(twitch2 * -0.02) * Quaternion::rotation_z(0.0);
 
-        next.tail_front.orientation = Quaternion::rotation_x(0.15+movement1abs*-0.15+twitch2alt*0.02)
-            * Quaternion::rotation_z(0.0);
+        next.tail_front.orientation =
+            Quaternion::rotation_x(0.15 + movement1abs * -0.15 + twitch2alt * 0.02)
+                * Quaternion::rotation_z(0.0);
 
-        next.tail_rear.orientation = Quaternion::rotation_x(-0.12+movement1abs*-0.2+twitch2alt*0.08)
-            * Quaternion::rotation_z(0.0);
-if speed < 0.5{
+        next.tail_rear.orientation =
+            Quaternion::rotation_x(-0.12 + movement1abs * -0.2 + twitch2alt * 0.08)
+                * Quaternion::rotation_z(0.0);
+        if speed < 0.5 {
             next.foot_fl.orientation = Quaternion::rotation_y(twitch2 * 0.02);
-    
+
             next.foot_fr.orientation = Quaternion::rotation_y(twitch2 * 0.02);
-    
+
             next.foot_bl.orientation = Quaternion::rotation_y(twitch2 * 0.02);
-    
+
             next.foot_br.orientation = Quaternion::rotation_y(twitch2 * 0.02);
-} else{};
+        } else {
+        };
         next
     }
 }
diff --git a/voxygen/src/anim/src/quadruped_low/mod.rs b/voxygen/src/anim/src/quadruped_low/mod.rs
index 00dda9020c..e8ee046102 100644
--- a/voxygen/src/anim/src/quadruped_low/mod.rs
+++ b/voxygen/src/anim/src/quadruped_low/mod.rs
@@ -10,8 +10,9 @@ pub mod tailwhip;
 
 // Reexports
 pub use self::{
-    alpha::AlphaAnimation, beta::BetaAnimation, breathe::BreatheAnimation, dash::DashAnimation, idle::IdleAnimation,
-    jump::JumpAnimation, run::RunAnimation, shoot::ShootAnimation, tailwhip::TailwhipAnimation,
+    alpha::AlphaAnimation, beta::BetaAnimation, breathe::BreatheAnimation, dash::DashAnimation,
+    idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation, shoot::ShootAnimation,
+    tailwhip::TailwhipAnimation,
 };
 
 use super::{make_bone, vek::*, FigureBoneData, Skeleton};
diff --git a/voxygen/src/anim/src/quadruped_medium/dash.rs b/voxygen/src/anim/src/quadruped_medium/dash.rs
index 2d9bc716dd..d668fa0bb6 100644
--- a/voxygen/src/anim/src/quadruped_medium/dash.rs
+++ b/voxygen/src/anim/src/quadruped_medium/dash.rs
@@ -54,13 +54,11 @@ impl Animation for DashAnimation {
         let shortalt =
             (anim_time as f32 * 16.0 as f32 + PI * 0.25).sin() * chargemovementbase * pullback;
 
-        next.head.orientation =
-            Quaternion::rotation_x(movement1abs * -0.2 + movement2abs * 0.8)
-                * Quaternion::rotation_z(short * -0.06 + twitch1 * 0.2);
+        next.head.orientation = Quaternion::rotation_x(movement1abs * -0.2 + movement2abs * 0.8)
+            * Quaternion::rotation_z(short * -0.06 + twitch1 * 0.2);
 
-        next.neck.orientation =
-            Quaternion::rotation_x(movement1abs * -0.2 + movement2abs * 0.5)
-                * Quaternion::rotation_z(short * 0.15 + twitch1 * 0.2);
+        next.neck.orientation = Quaternion::rotation_x(movement1abs * -0.2 + movement2abs * 0.5)
+            * Quaternion::rotation_z(short * 0.15 + twitch1 * 0.2);
 
         next.jaw.orientation = Quaternion::rotation_x(
             twitch1fast * 0.2
@@ -74,25 +72,28 @@ impl Animation for DashAnimation {
         next.tail.orientation = Quaternion::rotation_x(
             0.15 + movement1abs * -0.4 + movement2abs * 0.2 + chargemovementbase * 0.2,
         ) * Quaternion::rotation_z(shortalt * 0.15);
-if speed < 0.5
-{
-    if mirror == 1.0 {
-    next.leg_fl.orientation = Quaternion::rotation_x(movement1abs*0.6);
+        if speed < 0.5 {
+            if mirror == 1.0 {
+                next.leg_fl.orientation = Quaternion::rotation_x(movement1abs * 0.6);
 
-    next.foot_fl.orientation = Quaternion::rotation_x(movement1abs*-0.6+twitch1 * 0.3);
-    next.leg_bl.orientation = Quaternion::rotation_x(movement1abs*0.6);
+                next.foot_fl.orientation =
+                    Quaternion::rotation_x(movement1abs * -0.6 + twitch1 * 0.3);
+                next.leg_bl.orientation = Quaternion::rotation_x(movement1abs * 0.6);
 
-    next.foot_bl.orientation = Quaternion::rotation_x(movement1abs*-0.6+twitch1 * 0.3);
-    }else{
-    next.leg_fr.orientation = Quaternion::rotation_x(movement1abs*0.6);
+                next.foot_bl.orientation =
+                    Quaternion::rotation_x(movement1abs * -0.6 + twitch1 * 0.3);
+            } else {
+                next.leg_fr.orientation = Quaternion::rotation_x(movement1abs * 0.6);
 
-    next.foot_fr.orientation = Quaternion::rotation_x(movement1abs*-0.6+twitch1 * 0.3);
+                next.foot_fr.orientation =
+                    Quaternion::rotation_x(movement1abs * -0.6 + twitch1 * 0.3);
 
-    next.leg_br.orientation = Quaternion::rotation_x(movement1abs*0.6);
+                next.leg_br.orientation = Quaternion::rotation_x(movement1abs * 0.6);
 
-    next.foot_br.orientation = Quaternion::rotation_x(movement1abs*-0.6+twitch1 * 0.3);
-    }
-}
+                next.foot_br.orientation =
+                    Quaternion::rotation_x(movement1abs * -0.6 + twitch1 * 0.3);
+            }
+        }
 
         next
     }
diff --git a/voxygen/src/anim/src/quadruped_medium/mod.rs b/voxygen/src/anim/src/quadruped_medium/mod.rs
index 61ad978342..eb3d6d6413 100644
--- a/voxygen/src/anim/src/quadruped_medium/mod.rs
+++ b/voxygen/src/anim/src/quadruped_medium/mod.rs
@@ -10,8 +10,9 @@ pub mod run;
 
 // Reexports
 pub use self::{
-    alpha::AlphaAnimation, beta::BetaAnimation, dash::DashAnimation, feed::FeedAnimation, hoof::HoofAnimation,
-    idle::IdleAnimation, jump::JumpAnimation, leapmelee::LeapMeleeAnimation, run::RunAnimation,
+    alpha::AlphaAnimation, beta::BetaAnimation, dash::DashAnimation, feed::FeedAnimation,
+    hoof::HoofAnimation, idle::IdleAnimation, jump::JumpAnimation, leapmelee::LeapMeleeAnimation,
+    run::RunAnimation,
 };
 
 use super::{make_bone, vek::*, FigureBoneData, Skeleton};
diff --git a/voxygen/src/anim/src/quadruped_small/alpha.rs b/voxygen/src/anim/src/quadruped_small/alpha.rs
index 6bd2376330..661f1189da 100644
--- a/voxygen/src/anim/src/quadruped_small/alpha.rs
+++ b/voxygen/src/anim/src/quadruped_small/alpha.rs
@@ -39,13 +39,13 @@ impl Animation for AlphaAnimation {
         let movement1abs = movement1base * pullback;
         let movement2abs = movement2base * pullback;
 
-        next.head.orientation = Quaternion::rotation_x(movement1abs*-0.7+movement2abs*2.0)*Quaternion::rotation_y(movement1*-0.6+movement2*1.2);
-
+        next.head.orientation = Quaternion::rotation_x(movement1abs * -0.7 + movement2abs * 2.0)
+            * Quaternion::rotation_y(movement1 * -0.6 + movement2 * 1.2);
 
         next.chest.orientation = Quaternion::rotation_y(movement1 * -0.08 + movement2 * 0.15)
             * Quaternion::rotation_z(movement1 * 0.2 + movement2 * -0.6);
 
-        next.tail.orientation = Quaternion::rotation_x(movement1abs*0.5+movement2abs*-1.0)
+        next.tail.orientation = Quaternion::rotation_x(movement1abs * 0.5 + movement2abs * -1.0)
             * Quaternion::rotation_z(movement1 * -0.4 + movement2 * -0.2);
 
         next
diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs
index 0afa46bf77..2d09ae38c4 100644
--- a/voxygen/src/anim/src/quadruped_small/mod.rs
+++ b/voxygen/src/anim/src/quadruped_small/mod.rs
@@ -5,7 +5,10 @@ pub mod jump;
 pub mod run;
 
 // Reexports
-pub use self::{alpha::AlphaAnimation, feed::FeedAnimation, idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation};
+pub use self::{
+    alpha::AlphaAnimation, feed::FeedAnimation, idle::IdleAnimation, jump::JumpAnimation,
+    run::RunAnimation,
+};
 
 use super::{make_bone, vek::*, FigureBoneData, Skeleton};
 use common::comp::{self};
diff --git a/voxygen/src/anim/src/theropod/alpha.rs b/voxygen/src/anim/src/theropod/alpha.rs
index e91a222ca4..64f8e6f6e1 100644
--- a/voxygen/src/anim/src/theropod/alpha.rs
+++ b/voxygen/src/anim/src/theropod/alpha.rs
@@ -1,6 +1,6 @@
 use super::{
     super::{vek::*, Animation},
-    TheropodSkeleton, SkeletonAttr,
+    SkeletonAttr, TheropodSkeleton,
 };
 use common::states::utils::StageSection;
 //use std::ops::Rem;
@@ -39,28 +39,29 @@ impl Animation for AlphaAnimation {
         let movement1abs = movement1base * pullback;
         let movement2abs = movement2base * pullback;
 
-        next.head.orientation = Quaternion::rotation_x(movement1abs*0.2)*Quaternion::rotation_y(movement1*0.1+movement2*0.2);
-        next.neck.orientation = Quaternion::rotation_x(movement1abs*-0.3)*Quaternion::rotation_y(movement1*0.1+movement2*0.1);
+        next.head.orientation = Quaternion::rotation_x(movement1abs * 0.2)
+            * Quaternion::rotation_y(movement1 * 0.1 + movement2 * 0.2);
+        next.neck.orientation = Quaternion::rotation_x(movement1abs * -0.3)
+            * Quaternion::rotation_y(movement1 * 0.1 + movement2 * 0.1);
 
+        next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 + movement2abs * 0.5);
 
+        next.chest_front.orientation = Quaternion::rotation_x(movement1abs * -0.2);
+        next.chest_back.orientation = Quaternion::rotation_x(movement1abs * 0.2);
 
-        next.jaw.orientation = Quaternion::rotation_x(movement1abs * -0.5 +movement2abs*0.5);
+        next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.1);
 
-        next.chest_front.orientation = Quaternion::rotation_x(movement1abs * -0.2)
-            ;
-            next.chest_back.orientation = Quaternion::rotation_x(movement1abs * 0.2);
+        next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.1);
+        next.foot_l.orientation = Quaternion::rotation_x(movement1abs * -0.3);
+        next.foot_r.orientation = Quaternion::rotation_x(movement1abs * -0.3);
 
-            next.leg_l.orientation = Quaternion::rotation_x(movement1abs *-0.1);
+        next.tail_front.orientation =
+            Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3)
+                * Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
 
-            next.leg_r.orientation = Quaternion::rotation_x(movement1abs *-0.1);
-            next.foot_l.orientation = Quaternion::rotation_x(movement1abs *-0.3);
-            next.foot_r.orientation = Quaternion::rotation_x(movement1abs *-0.3);
-
-        next.tail_front.orientation = Quaternion::rotation_x(0.1+movement1abs*-0.1+movement2abs*-0.3)
-            * Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
-
-        next.tail_back.orientation = Quaternion::rotation_x(0.1+movement1abs*-0.1+movement2abs*-0.3)
-            * Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
+        next.tail_back.orientation =
+            Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3)
+                * Quaternion::rotation_z(movement1 * -0.1 + movement2 * -0.2);
         next
     }
 }
diff --git a/voxygen/src/anim/src/theropod/beta.rs b/voxygen/src/anim/src/theropod/beta.rs
index 1af78a9fa4..154f3f178e 100644
--- a/voxygen/src/anim/src/theropod/beta.rs
+++ b/voxygen/src/anim/src/theropod/beta.rs
@@ -1,6 +1,6 @@
 use super::{
     super::{vek::*, Animation},
-    TheropodSkeleton, SkeletonAttr,
+    SkeletonAttr, TheropodSkeleton,
 };
 use common::states::utils::StageSection;
 //use std::ops::Rem;
@@ -39,26 +39,27 @@ impl Animation for BetaAnimation {
         let movement1abs = movement1base * pullback;
         let movement2abs = movement2base * pullback;
 
-        next.head.orientation = Quaternion::rotation_x(movement1abs*-0.4+movement2abs*1.2)*Quaternion::rotation_y(movement1*0.1+movement2*-0.1);
-        next.neck.orientation = Quaternion::rotation_x(movement1abs*0.4+movement2abs*-1.2)*Quaternion::rotation_y(movement1*0.1+movement2*-0.1);
+        next.head.orientation = Quaternion::rotation_x(movement1abs * -0.4 + movement2abs * 1.2)
+            * Quaternion::rotation_y(movement1 * 0.1 + movement2 * -0.1);
+        next.neck.orientation = Quaternion::rotation_x(movement1abs * 0.4 + movement2abs * -1.2)
+            * Quaternion::rotation_y(movement1 * 0.1 + movement2 * -0.1);
 
+        next.chest_front.orientation =
+            Quaternion::rotation_x(movement1abs * 0.6 + movement2abs * -1.5);
+        next.chest_back.orientation =
+            Quaternion::rotation_x(movement1abs * -0.6 + movement2abs * 1.5);
 
+        next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.5);
 
-        next.chest_front.orientation = Quaternion::rotation_x(movement1abs * 0.6+movement2abs*-1.5)
-            ;
-            next.chest_back.orientation = Quaternion::rotation_x(movement1abs * -0.6+movement2abs*1.5);
+        next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.5);
+        next.foot_l.orientation = Quaternion::rotation_x(movement1abs * 0.4);
+        next.foot_r.orientation = Quaternion::rotation_x(movement1abs * 0.4);
 
-            next.leg_l.orientation = Quaternion::rotation_x(movement1abs *-0.5);
+        next.tail_front.orientation =
+            Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3);
 
-            next.leg_r.orientation = Quaternion::rotation_x(movement1abs *-0.5);
-            next.foot_l.orientation = Quaternion::rotation_x(movement1abs *0.4);
-            next.foot_r.orientation = Quaternion::rotation_x(movement1abs *0.4);
-
-        next.tail_front.orientation = Quaternion::rotation_x(0.1+movement1abs*-0.1+movement2abs*-0.3)
-            ;
-
-        next.tail_back.orientation = Quaternion::rotation_x(0.1+movement1abs*-0.1+movement2abs*-0.3)
-            ;
+        next.tail_back.orientation =
+            Quaternion::rotation_x(0.1 + movement1abs * -0.1 + movement2abs * -0.3);
         next
     }
 }
diff --git a/voxygen/src/anim/src/theropod/mod.rs b/voxygen/src/anim/src/theropod/mod.rs
index 5fa9e7cc8d..b0c6789e37 100644
--- a/voxygen/src/anim/src/theropod/mod.rs
+++ b/voxygen/src/anim/src/theropod/mod.rs
@@ -5,7 +5,10 @@ pub mod jump;
 pub mod run;
 
 // Reexports
-pub use self::{alpha::AlphaAnimation, beta::BetaAnimation, idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation};
+pub use self::{
+    alpha::AlphaAnimation, beta::BetaAnimation, idle::IdleAnimation, jump::JumpAnimation,
+    run::RunAnimation,
+};
 
 use super::{make_bone, vek::*, FigureBoneData, Skeleton};
 use common::comp::{self};
diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs
index 81ab7eb1d7..cffc2a2215 100644
--- a/voxygen/src/scene/figure/mod.rs
+++ b/voxygen/src/scene/figure/mod.rs
@@ -1415,46 +1415,45 @@ impl FigureMgr {
                         ),
                     };
                     let target_bones = match &character {
-
-                    CharacterState::ComboMelee(s) => {
-                        let stage_index = (s.stage - 1) as usize;
-                        let stage_time = s.timer.as_secs_f64();
-                        let stage_progress = match s.stage_section {
-                            StageSection::Buildup => {
-                                stage_time
-                                    / s.static_data.stage_data[stage_index]
-                                        .base_buildup_duration
-                                        .as_secs_f64()
-                            },
-                            StageSection::Swing => {
-                                stage_time
-                                    / s.static_data.stage_data[stage_index]
-                                        .base_swing_duration
-                                        .as_secs_f64()
-                            },
-                            StageSection::Recover => {
-                                stage_time
-                                    / s.static_data.stage_data[stage_index]
-                                        .base_recover_duration
-                                        .as_secs_f64()
-                            },
-                            _ => 0.0,
-                        };
-                        match s.stage {
-                            _ => anim::quadruped_small::AlphaAnimation::update_skeleton(
-                                &target_base,
-                                (
-                                    vel.0.magnitude(),
-                                    time,
-                                    Some(s.stage_section),
-                                    state.state_time,
+                        CharacterState::ComboMelee(s) => {
+                            let stage_index = (s.stage - 1) as usize;
+                            let stage_time = s.timer.as_secs_f64();
+                            let stage_progress = match s.stage_section {
+                                StageSection::Buildup => {
+                                    stage_time
+                                        / s.static_data.stage_data[stage_index]
+                                            .base_buildup_duration
+                                            .as_secs_f64()
+                                },
+                                StageSection::Swing => {
+                                    stage_time
+                                        / s.static_data.stage_data[stage_index]
+                                            .base_swing_duration
+                                            .as_secs_f64()
+                                },
+                                StageSection::Recover => {
+                                    stage_time
+                                        / s.static_data.stage_data[stage_index]
+                                            .base_recover_duration
+                                            .as_secs_f64()
+                                },
+                                _ => 0.0,
+                            };
+                            match s.stage {
+                                _ => anim::quadruped_small::AlphaAnimation::update_skeleton(
+                                    &target_base,
+                                    (
+                                        vel.0.magnitude(),
+                                        time,
+                                        Some(s.stage_section),
+                                        state.state_time,
+                                    ),
+                                    stage_progress,
+                                    &mut state_animation_rate,
+                                    skeleton_attr,
                                 ),
-                                stage_progress,
-                                &mut state_animation_rate,
-                                skeleton_attr,
-                            ),
-                        }
-                    },
+                            }
+                        },
                         CharacterState::Sit { .. } => {
                             anim::quadruped_small::FeedAnimation::update_skeleton(
                                 &target_base,
@@ -2376,7 +2375,7 @@ impl FigureMgr {
                             &mut state_animation_rate,
                             skeleton_attr,
                         ),
-                        _=> anim::theropod::IdleAnimation::update_skeleton(
+                        _ => anim::theropod::IdleAnimation::update_skeleton(
                             &TheropodSkeleton::default(),
                             time,
                             state.state_time,
@@ -2384,58 +2383,58 @@ impl FigureMgr {
                             skeleton_attr,
                         ),
                     };
-                        let target_bones = match &character {
-                            CharacterState::ComboMelee(s) => {
-                                let stage_index = (s.stage - 1) as usize;
-                                let stage_time = s.timer.as_secs_f64();
-                                let stage_progress = match s.stage_section {
-                                    StageSection::Buildup => {
-                                        stage_time
-                                            / s.static_data.stage_data[stage_index]
-                                                .base_buildup_duration
-                                                .as_secs_f64()
-                                    },
-                                    StageSection::Swing => {
-                                        stage_time
-                                            / s.static_data.stage_data[stage_index]
-                                                .base_swing_duration
-                                                .as_secs_f64()
-                                    },
-                                    StageSection::Recover => {
-                                        stage_time
-                                            / s.static_data.stage_data[stage_index]
-                                                .base_recover_duration
-                                                .as_secs_f64()
-                                    },
-                                    _ => 0.0,
-                                };
-                                match s.stage {
-                                    1 => anim::theropod::AlphaAnimation::update_skeleton(
-                                        &target_base,
-                                        (
-                                            vel.0.magnitude(),
-                                            time,
-                                            Some(s.stage_section),
-                                            state.state_time,
-                                        ),
-                                        stage_progress,
-                                        &mut state_animation_rate,
-                                        skeleton_attr,
+                    let target_bones = match &character {
+                        CharacterState::ComboMelee(s) => {
+                            let stage_index = (s.stage - 1) as usize;
+                            let stage_time = s.timer.as_secs_f64();
+                            let stage_progress = match s.stage_section {
+                                StageSection::Buildup => {
+                                    stage_time
+                                        / s.static_data.stage_data[stage_index]
+                                            .base_buildup_duration
+                                            .as_secs_f64()
+                                },
+                                StageSection::Swing => {
+                                    stage_time
+                                        / s.static_data.stage_data[stage_index]
+                                            .base_swing_duration
+                                            .as_secs_f64()
+                                },
+                                StageSection::Recover => {
+                                    stage_time
+                                        / s.static_data.stage_data[stage_index]
+                                            .base_recover_duration
+                                            .as_secs_f64()
+                                },
+                                _ => 0.0,
+                            };
+                            match s.stage {
+                                1 => anim::theropod::AlphaAnimation::update_skeleton(
+                                    &target_base,
+                                    (
+                                        vel.0.magnitude(),
+                                        time,
+                                        Some(s.stage_section),
+                                        state.state_time,
                                     ),
-                                    _ => anim::theropod::BetaAnimation::update_skeleton(
-                                        &target_base,
-                                        (
-                                            vel.0.magnitude(),
-                                            time,
-                                            Some(s.stage_section),
-                                            state.state_time,
-                                        ),
-                                        stage_progress,
-                                        &mut state_animation_rate,
-                                        skeleton_attr,
+                                    stage_progress,
+                                    &mut state_animation_rate,
+                                    skeleton_attr,
+                                ),
+                                _ => anim::theropod::BetaAnimation::update_skeleton(
+                                    &target_base,
+                                    (
+                                        vel.0.magnitude(),
+                                        time,
+                                        Some(s.stage_section),
+                                        state.state_time,
                                     ),
-                                }
-                            },
+                                    stage_progress,
+                                    &mut state_animation_rate,
+                                    skeleton_attr,
+                                ),
+                            }
+                        },
                         // TODO!
                         _ => target_base,
                     };
diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs
index d2af2780f8..9bf7d1b1f1 100644
--- a/world/src/layer/mod.rs
+++ b/world/src/layer/mod.rs
@@ -240,7 +240,7 @@ pub fn apply_caves_supplement<'a>(
                         wpos2d.y as f32,
                         cave_base as f32,
                     ))
-                    .with_body(match dynamic_rng.gen_range(0, 6) {
+                    .with_body(match dynamic_rng.gen_range(0, 5) {
                         0 => {
                             is_hostile = false;
                             let species = match dynamic_rng.gen_range(0, 4) {
@@ -253,7 +253,7 @@ pub fn apply_caves_supplement<'a>(
                         },
                         1 => {
                             is_hostile = true;
-                            let species = match dynamic_rng.gen_range(0, 5) {
+                            let species = match dynamic_rng.gen_range(0, 2) {
                                 0 => comp::quadruped_medium::Species::Tarasque,
                                 _ => comp::quadruped_medium::Species::Bonerattler,
                             };
@@ -261,15 +261,27 @@ pub fn apply_caves_supplement<'a>(
                         },
                         2 => {
                             is_hostile = true;
-                            let species = match dynamic_rng.gen_range(0, 4) {
-                                1 => comp::quadruped_low::Species::Rocksnapper,
+                            let species = match dynamic_rng.gen_range(0, 3) {
+                                0 => comp::quadruped_low::Species::Rocksnapper,
+                                1 => comp::quadruped_low::Species::Lavadrake,
                                 _ => comp::quadruped_low::Species::Salamander,
                             };
                             comp::quadruped_low::Body::random_with(dynamic_rng, &species).into()
                         },
+                        3 => {
+                            is_hostile = true;
+                            let species = match dynamic_rng.gen_range(0, 5) {
+                                0 => comp::theropod::Species::Sandraptor,
+                                1 => comp::theropod::Species::Snowraptor,
+                                2 => comp::theropod::Species::Woodraptor,
+                                3 => comp::theropod::Species::Odonto,
+                                _ => comp::theropod::Species::Archaeos,
+                            };
+                            comp::theropod::Body::random_with(dynamic_rng, &species).into()
+                        },
                         _ => {
                             is_hostile = true;
-                            let species = match dynamic_rng.gen_range(0, 8) {
+                            let species = match dynamic_rng.gen_range(0, 4) {
                                 0 => comp::biped_large::Species::Ogre,
                                 1 => comp::biped_large::Species::Cyclops,
                                 2 => comp::biped_large::Species::Wendigo,
diff --git a/world/src/layer/wildlife.rs b/world/src/layer/wildlife.rs
index 203843c840..67355a7f79 100644
--- a/world/src/layer/wildlife.rs
+++ b/world/src/layer/wildlife.rs
@@ -1,6 +1,9 @@
 use crate::{column::ColumnSample, sim::SimChunk, IndexRef, CONFIG};
 use common::{
-    comp::{biped_large, bird_medium, quadruped_low, quadruped_medium, quadruped_small, Alignment},
+    comp::{
+        biped_large, bird_medium, quadruped_low, quadruped_medium, quadruped_small, theropod,
+        Alignment,
+    },
     generation::{ChunkSupplement, EntityInfo},
     terrain::Block,
     vol::{BaseVol, ReadVol, RectSizedVol, WriteVol},
@@ -38,13 +41,16 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
         Entry {
             make_entity: |pos, rng| {
                 EntityInfo::at(pos)
-                    .with_body(match rng.gen_range(0, 3) {
+                    .with_body(match rng.gen_range(0, 4) {
                         0 => quadruped_medium::Body::random_with(
                             rng,
                             &quadruped_medium::Species::Frostfang,
                         )
                         .into(),
-                        1 => quadruped_medium::Body::random_with(
+                        1 => {
+                            theropod::Body::random_with(rng, &theropod::Species::Snowraptor).into()
+                        },
+                        2 => quadruped_medium::Body::random_with(
                             rng,
                             &quadruped_medium::Species::Roshwalr,
                         )
@@ -140,12 +146,15 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
         Entry {
             make_entity: |pos, rng| {
                 EntityInfo::at(pos)
-                    .with_body(match rng.gen_range(0, 2) {
+                    .with_body(match rng.gen_range(0, 3) {
                         0 => quadruped_medium::Body::random_with(
                             rng,
                             &quadruped_medium::Species::Tarasque,
                         )
                         .into(),
+                        1 => {
+                            theropod::Body::random_with(rng, &theropod::Species::Woodraptor).into()
+                        },
                         _ => quadruped_medium::Body::random_with(
                             rng,
                             &quadruped_medium::Species::Saber,
@@ -406,7 +415,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
         Entry {
             make_entity: |pos, rng| {
                 EntityInfo::at(pos)
-                    .with_body(match rng.gen_range(0, 3) {
+                    .with_body(match rng.gen_range(0, 4) {
                         0 => {
                             quadruped_low::Body::random_with(rng, &quadruped_low::Species::Maneater)
                                 .into()
@@ -416,6 +425,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
                             &quadruped_medium::Species::Tiger,
                         )
                         .into(),
+                        2 => theropod::Body::random_with(rng, &theropod::Species::Odonto).into(),
                         _ => quadruped_low::Body::random_with(
                             rng,
                             &quadruped_low::Species::Rocksnapper,
@@ -572,16 +582,40 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
                     * 1.0
             },
         },
+        // Desert pack enemy
+        Entry {
+            make_entity: |pos, rng| {
+                EntityInfo::at(pos)
+                    .with_body(
+                        theropod::Body::random_with(rng, &theropod::Species::Sandraptor).into(),
+                    )
+                    .with_alignment(Alignment::Enemy)
+            },
+            group_size: 3..5,
+            is_underwater: false,
+            get_density: |c, _col| {
+                close(c.temp, CONFIG.tropical_temp + 0.1, 0.4)
+                    * close(c.humidity, CONFIG.desert_hum, 0.4)
+                    * BASE_DENSITY
+                    * 1.0
+            },
+        },
         // Desert solitary enemies
         Entry {
             make_entity: |pos, rng| {
                 EntityInfo::at(pos)
-                    .with_body(match rng.gen_range(0, 2) {
+                    .with_body(match rng.gen_range(0, 5) {
                         0 => quadruped_medium::Body::random_with(
                             rng,
                             &quadruped_medium::Species::Bonerattler,
                         )
                         .into(),
+                        2 => theropod::Body::random_with(rng, &theropod::Species::Archaeos).into(),
+                        3 => quadruped_low::Body::random_with(
+                            rng,
+                            &quadruped_low::Species::Lavadrake,
+                        )
+                        .into(),
                         _ => quadruped_low::Body::random_with(
                             rng,
                             &quadruped_low::Species::Sandshark,
@@ -603,7 +637,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>(
         Entry {
             make_entity: |pos, rng| {
                 EntityInfo::at(pos)
-                    .with_body(match rng.gen_range(0, 5) {
+                    .with_body(match rng.gen_range(0, 6) {
                         0 => quadruped_small::Body::random_with(
                             rng,
                             &quadruped_small::Species::Holladon,