diff --git a/assets/common/entity/wild/aggressive/mossdrake.ron b/assets/common/entity/wild/aggressive/mossdrake.ron new file mode 100644 index 0000000000..c85c780c5a --- /dev/null +++ b/assets/common/entity/wild/aggressive/mossdrake.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("mossdrake"), + alignment: Alignment(Enemy), + loot: LootTable("common.loot_tables.creature.quad_low.moss"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_low/moss.ron b/assets/common/loot_tables/creature/quad_low/moss.ron new file mode 100644 index 0000000000..bb6289deaf --- /dev/null +++ b/assets/common/loot_tables/creature/quad_low/moss.ron @@ -0,0 +1,6 @@ +[ + (1.0, Item("common.items.crafting_ing.hide.animal_hide")), + (1.0, Item("common.items.crafting_ing.resin")), + (1.0, Item("common.items.log.hardwood")), + (1.0, Item("common.items.flowers.plant_fiber")), +] \ No newline at end of file diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index 17d1ef0b11..9243ab2766 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -1253,6 +1253,10 @@ keyword: "deadwood", generic: "Deadwood" ), + mossdrake: ( + keyword: "mossdrake", + generic: "Moss Drake" + ), ) ), arthropod: ( diff --git a/assets/voxygen/voxel/npc/mossdrake/male/chest.vox b/assets/voxygen/voxel/npc/mossdrake/male/chest.vox new file mode 100644 index 0000000000..53de791f52 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3994c2b7bda7496a2f55f992328b67ecd259fa17c614ee19542bb5255649a4cb +size 14496 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/foot_br.vox b/assets/voxygen/voxel/npc/mossdrake/male/foot_br.vox new file mode 100644 index 0000000000..a01d1d93f3 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46decfad23bf8a45b90900ea2557f081150f5f15d7aea1b2edab882d55cf5359 +size 2284 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/foot_fr.vox b/assets/voxygen/voxel/npc/mossdrake/male/foot_fr.vox new file mode 100644 index 0000000000..f0558dd4f4 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d91f6e1e57da23fc4c0bbce43fd00c973a156b52ad2adc2c009d1a1e4f0f502d +size 2752 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/head_lower.vox b/assets/voxygen/voxel/npc/mossdrake/male/head_lower.vox new file mode 100644 index 0000000000..414e43dee6 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62f4ebe0790621f0e416a51530b60df9973ebf8eee9cb86e355544a553f0c925 +size 3880 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/head_upper.vox b/assets/voxygen/voxel/npc/mossdrake/male/head_upper.vox new file mode 100644 index 0000000000..f04681b388 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b497ec928d5cfdf34c97dad4b5b27cd1118499f8183efd18efef2ccdb4738113 +size 4360 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/jaw.vox b/assets/voxygen/voxel/npc/mossdrake/male/jaw.vox new file mode 100644 index 0000000000..eb9fb4fe5d --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f50a3b103a8b5ba62eb585bdaaf7ff762172a0848e8bcb6c765fdaface62fbed +size 2164 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/tail_front.vox b/assets/voxygen/voxel/npc/mossdrake/male/tail_front.vox new file mode 100644 index 0000000000..2614e292d4 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/tail_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:862eebd7b9cf655b3f1d8614f579ebe286230e1dd7ed1d1bb5a21df3f386d26b +size 3556 diff --git a/assets/voxygen/voxel/npc/mossdrake/male/tail_rear.vox b/assets/voxygen/voxel/npc/mossdrake/male/tail_rear.vox new file mode 100644 index 0000000000..bcd6509526 --- /dev/null +++ b/assets/voxygen/voxel/npc/mossdrake/male/tail_rear.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbe0da3a54afb0d0e87cc49d4bec7a4ebae2596c517ca8d95182e6c5b24e4305 +size 2476 diff --git a/assets/voxygen/voxel/quadruped_low_central_manifest.ron b/assets/voxygen/voxel/quadruped_low_central_manifest.ron index f83cc08420..a0e0ea82d6 100644 --- a/assets/voxygen/voxel/quadruped_low_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_central_manifest.ron @@ -1040,4 +1040,56 @@ central: ("armor.empty"), ), ), + (Mossdrake, Male): ( + upper: ( + offset: (-6.5, -2.0, -5.5), + central: ("npc.mossdrake.male.head_upper"), + ), + lower: ( + offset: (-6.5, -1.0, -3.0), + central: ("npc.mossdrake.male.head_lower"), + ), + jaw: ( + offset: (-3.5, -2.0, -5.0), + central: ("npc.mossdrake.male.jaw"), + ), + chest: ( + offset: (-13.5, -11.5, -12.5), + central: ("npc.mossdrake.male.chest"), + ), + tail_rear: ( + offset: (-6.5, -24.0, -3.5), + central: ("npc.mossdrake.male.tail_rear"), + ), + tail_front: ( + offset: (-5.5, -12.0, -6.5), + central: ("npc.mossdrake.male.tail_front"), + ), + ), + (Mossdrake, Female): ( + upper: ( + offset: (-6.5, -2.0, -5.5), + central: ("npc.mossdrake.male.head_upper"), + ), + lower: ( + offset: (-6.5, -1.0, -3.0), + central: ("npc.mossdrake.male.head_lower"), + ), + jaw: ( + offset: (-3.5, -2.0, -5.0), + central: ("npc.mossdrake.male.jaw"), + ), + chest: ( + offset: (-13.5, -11.5, -12.5), + central: ("npc.mossdrake.male.chest"), + ), + tail_rear: ( + offset: (-6.5, -24.0, -3.5), + central: ("npc.mossdrake.male.tail_rear"), + ), + tail_front: ( + offset: (-5.5, -12.0, -6.5), + central: ("npc.mossdrake.male.tail_front"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron index 85e6f02208..071397114f 100644 --- a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron @@ -719,4 +719,40 @@ lateral: ("npc.deadwood.male.foot_br", false), ), ), + (Mossdrake, Male): ( + front_left: ( + offset: (-14.0, -1.0, -10.0), + lateral: ("npc.mossdrake.male.foot_fr", false), + ), + front_right: ( + offset: (0.0, -1.0, -10.0), + lateral: ("npc.mossdrake.male.foot_fr", false), + ), + back_left: ( + offset: (-14.0, -7.5, -10.0), + lateral: ("npc.mossdrake.male.foot_br", false), + ), + back_right: ( + offset: (0.0, -7.5, -10.0), + lateral: ("npc.mossdrake.male.foot_br", false), + ), + ), + (Mossdrake, Female): ( + front_left: ( + offset: (-14.0, -1.0, -10.0), + lateral: ("npc.mossdrake.male.foot_fr", false), + ), + front_right: ( + offset: (0.0, -1.0, -10.0), + lateral: ("npc.mossdrake.male.foot_fr", false), + ), + back_left: ( + offset: (-14.0, -7.5, -10.0), + lateral: ("npc.mossdrake.male.foot_br", false), + ), + back_right: ( + offset: (0.0, -7.5, -10.0), + lateral: ("npc.mossdrake.male.foot_br", false), + ), + ), }) diff --git a/assets/world/wildlife/spawn/jungle/rainforest_area.ron b/assets/world/wildlife/spawn/jungle/rainforest_area.ron index d4da9f0c2c..bc63a46136 100644 --- a/assets/world/wildlife/spawn/jungle/rainforest_area.ron +++ b/assets/world/wildlife/spawn/jungle/rainforest_area.ron @@ -14,6 +14,7 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.aggressive.stag_beetle")), (1, (1, 1, "common.entity.wild.peaceful.crawler_moss")), (1, (1, 1, "common.entity.wild.aggressive.rootsnapper")), + (1, (1, 1, "common.entity.wild.aggressive.mossdrake")), ], spawn_mode: Land, day_period: [Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/temperate/rare.ron b/assets/world/wildlife/spawn/temperate/rare.ron index e1bd3da4ed..eb364dd56a 100644 --- a/assets/world/wildlife/spawn/temperate/rare.ron +++ b/assets/world/wildlife/spawn/temperate/rare.ron @@ -7,6 +7,7 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.aggressive.ogre")), (1, (1, 1, "common.entity.wild.aggressive.swamp_troll")), (1, (1, 1, "common.entity.wild.aggressive.cyclops")), + (1, (1, 1, "common.entity.wild.aggressive.mossdrake")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/tropical/rainforest.ron b/assets/world/wildlife/spawn/tropical/rainforest.ron index 7ab5c6dda1..25572f0b18 100644 --- a/assets/world/wildlife/spawn/tropical/rainforest.ron +++ b/assets/world/wildlife/spawn/tropical/rainforest.ron @@ -6,6 +6,7 @@ SpawnEntry ( groups: [ (1, (1, 2, "common.entity.wild.aggressive.male_lion")), (1, (1, 3, "common.entity.wild.aggressive.hyena")), + (1, (1, 1, "common.entity.wild.aggressive.mossdrake")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 361f3fd487..5eae655709 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -326,6 +326,7 @@ impl Body { quadruped_low::Species::Salamander => 65.0, quadruped_low::Species::Elbst => 65.0, quadruped_low::Species::Tortoise => 200.0, + quadruped_low::Species::Mossdrake => 500.0, _ => 200.0, }, Body::QuadrupedMedium(body) => match body.species { @@ -496,6 +497,7 @@ impl Body { quadruped_low::Species::Salamander => Vec3::new(1.7, 4.0, 1.3), quadruped_low::Species::Elbst => Vec3::new(1.7, 4.0, 1.3), quadruped_low::Species::Tortoise => Vec3::new(1.7, 2.7, 1.5), + quadruped_low::Species::Mossdrake => Vec3::new(2.0, 4.7, 2.5), _ => Vec3::new(1.0, 1.6, 1.3), }, Body::Ship(ship) => ship.dimensions(), @@ -796,6 +798,7 @@ impl Body { quadruped_low::Species::Lavadrake => 160, quadruped_low::Species::Basilisk => 200, quadruped_low::Species::Deadwood => 120, + quadruped_low::Species::Mossdrake => 160, _ => 70, }, Body::Arthropod(arthropod) => match arthropod.species { diff --git a/common/src/comp/body/quadruped_low.rs b/common/src/comp/body/quadruped_low.rs index 2211ec9065..218f328b5a 100644 --- a/common/src/comp/body/quadruped_low.rs +++ b/common/src/comp/body/quadruped_low.rs @@ -59,6 +59,7 @@ make_case_elim!( Rootsnapper = 17, Reefsnapper = 18, Elbst = 19, + Mossdrake = 20, } ); @@ -87,6 +88,7 @@ pub struct AllSpecies { pub basilisk: SpeciesMeta, pub deadwood: SpeciesMeta, pub icedrake: SpeciesMeta, + pub mossdrake: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -115,11 +117,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Basilisk => &self.basilisk, Species::Deadwood => &self.deadwood, Species::Icedrake => &self.icedrake, + Species::Mossdrake => &self.mossdrake, } } } -pub const ALL_SPECIES: [Species; 20] = [ +pub const ALL_SPECIES: [Species; 21] = [ Species::Crocodile, Species::SeaCrocodile, Species::Alligator, @@ -140,6 +143,7 @@ pub const ALL_SPECIES: [Species; 20] = [ Species::Basilisk, Species::Deadwood, Species::Icedrake, + Species::Mossdrake, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index cd3046bc62..dd1e0eb09e 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -135,6 +135,7 @@ impl Body { quadruped_low::Species::Icedrake => 100.0, quadruped_low::Species::Basilisk => 90.0, quadruped_low::Species::Deadwood => 140.0, + quadruped_low::Species::Mossdrake => 100.0, }, Body::Ship(_) => 0.0, Body::Arthropod(arthropod) => match arthropod.species { @@ -206,6 +207,7 @@ impl Body { quadruped_low::Species::Rootsnapper => 1.8, quadruped_low::Species::Lavadrake => 1.7, quadruped_low::Species::Icedrake => 1.7, + quadruped_low::Species::Mossdrake => 1.7, _ => 2.0, }, Body::Ship(ship) if ship.has_water_thrust() => 0.1, diff --git a/voxygen/anim/src/quadruped_low/mod.rs b/voxygen/anim/src/quadruped_low/mod.rs index f7fc7afbcc..6eb80830b2 100644 --- a/voxygen/anim/src/quadruped_low/mod.rs +++ b/voxygen/anim/src/quadruped_low/mod.rs @@ -171,6 +171,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (7.0, 8.0), (Basilisk, _) => (5.0, 2.5), (Deadwood, _) => (2.0, -3.0), + (Mossdrake, _) => (7.0, 8.0), }, head_lower: match (body.species, body.body_type) { (Crocodile, _) => (8.0, 0.0), @@ -193,6 +194,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (11.5, -6.0), (Basilisk, _) => (12.5, -5.5), (Deadwood, _) => (0.0, 0.0), + (Mossdrake, _) => (9.0, -6.0), }, jaw: match (body.species, body.body_type) { (Crocodile, _) => (2.5, -3.0), @@ -215,6 +217,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (-0.5, -8.0), (Basilisk, _) => (0.5, -3.0), (Deadwood, _) => (-1.0, 4.0), + (Mossdrake, _) => (3.0, -5.0), }, chest: match (body.species, body.body_type) { (Crocodile, _) => (0.0, 5.0), @@ -237,6 +240,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (0.0, 16.5), (Basilisk, _) => (0.0, 15.0), (Deadwood, _) => (0.0, 12.0), + (Mossdrake, _) => (0.0, 16.5), }, tail_rear: match (body.species, body.body_type) { (Crocodile, _) => (-12.5, -1.0), @@ -259,6 +263,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (-12.0, 1.0), (Basilisk, _) => (-10.0, -4.0), (Deadwood, _) => (-15.0, 4.0), + (Mossdrake, _) => (-12.0, -2.0), }, tail_front: match (body.species, body.body_type) { (Crocodile, _) => (-6.0, 0.0), @@ -281,6 +286,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (-7.0, -4.5), (Basilisk, _) => (-6.5, -5.5), (Deadwood, _) => (-1.0, 4.0), + (Mossdrake, _) => (-7.0, -4.5), }, feet_f: match (body.species, body.body_type) { (Crocodile, _) => (3.5, 6.0, -1.0), @@ -303,6 +309,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (4.5, 4.0, -6.5), (Basilisk, _) => (6.5, 4.0, -2.0), (Deadwood, _) => (3.5, 4.0, -5.0), + (Mossdrake, _) => (4.5, 4.0, -6.5), }, feet_b: match (body.species, body.body_type) { (Crocodile, _) => (3.5, -6.0, -1.0), @@ -325,6 +332,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Icedrake, _) => (3.5, -8.0, -6.5), (Basilisk, _) => (5.5, -6.5, -2.0), (Deadwood, _) => (3.5, -6.0, -5.0), + (Mossdrake, _) => (3.5, -8.0, -6.5), }, lean: match (body.species, body.body_type) { (Pangolin, _) => (0.4, 0.0), @@ -348,6 +356,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Lavadrake, _) => 1.12, (Icedrake, _) => 1.12, (Basilisk, _) => 1.3, + (Mossdrake, _) => 1.12, _ => 0.9, }, tempo: match (body.species, body.body_type) { @@ -368,6 +377,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Lavadrake, _) => 1.1, (Icedrake, _) => 1.1, (Basilisk, _) => 0.8, + (Mossdrake, _) => 1.1, _ => 1.0, }, } @@ -396,6 +406,7 @@ fn mount_point(body: &Body) -> Vec3 { (Icedrake, _) => (0.0, -8.0, 2.5), (Basilisk, _) => (0.0, -2.0, 2.0), (Deadwood, _) => (0.0, -2.0, -3.0), + (Mossdrake, _) => (0.0, 2.0, -2.5), } .into() }