diff --git a/assets/common/items/npc_weapons/staff/mindflayer_staff.ron b/assets/common/items/npc_weapons/staff/mindflayer_staff.ron new file mode 100644 index 0000000000..0e231d0d1e --- /dev/null +++ b/assets/common/items/npc_weapons/staff/mindflayer_staff.ron @@ -0,0 +1,15 @@ +ItemDef( + name: "Mindflayer Staff", + description: "Placeholder", + kind: Tool( + ( + kind: Staff, + stats: ( + equip_time_millis: 300, + power: 1.00, + speed: 1.0, + ), + ) + ), + quality: Low, +) diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index 4cef11f55b..3bd21d78e5 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -298,6 +298,30 @@ "roshwalr": { "keyword": "roshwalr", "generic": "Roshwalr" + }, + "donkey": { + "keyword": "donkey", + "generic": "Donkey" + }, + "camel": { + "keyword": "camel", + "generic": "Camel" + }, + "zebra": { + "keyword": "zebra", + "generic": "Zebra" + }, + "antelope": { + "keyword": "antelope", + "generic": "Antelope" + }, + "kelpie": { + "keyword": "kelpie", + "generic": "Kelpie" + }, + "horse": { + "keyword": "horse", + "generic": "Horse" } } }, @@ -505,6 +529,10 @@ "beaver": { "keyword": "beaver", "generic": "Beaver" + }, + "hare": { + "keyword": "hare", + "generic": "Hare" } } }, @@ -593,6 +621,10 @@ "saurok_sly": { "keyword": "saurok_sly", "generic": "Sly Saurok" + }, + "mindflayer": { + "keyword": "mindflayer", + "generic": "Mindflayer" } } }, @@ -729,6 +761,14 @@ "maneater": { "keyword": "maneater", "generic": "Maneater" + }, + "sandshark": { + "keyword": "sandshark", + "generic": "Sand Shark" + }, + "hakulaq": { + "keyword": "hakulaq", + "generic": "Hakulaq" } } } diff --git a/assets/voxygen/audio/ambient.ron b/assets/voxygen/audio/ambient.ron index a33d46987d..ddc2af2fbb 100644 --- a/assets/voxygen/audio/ambient.ron +++ b/assets/voxygen/audio/ambient.ron @@ -2,7 +2,7 @@ tracks: [ ( path: "voxygen.audio.ambient.wind", - length: 14.5, + length: 14.2, tag: Wind, ), ] diff --git a/assets/voxygen/audio/ambient/wind.ogg b/assets/voxygen/audio/ambient/wind.ogg index 808f9dded5..53cff82923 100644 Binary files a/assets/voxygen/audio/ambient/wind.ogg and b/assets/voxygen/audio/ambient/wind.ogg differ diff --git a/assets/voxygen/voxel/biped_large_central_manifest.ron b/assets/voxygen/voxel/biped_large_central_manifest.ron index 49cdbf1642..1c61fc917d 100644 --- a/assets/voxygen/voxel/biped_large_central_manifest.ron +++ b/assets/voxygen/voxel/biped_large_central_manifest.ron @@ -539,4 +539,64 @@ central: ("weapon.bow.longbow_saurok"), ) ), + (Mindflayer, Male): ( + head: ( + offset: (-8.5, -8.0, -10.5), + central: ("npc.mindflayer.male.head"), + ), + torso_upper: ( + offset: (-10.5, -8.5, -11.0), + central: ("npc.mindflayer.male.torso_upper"), + ), + torso_lower: ( + offset: (-12.5, -10.0, -9.0), + central: ("npc.mindflayer.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + main: ( + offset: (-5.5, -3.5, -4.0), + central: ("weapon.staff.firestaff_mindflayer"), + ) + ), + (Mindflayer, Female): ( + head: ( + offset: (-8.5, -8.0, -10.5), + central: ("npc.mindflayer.male.head"), + ), + torso_upper: ( + offset: (-10.5, -8.5, -11.0), + central: ("npc.mindflayer.male.torso_upper"), + ), + torso_lower: ( + offset: (-12.5, -10.0, -9.0), + central: ("npc.mindflayer.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + main: ( + offset: (-5.5, -3.5, -4.0), + central: ("weapon.staff.firestaff_mindflayer"), + ) + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron index 784fb1d729..af538c5c72 100644 --- a/assets/voxygen/voxel/biped_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -611,4 +611,72 @@ lateral: ("npc.saurok_sly.female.foot_r"), ), ), + (Mindflayer, Male): ( + shoulder_l: ( + offset: (-4.5, -3.0, -4.0), + lateral: ("npc.mindflayer.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-4.5, -3.0, -4.0), + lateral: ("npc.mindflayer.male.shoulder_r"), + ), + hand_l: ( + offset: (-4.5, -4.0, -12.0), + lateral: ("npc.mindflayer.male.hand_l"), + ), + hand_r: ( + offset: (-4.5, -4.0, -12.0), + lateral: ("npc.mindflayer.male.hand_r"), + ), + leg_l: ( + offset: (-6.5, -10.0, -16.0), + lateral: ("armor.empty"), + ), + leg_r: ( + offset: (-6.5, -10.0, -16.0), + lateral: ("armor.empty"), + ), + foot_l: ( + offset: (-2.0, -4.5, -4.0), + lateral: ("npc.mindflayer.male.foot_l"), + ), + foot_r: ( + offset: (-2.0, -4.5, -4.0), + lateral: ("npc.mindflayer.male.foot_r"), + ) + ), + (Mindflayer, Female): ( + shoulder_l: ( + offset: (-4.5, -3.0, -4.0), + lateral: ("npc.mindflayer.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-4.5, -3.0, -4.0), + lateral: ("npc.mindflayer.male.shoulder_r"), + ), + hand_l: ( + offset: (-4.5, -4.0, -12.0), + lateral: ("npc.mindflayer.male.hand_l"), + ), + hand_r: ( + offset: (-4.5, -4.0, -12.0), + lateral: ("npc.mindflayer.male.hand_r"), + ), + leg_l: ( + offset: (-6.5, -10.0, -16.0), + lateral: ("armor.empty"), + ), + leg_r: ( + offset: (-6.5, -10.0, -16.0), + lateral: ("armor.empty"), + ), + foot_l: ( + offset: (-2.0, -4.5, -4.0), + lateral: ("npc.mindflayer.male.foot_l"), + ), + foot_r: ( + offset: (-2.0, -4.5, -4.0), + lateral: ("npc.mindflayer.male.foot_r"), + ) + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/npc/antelope/male/foot_bl.vox b/assets/voxygen/voxel/npc/antelope/male/foot_bl.vox new file mode 100644 index 0000000000..4fea9f70fc Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/foot_br.vox b/assets/voxygen/voxel/npc/antelope/male/foot_br.vox new file mode 100644 index 0000000000..97339329a4 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/foot_fl.vox b/assets/voxygen/voxel/npc/antelope/male/foot_fl.vox new file mode 100644 index 0000000000..707e7b0ed7 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/foot_fr.vox b/assets/voxygen/voxel/npc/antelope/male/foot_fr.vox new file mode 100644 index 0000000000..56142c15e4 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/head.vox b/assets/voxygen/voxel/npc/antelope/male/head.vox new file mode 100644 index 0000000000..19083c0bce Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/jaw.vox b/assets/voxygen/voxel/npc/antelope/male/jaw.vox new file mode 100644 index 0000000000..bf0b1eb6bf Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/leg_bl.vox b/assets/voxygen/voxel/npc/antelope/male/leg_bl.vox new file mode 100644 index 0000000000..0dcbe79d49 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/leg_bl.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/leg_br.vox b/assets/voxygen/voxel/npc/antelope/male/leg_br.vox new file mode 100644 index 0000000000..95d1f326c8 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/leg_br.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/leg_fl.vox b/assets/voxygen/voxel/npc/antelope/male/leg_fl.vox new file mode 100644 index 0000000000..8326f63c16 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/leg_fl.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/leg_fr.vox b/assets/voxygen/voxel/npc/antelope/male/leg_fr.vox new file mode 100644 index 0000000000..f0e96139ad Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/leg_fr.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/neck.vox b/assets/voxygen/voxel/npc/antelope/male/neck.vox new file mode 100644 index 0000000000..40780d237f Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/neck.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/tail.vox b/assets/voxygen/voxel/npc/antelope/male/tail.vox new file mode 100644 index 0000000000..9d6221d034 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/torso_back.vox b/assets/voxygen/voxel/npc/antelope/male/torso_back.vox new file mode 100644 index 0000000000..71a6ce333c Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/torso_back.vox differ diff --git a/assets/voxygen/voxel/npc/antelope/male/torso_front.vox b/assets/voxygen/voxel/npc/antelope/male/torso_front.vox new file mode 100644 index 0000000000..9bdf5de8e9 Binary files /dev/null and b/assets/voxygen/voxel/npc/antelope/male/torso_front.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/foot_bl.vox b/assets/voxygen/voxel/npc/camel/male/foot_bl.vox new file mode 100644 index 0000000000..e8e218f717 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/foot_br.vox b/assets/voxygen/voxel/npc/camel/male/foot_br.vox new file mode 100644 index 0000000000..1d39186625 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/foot_fl.vox b/assets/voxygen/voxel/npc/camel/male/foot_fl.vox new file mode 100644 index 0000000000..de9389b500 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/foot_fr.vox b/assets/voxygen/voxel/npc/camel/male/foot_fr.vox new file mode 100644 index 0000000000..426aedca7f Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/head.vox b/assets/voxygen/voxel/npc/camel/male/head.vox new file mode 100644 index 0000000000..9942e25d99 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/jaw.vox b/assets/voxygen/voxel/npc/camel/male/jaw.vox new file mode 100644 index 0000000000..e7d8b084c5 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/leg_bl.vox b/assets/voxygen/voxel/npc/camel/male/leg_bl.vox new file mode 100644 index 0000000000..ea2ff12ccc Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/leg_bl.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/leg_br.vox b/assets/voxygen/voxel/npc/camel/male/leg_br.vox new file mode 100644 index 0000000000..3ff4485bc1 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/leg_br.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/leg_fl.vox b/assets/voxygen/voxel/npc/camel/male/leg_fl.vox new file mode 100644 index 0000000000..79b1e6359e Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/leg_fl.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/leg_fr.vox b/assets/voxygen/voxel/npc/camel/male/leg_fr.vox new file mode 100644 index 0000000000..5020f654a8 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/leg_fr.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/neck.vox b/assets/voxygen/voxel/npc/camel/male/neck.vox new file mode 100644 index 0000000000..6eab9c8d20 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/neck.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/tail.vox b/assets/voxygen/voxel/npc/camel/male/tail.vox new file mode 100644 index 0000000000..de31017356 Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/torso_back.vox b/assets/voxygen/voxel/npc/camel/male/torso_back.vox new file mode 100644 index 0000000000..7fc832107d Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/torso_back.vox differ diff --git a/assets/voxygen/voxel/npc/camel/male/torso_front.vox b/assets/voxygen/voxel/npc/camel/male/torso_front.vox new file mode 100644 index 0000000000..f8dffa608e Binary files /dev/null and b/assets/voxygen/voxel/npc/camel/male/torso_front.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/ears.vox b/assets/voxygen/voxel/npc/donkey/male/ears.vox new file mode 100644 index 0000000000..cd6e1dff52 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/ears.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/foot_bl.vox b/assets/voxygen/voxel/npc/donkey/male/foot_bl.vox new file mode 100644 index 0000000000..4840f9be8b Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/foot_br.vox b/assets/voxygen/voxel/npc/donkey/male/foot_br.vox new file mode 100644 index 0000000000..cd927fbb70 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/foot_fl.vox b/assets/voxygen/voxel/npc/donkey/male/foot_fl.vox new file mode 100644 index 0000000000..ae110baefe Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/foot_fr.vox b/assets/voxygen/voxel/npc/donkey/male/foot_fr.vox new file mode 100644 index 0000000000..980c63c068 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/head.vox b/assets/voxygen/voxel/npc/donkey/male/head.vox new file mode 100644 index 0000000000..20eb6bf94b Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/jaw.vox b/assets/voxygen/voxel/npc/donkey/male/jaw.vox new file mode 100644 index 0000000000..0afd3e5169 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/leg_bl.vox b/assets/voxygen/voxel/npc/donkey/male/leg_bl.vox new file mode 100644 index 0000000000..756b05fc04 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/leg_bl.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/leg_br.vox b/assets/voxygen/voxel/npc/donkey/male/leg_br.vox new file mode 100644 index 0000000000..1e9b00fbc6 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/leg_br.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/leg_fl.vox b/assets/voxygen/voxel/npc/donkey/male/leg_fl.vox new file mode 100644 index 0000000000..8ef0747f87 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/leg_fl.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/leg_fr.vox b/assets/voxygen/voxel/npc/donkey/male/leg_fr.vox new file mode 100644 index 0000000000..7a1d8a42ef Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/leg_fr.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/neck.vox b/assets/voxygen/voxel/npc/donkey/male/neck.vox new file mode 100644 index 0000000000..58bfa366d4 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/neck.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/tail.vox b/assets/voxygen/voxel/npc/donkey/male/tail.vox new file mode 100644 index 0000000000..a20b1e310f Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/torso_back.vox b/assets/voxygen/voxel/npc/donkey/male/torso_back.vox new file mode 100644 index 0000000000..dc478c6b93 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/torso_back.vox differ diff --git a/assets/voxygen/voxel/npc/donkey/male/torso_front.vox b/assets/voxygen/voxel/npc/donkey/male/torso_front.vox new file mode 100644 index 0000000000..9376976357 Binary files /dev/null and b/assets/voxygen/voxel/npc/donkey/male/torso_front.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/chest.vox b/assets/voxygen/voxel/npc/hakulaq/male/chest.vox new file mode 100644 index 0000000000..db85ecbf5c Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/chest.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/foot_bl.vox b/assets/voxygen/voxel/npc/hakulaq/male/foot_bl.vox new file mode 100644 index 0000000000..af8eaf389e Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/foot_br.vox b/assets/voxygen/voxel/npc/hakulaq/male/foot_br.vox new file mode 100644 index 0000000000..9dbe5c6588 Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/foot_fl.vox b/assets/voxygen/voxel/npc/hakulaq/male/foot_fl.vox new file mode 100644 index 0000000000..56f63e1b31 Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/foot_fr.vox b/assets/voxygen/voxel/npc/hakulaq/male/foot_fr.vox new file mode 100644 index 0000000000..74a5806f15 Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/head_lower.vox b/assets/voxygen/voxel/npc/hakulaq/male/head_lower.vox new file mode 100644 index 0000000000..fc456f0fea Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/head_lower.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/head_upper.vox b/assets/voxygen/voxel/npc/hakulaq/male/head_upper.vox new file mode 100644 index 0000000000..da1d8185bd Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/head_upper.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/jaw.vox b/assets/voxygen/voxel/npc/hakulaq/male/jaw.vox new file mode 100644 index 0000000000..2b56927b6f Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/tail_front.vox b/assets/voxygen/voxel/npc/hakulaq/male/tail_front.vox new file mode 100644 index 0000000000..7210534d99 Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/tail_front.vox differ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/tail_rear.vox b/assets/voxygen/voxel/npc/hakulaq/male/tail_rear.vox new file mode 100644 index 0000000000..4278ad0c40 Binary files /dev/null and b/assets/voxygen/voxel/npc/hakulaq/male/tail_rear.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/chest.vox b/assets/voxygen/voxel/npc/hare/female/chest.vox new file mode 100644 index 0000000000..5b9154d726 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/chest.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/foot_bl.vox b/assets/voxygen/voxel/npc/hare/female/foot_bl.vox new file mode 100644 index 0000000000..fd7efbbefd Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/foot_br.vox b/assets/voxygen/voxel/npc/hare/female/foot_br.vox new file mode 100644 index 0000000000..52474aefd9 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/foot_fl.vox b/assets/voxygen/voxel/npc/hare/female/foot_fl.vox new file mode 100644 index 0000000000..b35b5bde3e Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/foot_fr.vox b/assets/voxygen/voxel/npc/hare/female/foot_fr.vox new file mode 100644 index 0000000000..a9686f0628 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/head.vox b/assets/voxygen/voxel/npc/hare/female/head.vox new file mode 100644 index 0000000000..d96e6258d2 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/head.vox differ diff --git a/assets/voxygen/voxel/npc/hare/female/tail.vox b/assets/voxygen/voxel/npc/hare/female/tail.vox new file mode 100644 index 0000000000..8f07b71d82 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/female/tail.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/chest.vox b/assets/voxygen/voxel/npc/hare/male/chest.vox new file mode 100644 index 0000000000..28fce403e0 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/chest.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/foot_bl.vox b/assets/voxygen/voxel/npc/hare/male/foot_bl.vox new file mode 100644 index 0000000000..6ea320dacc Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/foot_br.vox b/assets/voxygen/voxel/npc/hare/male/foot_br.vox new file mode 100644 index 0000000000..7ca0933113 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/foot_fl.vox b/assets/voxygen/voxel/npc/hare/male/foot_fl.vox new file mode 100644 index 0000000000..095ae74132 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/foot_fr.vox b/assets/voxygen/voxel/npc/hare/male/foot_fr.vox new file mode 100644 index 0000000000..095ae74132 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/head.vox b/assets/voxygen/voxel/npc/hare/male/head.vox new file mode 100644 index 0000000000..9beea64f91 Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/hare/male/tail.vox b/assets/voxygen/voxel/npc/hare/male/tail.vox new file mode 100644 index 0000000000..03c3b10e0e Binary files /dev/null and b/assets/voxygen/voxel/npc/hare/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/hirdrasil/torso_front.vox b/assets/voxygen/voxel/npc/hirdrasil/torso_front.vox deleted file mode 100644 index 62d21d88a3..0000000000 Binary files a/assets/voxygen/voxel/npc/hirdrasil/torso_front.vox and /dev/null differ diff --git a/assets/voxygen/voxel/npc/horse/male/ears.vox b/assets/voxygen/voxel/npc/horse/male/ears.vox new file mode 100644 index 0000000000..3d5a3315f2 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/ears.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/foot_bl.vox b/assets/voxygen/voxel/npc/horse/male/foot_bl.vox new file mode 100644 index 0000000000..e40fcff4f0 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/foot_br.vox b/assets/voxygen/voxel/npc/horse/male/foot_br.vox new file mode 100644 index 0000000000..8c3a0f3478 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/foot_fl.vox b/assets/voxygen/voxel/npc/horse/male/foot_fl.vox new file mode 100644 index 0000000000..ffddf7ed5c Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/foot_fr.vox b/assets/voxygen/voxel/npc/horse/male/foot_fr.vox new file mode 100644 index 0000000000..1174b1acff Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/head.vox b/assets/voxygen/voxel/npc/horse/male/head.vox new file mode 100644 index 0000000000..0104a56066 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/jaw.vox b/assets/voxygen/voxel/npc/horse/male/jaw.vox new file mode 100644 index 0000000000..ebc3b5376a Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/leg_bl.vox b/assets/voxygen/voxel/npc/horse/male/leg_bl.vox new file mode 100644 index 0000000000..380462d9a5 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/leg_bl.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/leg_br.vox b/assets/voxygen/voxel/npc/horse/male/leg_br.vox new file mode 100644 index 0000000000..3396d16c9a Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/leg_br.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/leg_fl.vox b/assets/voxygen/voxel/npc/horse/male/leg_fl.vox new file mode 100644 index 0000000000..9cebf14ebc Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/leg_fl.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/leg_fr.vox b/assets/voxygen/voxel/npc/horse/male/leg_fr.vox new file mode 100644 index 0000000000..ed9f6a622d Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/leg_fr.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/neck.vox b/assets/voxygen/voxel/npc/horse/male/neck.vox new file mode 100644 index 0000000000..c23318e0a3 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/neck.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/tail.vox b/assets/voxygen/voxel/npc/horse/male/tail.vox new file mode 100644 index 0000000000..4fbdd5fe6d Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/torso_back.vox b/assets/voxygen/voxel/npc/horse/male/torso_back.vox new file mode 100644 index 0000000000..667beb7c65 Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/torso_back.vox differ diff --git a/assets/voxygen/voxel/npc/horse/male/torso_front.vox b/assets/voxygen/voxel/npc/horse/male/torso_front.vox new file mode 100644 index 0000000000..2824c66b7c Binary files /dev/null and b/assets/voxygen/voxel/npc/horse/male/torso_front.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/ears.vox b/assets/voxygen/voxel/npc/kelpie/male/ears.vox new file mode 100644 index 0000000000..86199fa17a Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/ears.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/foot_bl.vox b/assets/voxygen/voxel/npc/kelpie/male/foot_bl.vox new file mode 100644 index 0000000000..27f3b965a6 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/foot_br.vox b/assets/voxygen/voxel/npc/kelpie/male/foot_br.vox new file mode 100644 index 0000000000..cbcfffb040 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/foot_fl.vox b/assets/voxygen/voxel/npc/kelpie/male/foot_fl.vox new file mode 100644 index 0000000000..64a8983971 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/foot_fr.vox b/assets/voxygen/voxel/npc/kelpie/male/foot_fr.vox new file mode 100644 index 0000000000..60546d00e1 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/head.vox b/assets/voxygen/voxel/npc/kelpie/male/head.vox new file mode 100644 index 0000000000..edf7d3e952 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/jaw.vox b/assets/voxygen/voxel/npc/kelpie/male/jaw.vox new file mode 100644 index 0000000000..c9fd39e208 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/leg_bl.vox b/assets/voxygen/voxel/npc/kelpie/male/leg_bl.vox new file mode 100644 index 0000000000..40bf201806 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/leg_bl.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/leg_br.vox b/assets/voxygen/voxel/npc/kelpie/male/leg_br.vox new file mode 100644 index 0000000000..8b08bafe37 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/leg_br.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/leg_fl.vox b/assets/voxygen/voxel/npc/kelpie/male/leg_fl.vox new file mode 100644 index 0000000000..394757e072 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/leg_fl.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/leg_fr.vox b/assets/voxygen/voxel/npc/kelpie/male/leg_fr.vox new file mode 100644 index 0000000000..56a62483de Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/leg_fr.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/neck.vox b/assets/voxygen/voxel/npc/kelpie/male/neck.vox new file mode 100644 index 0000000000..188cb3d498 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/neck.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/tail.vox b/assets/voxygen/voxel/npc/kelpie/male/tail.vox new file mode 100644 index 0000000000..db17322194 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/torso_back.vox b/assets/voxygen/voxel/npc/kelpie/male/torso_back.vox new file mode 100644 index 0000000000..43a2f24e8f Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/torso_back.vox differ diff --git a/assets/voxygen/voxel/npc/kelpie/male/torso_front.vox b/assets/voxygen/voxel/npc/kelpie/male/torso_front.vox new file mode 100644 index 0000000000..13bb34c675 Binary files /dev/null and b/assets/voxygen/voxel/npc/kelpie/male/torso_front.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/leg_l.vox b/assets/voxygen/voxel/npc/mindflayer/leg_l.vox new file mode 100644 index 0000000000..e8b0b685f9 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/leg_l.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/leg_r.vox b/assets/voxygen/voxel/npc/mindflayer/leg_r.vox new file mode 100644 index 0000000000..abc705d27e Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/leg_r.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/foot_l.vox b/assets/voxygen/voxel/npc/mindflayer/male/foot_l.vox new file mode 100644 index 0000000000..bf71a3cd20 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/foot_l.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/foot_r.vox b/assets/voxygen/voxel/npc/mindflayer/male/foot_r.vox new file mode 100644 index 0000000000..0bdd753785 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/foot_r.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/hand_l.vox b/assets/voxygen/voxel/npc/mindflayer/male/hand_l.vox new file mode 100644 index 0000000000..969e4c0aa0 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/hand_l.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/hand_r.vox b/assets/voxygen/voxel/npc/mindflayer/male/hand_r.vox new file mode 100644 index 0000000000..b8fe0144d9 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/hand_r.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/head.vox b/assets/voxygen/voxel/npc/mindflayer/male/head.vox new file mode 100644 index 0000000000..4317048c81 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/shoulder_l.vox b/assets/voxygen/voxel/npc/mindflayer/male/shoulder_l.vox new file mode 100644 index 0000000000..4a5fa84422 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/shoulder_l.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/shoulder_r.vox b/assets/voxygen/voxel/npc/mindflayer/male/shoulder_r.vox new file mode 100644 index 0000000000..c13b8b07e3 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/shoulder_r.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/torso_lower.vox b/assets/voxygen/voxel/npc/mindflayer/male/torso_lower.vox new file mode 100644 index 0000000000..0c63b54be9 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/torso_lower.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/male/torso_upper.vox b/assets/voxygen/voxel/npc/mindflayer/male/torso_upper.vox new file mode 100644 index 0000000000..cd0f3175b2 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/male/torso_upper.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/torso_lower.vox b/assets/voxygen/voxel/npc/mindflayer/torso_lower.vox new file mode 100644 index 0000000000..0c63b54be9 Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/torso_lower.vox differ diff --git a/assets/voxygen/voxel/npc/mindflayer/torso_lower2.vox b/assets/voxygen/voxel/npc/mindflayer/torso_lower2.vox new file mode 100644 index 0000000000..7ab02a59dc Binary files /dev/null and b/assets/voxygen/voxel/npc/mindflayer/torso_lower2.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/chest.vox b/assets/voxygen/voxel/npc/salamander/female/chest.vox new file mode 100644 index 0000000000..e1c81d1ddc Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/chest.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/foot_bl.vox b/assets/voxygen/voxel/npc/salamander/female/foot_bl.vox new file mode 100644 index 0000000000..6582ae2415 Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/foot_br.vox b/assets/voxygen/voxel/npc/salamander/female/foot_br.vox new file mode 100644 index 0000000000..8f3939ceaa Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/foot_fl.vox b/assets/voxygen/voxel/npc/salamander/female/foot_fl.vox new file mode 100644 index 0000000000..37808a645c Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/foot_fr.vox b/assets/voxygen/voxel/npc/salamander/female/foot_fr.vox new file mode 100644 index 0000000000..ea64a58974 Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/head_lower.vox b/assets/voxygen/voxel/npc/salamander/female/head_lower.vox new file mode 100644 index 0000000000..7a8246f9f9 Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/head_lower.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/head_upper.vox b/assets/voxygen/voxel/npc/salamander/female/head_upper.vox new file mode 100644 index 0000000000..212f805a48 Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/head_upper.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/jaw.vox b/assets/voxygen/voxel/npc/salamander/female/jaw.vox new file mode 100644 index 0000000000..4ce426bacc Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/tail_front.vox b/assets/voxygen/voxel/npc/salamander/female/tail_front.vox new file mode 100644 index 0000000000..9347254ebf Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/tail_front.vox differ diff --git a/assets/voxygen/voxel/npc/salamander/female/tail_rear.vox b/assets/voxygen/voxel/npc/salamander/female/tail_rear.vox new file mode 100644 index 0000000000..36c8dba5eb Binary files /dev/null and b/assets/voxygen/voxel/npc/salamander/female/tail_rear.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/chest.vox b/assets/voxygen/voxel/npc/sandshark/male/chest.vox new file mode 100644 index 0000000000..b864dd9042 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/chest.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/foot_bl.vox b/assets/voxygen/voxel/npc/sandshark/male/foot_bl.vox new file mode 100644 index 0000000000..0531afefc6 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/foot_br.vox b/assets/voxygen/voxel/npc/sandshark/male/foot_br.vox new file mode 100644 index 0000000000..bc7128ae97 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/foot_fl.vox b/assets/voxygen/voxel/npc/sandshark/male/foot_fl.vox new file mode 100644 index 0000000000..9c44dd141c Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/foot_fr.vox b/assets/voxygen/voxel/npc/sandshark/male/foot_fr.vox new file mode 100644 index 0000000000..06600d2a81 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/head_lower.vox b/assets/voxygen/voxel/npc/sandshark/male/head_lower.vox new file mode 100644 index 0000000000..d064434997 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/head_lower.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/head_upper.vox b/assets/voxygen/voxel/npc/sandshark/male/head_upper.vox new file mode 100644 index 0000000000..cec1379112 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/head_upper.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/jaw.vox b/assets/voxygen/voxel/npc/sandshark/male/jaw.vox new file mode 100644 index 0000000000..528a116110 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/tail_front.vox b/assets/voxygen/voxel/npc/sandshark/male/tail_front.vox new file mode 100644 index 0000000000..f940814aa0 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/tail_front.vox differ diff --git a/assets/voxygen/voxel/npc/sandshark/male/tail_rear.vox b/assets/voxygen/voxel/npc/sandshark/male/tail_rear.vox new file mode 100644 index 0000000000..f8812b8f44 Binary files /dev/null and b/assets/voxygen/voxel/npc/sandshark/male/tail_rear.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/ears.vox b/assets/voxygen/voxel/npc/zebra/male/ears.vox new file mode 100644 index 0000000000..da674c1607 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/ears.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/foot_bl.vox b/assets/voxygen/voxel/npc/zebra/male/foot_bl.vox new file mode 100644 index 0000000000..2c5cd47947 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/foot_bl.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/foot_br.vox b/assets/voxygen/voxel/npc/zebra/male/foot_br.vox new file mode 100644 index 0000000000..b9cbbf1f8a Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/foot_br.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/foot_fl.vox b/assets/voxygen/voxel/npc/zebra/male/foot_fl.vox new file mode 100644 index 0000000000..07b6dce75a Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/foot_fl.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/foot_fr.vox b/assets/voxygen/voxel/npc/zebra/male/foot_fr.vox new file mode 100644 index 0000000000..418c9fa9c7 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/foot_fr.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/head.vox b/assets/voxygen/voxel/npc/zebra/male/head.vox new file mode 100644 index 0000000000..b1eb0bd59e Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/head.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/jaw.vox b/assets/voxygen/voxel/npc/zebra/male/jaw.vox new file mode 100644 index 0000000000..79e90c1cff Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/jaw.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/leg_bl.vox b/assets/voxygen/voxel/npc/zebra/male/leg_bl.vox new file mode 100644 index 0000000000..9f7eda8ee8 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/leg_bl.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/leg_br.vox b/assets/voxygen/voxel/npc/zebra/male/leg_br.vox new file mode 100644 index 0000000000..94da9d22ea Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/leg_br.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/leg_fl.vox b/assets/voxygen/voxel/npc/zebra/male/leg_fl.vox new file mode 100644 index 0000000000..2a7b07b320 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/leg_fl.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/leg_fr.vox b/assets/voxygen/voxel/npc/zebra/male/leg_fr.vox new file mode 100644 index 0000000000..cf13cd308a Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/leg_fr.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/neck.vox b/assets/voxygen/voxel/npc/zebra/male/neck.vox new file mode 100644 index 0000000000..e3717fe0c4 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/neck.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/tail.vox b/assets/voxygen/voxel/npc/zebra/male/tail.vox new file mode 100644 index 0000000000..9647bee577 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/tail.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/torso_back.vox b/assets/voxygen/voxel/npc/zebra/male/torso_back.vox new file mode 100644 index 0000000000..48444c5921 Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/torso_back.vox differ diff --git a/assets/voxygen/voxel/npc/zebra/male/torso_front.vox b/assets/voxygen/voxel/npc/zebra/male/torso_front.vox new file mode 100644 index 0000000000..267c94262b Binary files /dev/null and b/assets/voxygen/voxel/npc/zebra/male/torso_front.vox differ diff --git a/assets/voxygen/voxel/quadruped_low_central_manifest.ron b/assets/voxygen/voxel/quadruped_low_central_manifest.ron index 5df288e77b..e91f3905dd 100644 --- a/assets/voxygen/voxel/quadruped_low_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_central_manifest.ron @@ -121,7 +121,7 @@ central: ("npc.salamander.male.chest"), ), tail_rear: ( - offset: (-3.0, -13.0, -3.0), + offset: (-3.5, -13.0, -3.0), central: ("npc.salamander.male.tail_rear"), ), tail_front: ( @@ -131,28 +131,28 @@ ), (Salamander, Female): ( upper: ( - offset: (-6.5, 0.0, -2.0), - central: ("npc.salamander.male.head_upper"), + offset: (-9.5, 0.0, -2.0), + central: ("npc.salamander.female.head_upper"), ), lower: ( offset: (-4.5, -1.5, -3.0), - central: ("npc.salamander.male.head_lower"), + central: ("npc.salamander.female.head_lower"), ), jaw: ( - offset: (-6.5, 0.0, -3.0), - central: ("npc.salamander.male.jaw"), + offset: (-6.5, 0.0, -2.0), + central: ("npc.salamander.female.jaw"), ), chest: ( - offset: (-6.5, -8.5, -3.0), - central: ("npc.salamander.male.chest"), + offset: (-8.5, -8.5, -3.0), + central: ("npc.salamander.female.chest"), ), tail_rear: ( - offset: (-3.0, -13.0, -3.0), - central: ("npc.salamander.male.tail_rear"), + offset: (-6.5, -13.0, -2.5), + central: ("npc.salamander.female.tail_rear"), ), tail_front: ( - offset: (-4.5, -9.0, -3.0), - central: ("npc.salamander.male.tail_front"), + offset: (-5.5, -8.0, -3.0), + central: ("npc.salamander.female.tail_front"), ), ), (Monitor, Male): ( @@ -468,4 +468,108 @@ central: ("npc.maneater.male.tail_front"), ), ), + (Hakulaq, Male): ( + upper: ( + offset: (-2.5, -8.5, -5.0), + central: ("npc.hakulaq.male.head_upper"), + ), + lower: ( + offset: (-2.5, -3.5, -8.5), + central: ("npc.hakulaq.male.head_lower"), + ), + jaw: ( + offset: (-2.5, 0.0, -2.0), + central: ("npc.hakulaq.male.jaw"), + ), + chest: ( + offset: (-4.5, -8.0, -8.5), + central: ("npc.hakulaq.male.chest"), + ), + tail_rear: ( + offset: (-1.5, -18.0, -2.0), + central: ("npc.hakulaq.male.tail_rear"), + ), + tail_front: ( + offset: (-2.5, -10.0, -4.0), + central: ("npc.hakulaq.male.tail_front"), + ), + ), + (Hakulaq, Female): ( + upper: ( + offset: (-2.5, -8.5, -5.0), + central: ("npc.hakulaq.male.head_upper"), + ), + lower: ( + offset: (-2.5, -3.5, -8.5), + central: ("npc.hakulaq.male.head_lower"), + ), + jaw: ( + offset: (-2.5, 0.0, -2.0), + central: ("npc.hakulaq.male.jaw"), + ), + chest: ( + offset: (-4.5, -8.0, -8.5), + central: ("npc.hakulaq.male.chest"), + ), + tail_rear: ( + offset: (-1.5, -18.0, -2.0), + central: ("npc.hakulaq.male.tail_rear"), + ), + tail_front: ( + offset: (-2.5, -10.0, -4.0), + central: ("npc.hakulaq.male.tail_front"), + ), + ), + (Sandshark, Male): ( + upper: ( + offset: (-5.5, -8.0, -5.0), + central: ("npc.sandshark.male.head_upper"), + ), + lower: ( + offset: (-4.5, -2.5, -6.5), + central: ("npc.sandshark.male.head_lower"), + ), + jaw: ( + offset: (-5.5, 0.0, -2.5), + central: ("npc.sandshark.male.jaw"), + ), + chest: ( + offset: (-9.5, -15.0, -17.0), + central: ("npc.sandshark.male.chest"), + ), + tail_rear: ( + offset: (-1.5, -19.0, -4.5), + central: ("npc.sandshark.male.tail_rear"), + ), + tail_front: ( + offset: (-3.5, -11.0, -4.0), + central: ("npc.sandshark.male.tail_front"), + ), + ), + (Sandshark, Female): ( + upper: ( + offset: (-5.5, -8.0, -5.0), + central: ("npc.sandshark.male.head_upper"), + ), + lower: ( + offset: (-4.5, -2.5, -6.5), + central: ("npc.sandshark.male.head_lower"), + ), + jaw: ( + offset: (-5.5, 0.0, -2.5), + central: ("npc.sandshark.male.jaw"), + ), + chest: ( + offset: (-9.5, -15.0, -17.0), + central: ("npc.sandshark.male.chest"), + ), + tail_rear: ( + offset: (-1.5, -19.0, -4.5), + central: ("npc.sandshark.male.tail_rear"), + ), + tail_front: ( + offset: (-3.5, -11.0, -4.0), + central: ("npc.sandshark.male.tail_front"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron index ce8d8db9ac..f258623544 100644 --- a/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_low_lateral_manifest.ron @@ -92,19 +92,19 @@ (Salamander, Female): ( front_left: ( offset: (-6.0, 0.0, -3.0), - lateral: ("npc.salamander.male.foot_fl"), + lateral: ("npc.salamander.female.foot_fl"), ), front_right: ( offset: (0.0, 0.0, -3.0), - lateral: ("npc.salamander.male.foot_fr"), + lateral: ("npc.salamander.female.foot_fr"), ), back_left: ( - offset: (-7.0, 0.0, -3.0), - lateral: ("npc.salamander.male.foot_bl"), + offset: (-8.0, 0.0, -3.0), + lateral: ("npc.salamander.female.foot_bl"), ), back_right: ( offset: (0.0, 0.0, -3.0), - lateral: ("npc.salamander.male.foot_br"), + lateral: ("npc.salamander.female.foot_br"), ), ), (Monitor, Male): ( @@ -323,4 +323,76 @@ lateral: ("npc.maneater.male.foot_br"), ), ), + (Hakulaq, Male): ( + front_left: ( + offset: (-10.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_fl"), + ), + front_right: ( + offset: (0.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_fr"), + ), + back_left: ( + offset: (-10.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_bl"), + ), + back_right: ( + offset: (0.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_br"), + ), + ), + (Hakulaq, Female): ( + front_left: ( + offset: (-10.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_fl"), + ), + front_right: ( + offset: (0.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_fr"), + ), + back_left: ( + offset: (-10.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_bl"), + ), + back_right: ( + offset: (0.0, 0.0, -9.0), + lateral: ("npc.hakulaq.male.foot_br"), + ), + ), + (Sandshark, Male): ( + front_left: ( + offset: (-17.0, 0.0, -12.0), + lateral: ("npc.sandshark.male.foot_fl"), + ), + front_right: ( + offset: (0.0, 0.0, -12.0), + lateral: ("npc.sandshark.male.foot_fr"), + ), + back_left: ( + offset: (-9.0, 0.0, -6.0), + lateral: ("npc.sandshark.male.foot_bl"), + ), + back_right: ( + offset: (-2.0, 0.0, -6.0), + lateral: ("npc.sandshark.male.foot_br"), + ), + ), + (Sandshark, Female): ( + front_left: ( + offset: (-17.0, 0.0, -12.0), + lateral: ("npc.sandshark.male.foot_fl"), + ), + front_right: ( + offset: (0.0, 0.0, -12.0), + lateral: ("npc.sandshark.male.foot_fr"), + ), + back_left: ( + offset: (-9.0, 0.0, -6.0), + lateral: ("npc.sandshark.male.foot_bl"), + ), + back_right: ( + offset: (-2.0, 0.0, -6.0), + lateral: ("npc.sandshark.male.foot_br"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron index 8fd8e66213..563c3ddf41 100644 --- a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -839,4 +839,364 @@ central: ("npc.roshwalr.male.tail"), ), ), + (Donkey, Male): ( + head: ( + offset: (-4.0, -3.0, 0.0), + central: ("npc.donkey.male.head"), + ), + neck: ( + offset: (-3.0, -4.0, -6.5), + central: ("npc.donkey.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -1.0), + central: ("npc.donkey.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -8.0, -6.5), + central: ("npc.donkey.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -13.0, -5.5), + central: ("npc.donkey.male.torso_back"), + ), + ears: ( + offset: (-5.0, -1.0, 0.0), + central: ("npc.donkey.male.ears"), + ), + tail: ( + offset: (-1.0, -5.0, -12.0), + central: ("npc.donkey.male.tail"), + ), + ), + (Donkey, Female): ( + head: ( + offset: (-4.0, -3.0, 0.0), + central: ("npc.donkey.male.head"), + ), + neck: ( + offset: (-3.0, -4.0, -7.0), + central: ("npc.donkey.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -1.0), + central: ("npc.donkey.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -8.0, -6.5), + central: ("npc.donkey.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -13.0, -5.5), + central: ("npc.donkey.male.torso_back"), + ), + ears: ( + offset: (-5.0, -1.0, 0.0), + central: ("npc.donkey.male.ears"), + ), + tail: ( + offset: (-1.0, -5.0, -12.0), + central: ("npc.donkey.male.tail"), + ), + ), + (Camel, Male): ( + head: ( + offset: (-3.5, -4.0, 0.0), + central: ("npc.camel.male.head"), + ), + neck: ( + offset: (-3.5, -5.5, -8.0), + central: ("npc.camel.male.neck"), + ), + jaw: ( + offset: (-1.5, 0.0, -1.5), + central: ("npc.camel.male.jaw"), + ), + torso_front: ( + offset: (-5.5, -14.0, -9.5), + central: ("npc.camel.male.torso_front"), + ), + torso_back: ( + offset: (-5.5, -15.0, -9.0), + central: ("npc.camel.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.5, -3.0, -14.0), + central: ("npc.camel.male.tail"), + ), + ), + (Camel, Female): ( + head: ( + offset: (-3.5, -4.0, 0.0), + central: ("npc.camel.male.head"), + ), + neck: ( + offset: (-3.5, -5.5, -8.0), + central: ("npc.camel.male.neck"), + ), + jaw: ( + offset: (-1.5, 0.0, -1.5), + central: ("npc.camel.male.jaw"), + ), + torso_front: ( + offset: (-5.5, -14.0, -9.5), + central: ("npc.camel.male.torso_front"), + ), + torso_back: ( + offset: (-5.5, -15.0, -9.0), + central: ("npc.camel.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.5, -3.0, -14.0), + central: ("npc.camel.male.tail"), + ), + ), + (Zebra, Male): ( + head: ( + offset: (-3.0, -3.0, 0.0), + central: ("npc.zebra.male.head"), + ), + neck: ( + offset: (-3.0, -4.5, -7.0), + central: ("npc.zebra.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -1.0), + central: ("npc.zebra.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -10.0, -6.5), + central: ("npc.zebra.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -11.0, -4.5), + central: ("npc.zebra.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("npc.zebra.male.ears"), + ), + tail: ( + offset: (-1.0, -4.0, -12.0), + central: ("npc.zebra.male.tail"), + ), + ), + (Zebra, Female): ( + head: ( + offset: (-3.0, -3.0, 0.0), + central: ("npc.zebra.male.head"), + ), + neck: ( + offset: (-3.0, -4.5, -7.0), + central: ("npc.zebra.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -1.0), + central: ("npc.zebra.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -10.0, -6.5), + central: ("npc.zebra.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -11.0, -4.5), + central: ("npc.zebra.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("npc.zebra.male.ears"), + ), + tail: ( + offset: (-1.0, -4.0, -12.0), + central: ("npc.zebra.male.tail"), + ), + ), + (Antelope, Male): ( + head: ( + offset: (-6.0, -7.0, 0.0), + central: ("npc.antelope.male.head"), + ), + neck: ( + offset: (-3.0, -3.5, -5.0), + central: ("npc.antelope.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -0.5), + central: ("npc.antelope.male.jaw"), + ), + torso_front: ( + offset: (-4.0, -8.0, -3.5), + central: ("npc.antelope.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -11.0, -3.5), + central: ("npc.antelope.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -3.0, -6.0), + central: ("npc.antelope.male.tail"), + ), + ), + (Antelope, Female): ( + head: ( + offset: (-6.0, -7.0, 0.0), + central: ("npc.antelope.male.head"), + ), + neck: ( + offset: (-3.0, -3.5, -5.0), + central: ("npc.antelope.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -0.5), + central: ("npc.antelope.male.jaw"), + ), + torso_front: ( + offset: (-4.0, -8.0, -3.5), + central: ("npc.antelope.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -11.0, -3.5), + central: ("npc.antelope.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -3.0, -6.0), + central: ("npc.antelope.male.tail"), + ), + ), + (Kelpie, Male): ( + head: ( + offset: (-4.0, -4.0, -8.5), + central: ("npc.kelpie.male.head"), + ), + neck: ( + offset: (-4.0, -4.5, -7.5), + central: ("npc.kelpie.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -1.5), + central: ("npc.kelpie.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -10.0, -6.5), + central: ("npc.kelpie.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -10.0, -4.0), + central: ("npc.kelpie.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, 0.0), + central: ("npc.kelpie.male.ears"), + ), + tail: ( + offset: (-1.0, -6.0, -18.0), + central: ("npc.kelpie.male.tail"), + ), + ), + (Kelpie, Female): ( + head: ( + offset: (-4.0, -4.0, -8.5), + central: ("npc.kelpie.male.head"), + ), + neck: ( + offset: (-4.0, -4.5, -7.5), + central: ("npc.kelpie.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -1.5), + central: ("npc.kelpie.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -10.0, -6.5), + central: ("npc.kelpie.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -10.0, -4.0), + central: ("npc.kelpie.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, 0.0), + central: ("npc.kelpie.male.ears"), + ), + tail: ( + offset: (-1.0, -6.0, -18.0), + central: ("npc.kelpie.male.tail"), + ), + ), + (Horse, Male): ( + head: ( + offset: (-3.0, -6.0, 0.0), + central: ("npc.horse.male.head"), + ), + neck: ( + offset: (-3.0, -6.5, -6.5), + central: ("npc.horse.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -2.0), + central: ("npc.horse.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -9.0, -7.0), + central: ("npc.horse.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -10.0, -4.5), + central: ("npc.horse.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, 0.0), + central: ("npc.horse.male.ears"), + ), + tail: ( + offset: (-2.0, -10.0, -13.0), + central: ("npc.horse.male.tail"), + ), + ), + (Horse, Female): ( + head: ( + offset: (-3.0, -6.0, 0.0), + central: ("npc.horse.male.head"), + ), + neck: ( + offset: (-3.0, -6.5, -6.5), + central: ("npc.horse.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -2.0), + central: ("npc.horse.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -9.0, -7.0), + central: ("npc.horse.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -10.0, -4.5), + central: ("npc.horse.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, 0.0), + central: ("npc.horse.male.ears"), + ), + tail: ( + offset: (-2.0, -10.0, -13.0), + central: ("npc.horse.male.tail"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron index 429aa3fbd5..a999b509f4 100644 --- a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -951,4 +951,412 @@ lateral: ("npc.roshwalr.male.foot_br"), ), ), + (Donkey, Male): ( + leg_fl: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.donkey.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.donkey.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.5, -3.0, -4.5), + lateral: ("npc.donkey.male.leg_bl"), + ), + leg_br: ( + offset: (-2.5, -3.0, -4.5), + lateral: ("npc.donkey.male.leg_br"), + ), + foot_fl: ( + offset: (-2.0, -2.5, -8.0), + lateral: ("npc.donkey.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.0, -2.5, -8.0), + lateral: ("npc.donkey.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.0, -3.0, -8.0), + lateral: ("npc.donkey.male.foot_bl"), + ), + foot_br: ( + offset: (-2.0, -3.0, -8.0), + lateral: ("npc.donkey.male.foot_br"), + ), + ), + (Donkey, Female): ( + leg_fl: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.donkey.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.donkey.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.5, -3.0, -4.5), + lateral: ("npc.donkey.male.leg_bl"), + ), + leg_br: ( + offset: (-2.5, -3.0, -4.5), + lateral: ("npc.donkey.male.leg_br"), + ), + foot_fl: ( + offset: (-2.0, -2.5, -8.0), + lateral: ("npc.donkey.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.0, -2.5, -8.0), + lateral: ("npc.donkey.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.0, -3.0, -8.0), + lateral: ("npc.donkey.male.foot_bl"), + ), + foot_br: ( + offset: (-2.0, -3.0, -8.0), + lateral: ("npc.donkey.male.foot_br"), + ), + ), + (Camel, Male): ( + leg_fl: ( + offset: (-2.5, -3.5, -7.0), + lateral: ("npc.camel.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.5, -3.5, -7.0), + lateral: ("npc.camel.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.5, -3.5, -8.0), + lateral: ("npc.camel.male.leg_bl"), + ), + leg_br: ( + offset: (-2.5, -3.5, -8.0), + lateral: ("npc.camel.male.leg_br"), + ), + foot_fl: ( + offset: (-2.5, -2.5, -9.0), + lateral: ("npc.camel.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.5, -2.5, -9.0), + lateral: ("npc.camel.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.5, -3.0, -8.0), + lateral: ("npc.camel.male.foot_bl"), + ), + foot_br: ( + offset: (-2.5, -3.0, -8.0), + lateral: ("npc.camel.male.foot_br"), + ), + ), + (Camel, Female): ( + leg_fl: ( + offset: (-2.5, -3.5, -7.0), + lateral: ("npc.camel.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.5, -3.5, -7.0), + lateral: ("npc.camel.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.5, -3.5, -8.0), + lateral: ("npc.camel.male.leg_bl"), + ), + leg_br: ( + offset: (-2.5, -3.5, -8.0), + lateral: ("npc.camel.male.leg_br"), + ), + foot_fl: ( + offset: (-2.5, -2.5, -9.0), + lateral: ("npc.camel.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.5, -2.5, -9.0), + lateral: ("npc.camel.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.5, -3.0, -8.0), + lateral: ("npc.camel.male.foot_bl"), + ), + foot_br: ( + offset: (-2.5, -3.0, -8.0), + lateral: ("npc.camel.male.foot_br"), + ), + ), + (Zebra, Male): ( + leg_fl: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.zebra.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.zebra.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.zebra.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.zebra.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.zebra.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.zebra.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.zebra.male.foot_bl"), + ), + foot_br: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.zebra.male.foot_br"), + ), + ), + (Zebra, Female): ( + leg_fl: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.zebra.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.zebra.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.zebra.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.zebra.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.zebra.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.zebra.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.zebra.male.foot_bl"), + ), + foot_br: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.zebra.male.foot_br"), + ), + ), + (Antelope, Male): ( + leg_fl: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.antelope.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.antelope.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.antelope.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.antelope.male.leg_br"), + ), + foot_fl: ( + offset: (-1.0, -1.5, -8.0), + lateral: ("npc.antelope.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.0, -1.5, -8.0), + lateral: ("npc.antelope.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.0, -1.0, -7.0), + lateral: ("npc.antelope.male.foot_bl"), + ), + foot_br: ( + offset: (-1.0, -1.0, -7.0), + lateral: ("npc.antelope.male.foot_br"), + ), + ), + (Antelope, Female): ( + leg_fl: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.antelope.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.antelope.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.antelope.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.antelope.male.leg_br"), + ), + foot_fl: ( + offset: (-1.0, -1.5, -8.0), + lateral: ("npc.antelope.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.0, -1.5, -8.0), + lateral: ("npc.antelope.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.0, -1.0, -7.0), + lateral: ("npc.antelope.male.foot_bl"), + ), + foot_br: ( + offset: (-1.0, -1.0, -7.0), + lateral: ("npc.antelope.male.foot_br"), + ), + ), + (Kelpie, Male): ( + leg_fl: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.kelpie.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.kelpie.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.kelpie.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.kelpie.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.kelpie.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.kelpie.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.kelpie.male.foot_bl"), + ), + foot_br: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.kelpie.male.foot_br"), + ), + ), + (Kelpie, Female): ( + leg_fl: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.kelpie.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.kelpie.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.kelpie.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.kelpie.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.kelpie.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.kelpie.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.kelpie.male.foot_bl"), + ), + foot_br: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.kelpie.male.foot_br"), + ), + ), + (Horse, Male): ( + leg_fl: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.horse.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.horse.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.horse.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.horse.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.horse.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.horse.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -1.5, -9.0), + lateral: ("npc.horse.male.foot_bl"), + ), + foot_br: ( + offset: (-1.5, -1.5, -9.0), + lateral: ("npc.horse.male.foot_br"), + ), + ), + (Horse, Female): ( + leg_fl: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.horse.male.leg_fl"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.horse.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.horse.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -3.0, -4.5), + lateral: ("npc.horse.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.horse.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.horse.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -1.5, -9.0), + lateral: ("npc.horse.male.foot_bl"), + ), + foot_br: ( + offset: (-1.5, -1.5, -9.0), + lateral: ("npc.horse.male.foot_br"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index 66e16a7231..d1a30a5791 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -686,4 +686,32 @@ central: ("npc.beaver.male.tail"), ), ), + (Hare, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.hare.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -3.0), + central: ("npc.hare.male.chest"), + ), + tail: ( + offset: (-1.5, -11.0, -2.0), + central: ("npc.hare.male.tail"), + ), + ), + (Hare, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.hare.female.head"), + ), + chest: ( + offset: (-3.5, -6.5, -4.0), + central: ("npc.hare.female.chest"), + ), + tail: ( + offset: (-2.5, -5.0, -3.0), + central: ("npc.hare.female.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 1c91b5b8d1..9ba07314aa 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -881,4 +881,40 @@ lateral: ("npc.beaver.male.foot_br"), ), ), + (Hare, Male): ( + left_front: ( + offset: (-0.5, -0.0, -2.0), + lateral: ("npc.hare.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.0, -2.0), + lateral: ("npc.hare.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -4.0, -5.0), + lateral: ("npc.hare.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -4.0, -5.0), + lateral: ("npc.hare.male.foot_br"), + ), + ), + (Hare, Female): ( + left_front: ( + offset: (-1.0, -0.0, -2.0), + lateral: ("npc.hare.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -0.0, -2.0), + lateral: ("npc.hare.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.5, -4.0), + lateral: ("npc.hare.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.5, -4.0), + lateral: ("npc.hare.female.foot_br"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/weapon/staff/firestaff_mindflayer.vox b/assets/voxygen/voxel/weapon/staff/firestaff_mindflayer.vox new file mode 100644 index 0000000000..64054e38ef Binary files /dev/null and b/assets/voxygen/voxel/weapon/staff/firestaff_mindflayer.vox differ diff --git a/assets/voxygen/voxel/weapon/staff/orc-0.vox b/assets/voxygen/voxel/weapon/staff/orc-0.vox deleted file mode 100644 index 9abf8eb2c8..0000000000 Binary files a/assets/voxygen/voxel/weapon/staff/orc-0.vox and /dev/null differ diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index d0cd1563f9..3d4fa82a90 100644 --- a/common/src/comp/agent.rs +++ b/common/src/comp/agent.rs @@ -97,6 +97,7 @@ impl<'a> From<&'a Body> for Psyche { quadruped_small::Species::Rabbit => 0.1, quadruped_small::Species::Truffler => 0.8, quadruped_small::Species::Frog => 0.6, + quadruped_small::Species::Hare => 0.2, _ => 1.0, }, Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species { @@ -106,18 +107,19 @@ impl<'a> From<&'a Body> for Psyche { quadruped_medium::Species::Catoblepas => 0.8, quadruped_medium::Species::Deer => 0.6, quadruped_medium::Species::Hirdrasil => 0.7, + quadruped_medium::Species::Donkey => 0.7, + quadruped_medium::Species::Camel => 0.7, + quadruped_medium::Species::Zebra => 0.7, + quadruped_medium::Species::Antelope => 0.6, + quadruped_medium::Species::Horse => 0.8, _ => 1.0, }, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { - quadruped_low::Species::Crocodile => 1.0, - quadruped_low::Species::Alligator => 1.0, quadruped_low::Species::Salamander => 0.8, quadruped_low::Species::Monitor => 0.9, quadruped_low::Species::Asp => 0.9, - quadruped_low::Species::Tortoise => 1.0, - quadruped_low::Species::Rocksnapper => 1.0, quadruped_low::Species::Pangolin => 0.6, - quadruped_low::Species::Maneater => 1.0, + _ => 1.0, }, Body::BirdMedium(_) => 1.0, Body::BirdSmall(_) => 0.4, diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 31c77ecc35..0ec5ea5b3d 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -221,7 +221,7 @@ impl Body { quadruped_low::Species::Maneater => 4.0, _ => 1.3, }, - Body::Theropod(_) => 0.7, + Body::Theropod(_) => 3.0, Body::BirdMedium(body) => match body.species { bird_medium::Species::Cockatrice => 1.8, _ => 1.1, @@ -230,7 +230,12 @@ impl Body { Body::Dragon(_) => 16.0, Body::BirdSmall(_) => 1.1, Body::FishSmall(_) => 0.9, - Body::BipedLarge(_) => 4.6, + Body::BipedLarge(body) => match body.species { + biped_large::Species::Slysaurok => 2.3, + biped_large::Species::Occultsaurok => 2.8, + biped_large::Species::Mightysaurok => 2.3, + _ => 4.6, + }, Body::Golem(_) => 5.8, Body::Object(_) => 1.0, } @@ -274,6 +279,12 @@ impl Body { quadruped_medium::Species::Deer => 300, quadruped_medium::Species::Hirdrasil => 500, quadruped_medium::Species::Roshwalr => 600, + quadruped_medium::Species::Donkey => 500, + quadruped_medium::Species::Camel => 600, + quadruped_medium::Species::Zebra => 500, + quadruped_medium::Species::Antelope => 300, + quadruped_medium::Species::Kelpie => 600, + quadruped_medium::Species::Horse => 600, _ => 400, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -296,11 +307,12 @@ impl Body { biped_large::Species::Wendigo => 2000, biped_large::Species::Troll => 1500, biped_large::Species::Dullahan => 2000, + biped_large::Species::Mindflayer => 1500, _ => 1000, }, Body::Object(_) => 10000, Body::Golem(_) => 2740, - Body::Theropod(_) => 50, + Body::Theropod(_) => 1000, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 600, quadruped_low::Species::Alligator => 600, @@ -311,6 +323,8 @@ impl Body { quadruped_low::Species::Rocksnapper => 1000, quadruped_low::Species::Pangolin => 80, quadruped_low::Species::Maneater => 400, + quadruped_low::Species::Sandshark => 600, + quadruped_low::Species::Hakulaq => 400, _ => 200, }, } @@ -341,9 +355,15 @@ impl Body { quadruped_medium::Species::Mouflon => 30, quadruped_medium::Species::Catoblepas => 50, quadruped_medium::Species::Bonerattler => 30, - quadruped_medium::Species::Deer => 30, + quadruped_medium::Species::Deer => 20, quadruped_medium::Species::Hirdrasil => 30, quadruped_medium::Species::Roshwalr => 40, + quadruped_medium::Species::Donkey => 30, + quadruped_medium::Species::Camel => 30, + quadruped_medium::Species::Zebra => 30, + quadruped_medium::Species::Antelope => 20, + quadruped_medium::Species::Kelpie => 30, + quadruped_medium::Species::Horse => 30, _ => 20, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -366,6 +386,7 @@ impl Body { biped_large::Species::Wendigo => 80, biped_large::Species::Troll => 60, biped_large::Species::Dullahan => 120, + biped_large::Species::Mindflayer => 80, _ => 100, }, Body::Object(_) => 10, @@ -381,6 +402,8 @@ impl Body { quadruped_low::Species::Rocksnapper => 50, quadruped_low::Species::Pangolin => 10, quadruped_low::Species::Maneater => 30, + quadruped_low::Species::Sandshark => 40, + quadruped_low::Species::Hakulaq => 10, _ => 20, }, } @@ -411,9 +434,15 @@ impl Body { quadruped_medium::Species::Mouflon => 7, quadruped_medium::Species::Catoblepas => 10, quadruped_medium::Species::Bonerattler => 10, - quadruped_medium::Species::Deer => 7, - quadruped_medium::Species::Hirdrasil => 10, + quadruped_medium::Species::Deer => 6, + quadruped_medium::Species::Hirdrasil => 9, quadruped_medium::Species::Roshwalr => 10, + quadruped_medium::Species::Donkey => 8, + quadruped_medium::Species::Camel => 8, + quadruped_medium::Species::Zebra => 8, + quadruped_medium::Species::Antelope => 6, + quadruped_medium::Species::Kelpie => 8, + quadruped_medium::Species::Horse => 8, _ => 6, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -434,6 +463,7 @@ impl Body { biped_large::Species::Wendigo => 70, biped_large::Species::Troll => 50, biped_large::Species::Dullahan => 100, + biped_large::Species::Mindflayer => 80, _ => 100, }, Body::Object(_) => 1, @@ -449,6 +479,8 @@ impl Body { quadruped_low::Species::Rocksnapper => 12, quadruped_low::Species::Pangolin => 3, quadruped_low::Species::Maneater => 14, + quadruped_low::Species::Sandshark => 12, + quadruped_low::Species::Hakulaq => 10, _ => 10, }, } @@ -493,6 +525,12 @@ impl Body { quadruped_medium::Species::Deer => 30, quadruped_medium::Species::Hirdrasil => 50, quadruped_medium::Species::Roshwalr => 60, + quadruped_medium::Species::Donkey => 40, + quadruped_medium::Species::Camel => 40, + quadruped_medium::Species::Zebra => 40, + quadruped_medium::Species::Antelope => 6, + quadruped_medium::Species::Kelpie => 60, + quadruped_medium::Species::Horse => 50, _ => 40, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -515,6 +553,7 @@ impl Body { biped_large::Species::Wendigo => 60, biped_large::Species::Troll => 60, biped_large::Species::Dullahan => 80, + biped_large::Species::Mindflayer => 50, _ => 60, }, Body::Object(_) => 0, @@ -530,6 +569,8 @@ impl Body { quadruped_low::Species::Rocksnapper => 80, quadruped_low::Species::Pangolin => 10, quadruped_low::Species::Maneater => 40, + quadruped_low::Species::Sandshark => 60, + quadruped_low::Species::Hakulaq => 40, _ => 20, }, } diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index 1dab709ab6..ab751e8cf9 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -43,6 +43,7 @@ make_case_elim!( Occultsaurok = 6, Mightysaurok = 7, Slysaurok = 8, + Mindflayer = 9, } ); @@ -60,6 +61,7 @@ pub struct AllSpecies { pub saurok_occult: SpeciesMeta, pub saurok_mighty: SpeciesMeta, pub saurok_sly: SpeciesMeta, + pub mindflayer: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -77,11 +79,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Occultsaurok => &self.saurok_occult, Species::Mightysaurok => &self.saurok_mighty, Species::Slysaurok => &self.saurok_sly, + Species::Mindflayer => &self.mindflayer, } } } -pub const ALL_SPECIES: [Species; 9] = [ +pub const ALL_SPECIES: [Species; 10] = [ Species::Ogre, Species::Cyclops, Species::Wendigo, @@ -91,6 +94,7 @@ pub const ALL_SPECIES: [Species; 9] = [ Species::Occultsaurok, Species::Mightysaurok, Species::Slysaurok, + Species::Mindflayer, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_low.rs b/common/src/comp/body/quadruped_low.rs index 16aee7611c..126f5d6c30 100644 --- a/common/src/comp/body/quadruped_low.rs +++ b/common/src/comp/body/quadruped_low.rs @@ -43,6 +43,8 @@ make_case_elim!( Rocksnapper = 6, Pangolin = 7, Maneater = 8, + Sandshark = 9, + Hakulaq = 10, } ); @@ -60,6 +62,8 @@ pub struct AllSpecies { pub rocksnapper: SpeciesMeta, pub pangolin: SpeciesMeta, pub maneater: SpeciesMeta, + pub sandshark: SpeciesMeta, + pub hakulaq: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -77,11 +81,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Rocksnapper => &self.rocksnapper, Species::Pangolin => &self.pangolin, Species::Maneater => &self.maneater, + Species::Sandshark => &self.sandshark, + Species::Hakulaq => &self.hakulaq, } } } -pub const ALL_SPECIES: [Species; 9] = [ +pub const ALL_SPECIES: [Species; 11] = [ Species::Crocodile, Species::Alligator, Species::Salamander, @@ -91,6 +97,8 @@ pub const ALL_SPECIES: [Species; 9] = [ Species::Rocksnapper, Species::Pangolin, Species::Maneater, + Species::Sandshark, + Species::Hakulaq, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs index 707f2c53da..c657d289ce 100644 --- a/common/src/comp/body/quadruped_medium.rs +++ b/common/src/comp/body/quadruped_medium.rs @@ -46,6 +46,12 @@ pub enum Species { Deer = 13, Hirdrasil = 14, Roshwalr = 15, + Donkey = 16, + Camel = 17, + Zebra = 18, + Antelope = 19, + Kelpie = 20, + Horse = 21, } /// Data representing per-species generic data. @@ -67,6 +73,12 @@ pub struct AllSpecies { pub deer: SpeciesMeta, pub hirdrasil: SpeciesMeta, pub roshwalr: SpeciesMeta, + pub donkey: SpeciesMeta, + pub camel: SpeciesMeta, + pub zebra: SpeciesMeta, + pub antelope: SpeciesMeta, + pub kelpie: SpeciesMeta, + pub horse: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -89,11 +101,17 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Deer => &self.deer, Species::Hirdrasil => &self.hirdrasil, Species::Roshwalr => &self.roshwalr, + Species::Donkey => &self.donkey, + Species::Camel => &self.camel, + Species::Zebra => &self.zebra, + Species::Antelope => &self.antelope, + Species::Kelpie => &self.kelpie, + Species::Horse => &self.horse, } } } -pub const ALL_SPECIES: [Species; 14] = [ +pub const ALL_SPECIES: [Species; 20] = [ Species::Grolgar, Species::Saber, Species::Tiger, @@ -108,6 +126,12 @@ pub const ALL_SPECIES: [Species; 14] = [ Species::Deer, Species::Hirdrasil, Species::Roshwalr, + Species::Donkey, + Species::Camel, + Species::Zebra, + Species::Antelope, + Species::Kelpie, + Species::Horse, ]; 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 50cb6ae531..90505a7d27 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -56,6 +56,7 @@ pub enum Species { Fungome = 21, Porcupine = 22, Beaver = 23, + Hare = 24, } /// Data representing per-species generic data. @@ -87,6 +88,7 @@ pub struct AllSpecies { pub fungome: SpeciesMeta, pub porcupine: SpeciesMeta, pub beaver: SpeciesMeta, + pub hare: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -119,11 +121,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Fungome => &self.fungome, Species::Porcupine => &self.porcupine, Species::Beaver => &self.beaver, + Species::Hare => &self.hare, } } } -pub const ALL_SPECIES: [Species; 24] = [ +pub const ALL_SPECIES: [Species; 25] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -148,6 +151,7 @@ pub const ALL_SPECIES: [Species; 24] = [ Species::Fungome, Species::Porcupine, Species::Beaver, + Species::Hare, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/loadout_builder.rs b/common/src/loadout_builder.rs index f0be91a52d..0ef9f7ca36 100644 --- a/common/src/loadout_builder.rs +++ b/common/src/loadout_builder.rs @@ -139,6 +139,11 @@ impl LoadoutBuilder { "common.items.npc_weapons.sword.dullahan_sword", )); }, + (biped_large::Species::Mindflayer, _) => { + main_tool = Some(Item::new_from_asset_expect( + "common.items.npc_weapons.staff.mindflayer_staff", + )); + }, }, Body::Humanoid(_) => { if is_giant { diff --git a/voxygen/src/anim/src/biped_large/beam.rs b/voxygen/src/anim/src/biped_large/beam.rs index 38319a44bb..0fa4a173f3 100644 --- a/voxygen/src/anim/src/biped_large/beam.rs +++ b/voxygen/src/anim/src/biped_large/beam.rs @@ -61,7 +61,7 @@ impl Animation for BeamAnimation { s_a.stc.2 + (movement1 * 16.0) * (1.0 - movement3), ); next.control.orientation = - Quaternion::rotation_x(s_a.stc.3 + (movement1 * -1.2) * (1.0 - movement3)) + Quaternion::rotation_x(s_a.stc.3 + (movement1 * -0.8) * (1.0 - movement3)) * Quaternion::rotation_y( s_a.stc.4 + (movement1 * -1.4 + (movement2 * 16.0).sin() * 0.07) @@ -75,7 +75,7 @@ impl Animation for BeamAnimation { next.hand_l.position = Vec3::new( 0.0 + (movement1 * -1.0 + (movement2 * 8.0).sin() * 3.5) * (1.0 - movement3), - 0.0 + (movement1 * -5.0 + 0.0 + (movement1 * -8.0 + (movement2 * 8.0).sin() * -2.0 + (movement2 * 16.0).sin() * -1.5) * (1.0 - movement3), @@ -90,6 +90,18 @@ impl Animation for BeamAnimation { ) * Quaternion::rotation_z((movement1 * -2.8) * (1.0 - movement3)); + next.shoulder_l.orientation = Quaternion::rotation_z(0.2) + * Quaternion::rotation_x( + (movement1 * 0.6 + (movement2 * 8.0 + PI / 2.0).sin() * -0.1) + * (1.0 - movement3), + ); + + next.shoulder_r.orientation = Quaternion::rotation_z(-0.2) + * Quaternion::rotation_x( + (movement1 * 1.1 + (movement2 * 8.0 + PI / 2.0).sin() * -0.1) + * (1.0 - movement3), + ); + if velocity < 0.5 { next.head.orientation = Quaternion::rotation_z(movement1 * -0.5 + (movement2 * 16.0).sin() * 0.05); diff --git a/voxygen/src/anim/src/biped_large/equip.rs b/voxygen/src/anim/src/biped_large/equip.rs index dd063cb044..8dbd2bac71 100644 --- a/voxygen/src/anim/src/biped_large/equip.rs +++ b/voxygen/src/anim/src/biped_large/equip.rs @@ -54,8 +54,8 @@ impl Animation for EquipAnimation { Quaternion::rotation_y(2.2) * Quaternion::rotation_z(-1.57); }, Some(ToolKind::Bow) => { - next.hand_l.position = Vec3::new(-3.0, -5.0, 9.0); - next.hand_r.position = Vec3::new(-1.75, -4.5, 7.0); + next.hand_l.position = Vec3::new(-9.0, -5.0, -8.0); + next.hand_r.position = Vec3::new(-7.75, -4.5, -10.0); }, _ => {}, } diff --git a/voxygen/src/anim/src/biped_large/idle.rs b/voxygen/src/anim/src/biped_large/idle.rs index a65afb011c..b8421f944c 100644 --- a/voxygen/src/anim/src/biped_large/idle.rs +++ b/voxygen/src/anim/src/biped_large/idle.rs @@ -63,6 +63,7 @@ impl Animation for IdleAnimation { next.shoulder_r.scale = Vec3::one() * 1.1; next.hand_l.scale = Vec3::one() * 1.04; next.hand_r.scale = Vec3::one() * 1.04; + next.lower_torso.scale = Vec3::one() * 1.02; next.hold.scale = Vec3::one() * 0.0; next.torso.scale = Vec3::one() / 8.0; @@ -132,6 +133,16 @@ impl Animation for IdleAnimation { next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; + if s_a.float { + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + slower * 1.0 + 4.0, + ); + next.foot_l.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + next.foot_r.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + } + next } } diff --git a/voxygen/src/anim/src/biped_large/mod.rs b/voxygen/src/anim/src/biped_large/mod.rs index b99da516b6..a097139895 100644 --- a/voxygen/src/anim/src/biped_large/mod.rs +++ b/voxygen/src/anim/src/biped_large/mod.rs @@ -134,6 +134,7 @@ pub struct SkeletonAttr { bhr: (f32, f32, f32, f32, f32, f32), bc: (f32, f32, f32, f32, f32, f32), beast: bool, + float: bool, } impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { @@ -172,6 +173,7 @@ impl Default for SkeletonAttr { bhr: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), bc: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), beast: false, + float: false, } } } @@ -191,6 +193,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (6.0, 3.5), (Mightysaurok, _) => (6.0, 3.5), (Slysaurok, _) => (6.0, 3.5), + (Mindflayer, _) => (5.0, 5.5), }, jaw: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0), @@ -202,6 +205,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (1.0, -2.5), (Mightysaurok, _) => (1.0, -2.5), (Slysaurok, _) => (1.0, -2.5), + (Mindflayer, _) => (0.0, 0.0), }, upper_torso: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 28.0), @@ -214,6 +218,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (3.0, 23.0), (Mightysaurok, _) => (3.0, 23.0), (Slysaurok, _) => (3.0, 23.0), + (Mindflayer, _) => (0.0, 30.5), }, lower_torso: match (body.species, body.body_type) { (Ogre, Male) => (1.0, -7.0), @@ -226,17 +231,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (0.0, -6.0), (Mightysaurok, _) => (0.0, -6.0), (Slysaurok, _) => (0.0, -6.0), + (Mindflayer, _) => (3.5, -19.5), }, tail: match (body.species, body.body_type) { - (Ogre, _) => (0.0, 0.0), - (Cyclops, _) => (0.0, 0.0), - (Wendigo, _) => (0.0, 0.0), - (Troll, _) => (0.0, 0.0), - (Dullahan, _) => (0.0, 0.0), (Werewolf, _) => (-5.5, -2.0), (Occultsaurok, _) => (-4.5, -6.0), (Mightysaurok, _) => (-4.5, -6.0), (Slysaurok, _) => (-4.5, -6.0), + (_, _) => (0.0, 0.0), }, shoulder: match (body.species, body.body_type) { (Ogre, Male) => (12.0, 0.5, 0.0), @@ -249,6 +251,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (7.5, 1.0, -1.5), (Mightysaurok, _) => (7.5, 1.0, -1.5), (Slysaurok, _) => (7.5, 1.0, -1.5), + (Mindflayer, _) => (8.0, 0.5, -1.0), }, hand: match (body.species, body.body_type) { (Ogre, Male) => (14.5, 0.0, -2.0), @@ -261,6 +264,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (8.0, 1.5, -5.5), (Mightysaurok, _) => (8.0, 1.5, -5.5), (Slysaurok, _) => (8.0, 1.5, -5.5), + (Mindflayer, _) => (9.0, 0.5, -4.5), }, leg: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 0.0, -4.0), @@ -273,6 +277,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (3.0, 0.5, -6.0), (Mightysaurok, _) => (3.0, 0.5, -6.0), (Slysaurok, _) => (3.0, 0.5, -6.0), + (Mindflayer, _) => (6.0, -2.0, 6.5), }, foot: match (body.species, body.body_type) { (Ogre, Male) => (4.0, 1.0, -13.5), @@ -285,6 +290,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => (3.5, 2.0, -12.0), (Mightysaurok, _) => (3.5, 2.0, -12.0), (Slysaurok, _) => (3.5, 2.0, -12.0), + (Mindflayer, _) => (4.5, 1.5, -7.0), }, shl: match (body.species, body.body_type) { (Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0), @@ -322,16 +328,19 @@ impl<'a> From<&'a Body> for SkeletonAttr { sthl: match (body.species, body.body_type) { (Ogre, Female) => (-1.0, -5.0, 12.0, 1.27, 0.0, 0.0), (Occultsaurok, _) => (-1.0, -7.0, 12.0, 1.27, 0.0, 0.0), + (Mindflayer, _) => (1.0, -10.5, 7.0, 1.27, 0.0, 0.0), (_, _) => (11.0, 5.0, -4.0, 1.27, 0.0, 0.0), }, sthr: match (body.species, body.body_type) { (Ogre, Female) => (5.0, -3.5, 18.0, 1.57, 0.8, 0.0), (Occultsaurok, _) => (7.0, -3.5, 18.0, 1.57, 0.8, 0.0), + (Mindflayer, _) => (7.0, -9.0, 13.0, 1.57, 0.8, 0.0), (_, _) => (17.0, 7.5, 2.0, 1.57, 0.8, 0.0), }, stc: match (body.species, body.body_type) { (Ogre, Female) => (-10.0, 7.0, -23.0, -0.3, 0.15, 0.0), (Occultsaurok, _) => (-10.0, 7.0, -22.0, -0.3, 0.15, 0.0), + (Mindflayer, _) => (-10.0, 12.5, -22.0, -0.3, 0.15, 0.0), (_, _) => (-18.0, 1.0, -2.0, -0.3, 0.15, 0.0), }, bhl: match (body.species, body.body_type) { @@ -347,6 +356,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (_, _) => (-7.0, 3.0, -8.0, 0.0, 0.0, 0.0), }, beast: matches!((body.species, body.body_type), (Werewolf, _)), + float: matches!((body.species, body.body_type), (Mindflayer, _)), } } } diff --git a/voxygen/src/anim/src/biped_large/run.rs b/voxygen/src/anim/src/biped_large/run.rs index 8ca0796598..f49e3f61e6 100644 --- a/voxygen/src/anim/src/biped_large/run.rs +++ b/voxygen/src/anim/src/biped_large/run.rs @@ -128,6 +128,8 @@ impl Animation for RunAnimation { (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.57 + canceler * 0.05 + shift4) .sin(); //0.7 // + let _slower = (anim_time as f32 * 1.0 + PI).sin(); + let slow = (anim_time as f32 * 3.5 + PI).sin(); let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -387,6 +389,28 @@ impl Animation for RunAnimation { next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; next.torso.orientation = Quaternion::rotation_x(-0.25); } + + if s_a.float { + next.head.orientation = Quaternion::rotation_x(slow * 0.1); + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + slow * 2.0 + 4.0); + next.upper_torso.orientation = Quaternion::rotation_x(-0.1 + slow * 0.05); + next.lower_torso.orientation = + Quaternion::rotation_z(short * 0.05) * Quaternion::rotation_x(0.14); + next.shoulder_l.position = Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_l.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.shoulder_r.position = Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_r.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2); + next.hand_l.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2); + next.hand_r.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); + next.foot_l.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); + next.foot_r.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + } + next } } diff --git a/voxygen/src/anim/src/biped_large/shoot.rs b/voxygen/src/anim/src/biped_large/shoot.rs index 714f82bc82..19b63eadc4 100644 --- a/voxygen/src/anim/src/biped_large/shoot.rs +++ b/voxygen/src/anim/src/biped_large/shoot.rs @@ -2,390 +2,185 @@ use super::{ super::{vek::*, Animation}, BipedLargeSkeleton, SkeletonAttr, }; -use common::comp::item::ToolKind; +use common::{comp::item::ToolKind, states::utils::StageSection}; +use std::f32::consts::PI; pub struct ShootAnimation; +type ShootAnimationDependency = ( + Option, + Option, + f32, + Vec3, + Vec3, + f64, + Option, +); impl Animation for ShootAnimation { - type Dependency = (Option, Option, f32, f64); + type Dependency = ShootAnimationDependency; type Skeleton = BipedLargeSkeleton; #[cfg(feature = "use-dyn-lib")] const UPDATE_FN: &'static [u8] = b"biped_large_shoot\0"; #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_shoot")] - /* fn update_skeleton_inner( - skeleton: &Self::Skeleton, - (active_tool_kind, _second_tool_kind, velocity, global_time): Self::Dependency, - anim_time: f64, - _rate: &mut f32, - s_a: &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 slower = (anim_time as f32 * 1.0 + PI).sin(); - let slow = (anim_time as f32 * 3.5 + PI).sin(); - - let exp = ((anim_time as f32).powf(0.3 as f32)).min(1.2); - - let tailmove = Vec2::new( - ((global_time + anim_time) as f32 / 2.0) - .floor() - .mul(7331.0) - .sin() - * 0.25, - ((global_time + anim_time) as f32 / 2.0) - .floor() - .mul(1337.0) - .sin() - * 0.125, - ); - - 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 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(); - - if velocity < 0.5 { - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + breathe * 0.2) * 1.02; - next.head.orientation = - Quaternion::rotation_z(look.x * 0.6) * Quaternion::rotation_x(look.y * 0.6); - - next.upper_torso.position = - Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + breathe * 0.5); - next.upper_torso.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - - next.lower_torso.position = - Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1 + breathe * 0.15); - next.lower_torso.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - - next.jaw.position = Vec3::new(0.0, s_a.jaw.0 - slower * 0.12, s_a.jaw.1 + slow * 0.2); - next.jaw.orientation = Quaternion::rotation_x(slow * 0.05); - - next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); - next.tail.orientation = - Quaternion::rotation_z(0.0 + slow * 0.2 + tailmove.x) * Quaternion::rotation_x(0.0); - - next.shoulder_l.position = Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - - next.shoulder_r.position = Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - - next.leg_l.position = - Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 + breathe * 0.2) * 1.02; - next.leg_l.orientation = Quaternion::rotation_z(0.0); - - next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 + breathe * 0.2) * 1.02; - next.leg_r.orientation = Quaternion::rotation_z(0.0); - - next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_z(0.0); - - next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_z(0.0); - - next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; - next.torso.orientation = Quaternion::rotation_z(test * 0.0); - - next.control.position = Vec3::new(7.0, 9.0, -10.0); - next.control.orientation = Quaternion::rotation_x(test * 0.02) - * Quaternion::rotation_y(test * 0.02) - * Quaternion::rotation_z(test * 0.02); - } else { - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1) * 1.02; - next.head.orientation = - Quaternion::rotation_z(short * -0.18) * Quaternion::rotation_x(-0.05); - - next.upper_torso.position = - Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + shortalt * -1.5); - next.upper_torso.orientation = Quaternion::rotation_z(short * 0.18); - - next.lower_torso.position = Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1); - next.lower_torso.orientation = - Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); - - next.jaw.position = Vec3::new(0.0, s_a.jaw.0 - slower * 0.12, s_a.jaw.1 + slow * 0.2); - next.jaw.orientation = Quaternion::rotation_x(slow * 0.05); - - next.tail.orientation = - Quaternion::rotation_z(0.0 + slow * 0.2 + tailmove.x) * Quaternion::rotation_x(0.0); - - next.shoulder_l.position = Vec3::new( - -s_a.shoulder.0, - s_a.shoulder.1 + foothoril * -1.0, - s_a.shoulder.2, - ); - next.shoulder_l.orientation = Quaternion::rotation_x(0.5 + footrotl * -0.16) - * Quaternion::rotation_y(0.1) - * Quaternion::rotation_z(footrotl * 0.1); - - next.shoulder_r.position = Vec3::new( - s_a.shoulder.0, - s_a.shoulder.1 + foothorir * -1.0, - s_a.shoulder.2, - ); - next.shoulder_r.orientation = Quaternion::rotation_x(0.5 + footrotr * -0.16) - * Quaternion::rotation_y(-0.1) - * Quaternion::rotation_z(footrotr * -0.1); - - next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; - next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.25); - - next.leg_l.orientation = - Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothoril * 0.3); - - next.leg_r.orientation = - Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothorir * 0.3); - - next.foot_l.position = Vec3::new( - -s_a.foot.0, - 4.0 + s_a.foot.1 + foothoril * 8.5, - s_a.foot.2 + ((footvertl * 6.5).max(0.0)), - ); - next.foot_l.orientation = Quaternion::rotation_x(-0.5 + footrotl * 0.85); - - next.foot_r.position = Vec3::new( - s_a.foot.0, - 4.0 + s_a.foot.1 + foothorir * 8.5, - s_a.foot.2 + ((footvertr * 6.5).max(0.0)), - ); - next.foot_r.orientation = Quaternion::rotation_x(-0.5 + footrotr * 0.85); - } - match active_tool_kind { - Some(ToolKind::Bow(_)) => { - next.hand_l.position = - Vec3::new(-10.0 - exp * 2.0, -4.0 - exp * 4.0, -1.0 + exp * 6.0); - next.hand_l.orientation = Quaternion::rotation_x(1.20) - * Quaternion::rotation_y(-0.6 + exp * 0.8) - * Quaternion::rotation_z(-0.3 + exp * 0.9); - - next.hand_r.position = Vec3::new(4.9, 3.0, -4.0); - next.hand_r.orientation = Quaternion::rotation_x(1.20) - * Quaternion::rotation_y(-0.6) - * Quaternion::rotation_z(-0.3); - - next.shoulder_l.position = Vec3::new( - -s_a.shoulder.0, - s_a.shoulder.1 + foothoril * -1.0, - s_a.shoulder.2, - ); - next.shoulder_l.orientation = Quaternion::rotation_x(1.4 + footrotl * -0.06) - * Quaternion::rotation_y(-0.9) - * Quaternion::rotation_z(footrotl * -0.05); - - next.shoulder_r.position = Vec3::new( - s_a.shoulder.0, - s_a.shoulder.1 + foothorir * -1.0, - s_a.shoulder.2, - ); - next.shoulder_r.orientation = Quaternion::rotation_x(1.8 + footrotr * -0.06) - * Quaternion::rotation_y(-0.5) //1.9 - * Quaternion::rotation_z(footrotr * -0.05); - - next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); - next.jaw.orientation = Quaternion::rotation_x(-0.2); - - next.main.position = Vec3::new(7.0, 5.0, -13.0); - next.main.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(0.3) - * Quaternion::rotation_z(-0.6); - - next.control.position = Vec3::new(6.0, 6.0, 8.0); - next.control.orientation = Quaternion::rotation_x(exp * 0.4); - }, - Some(ToolKind::Staff(_)) => { - next.hand_l.position = Vec3::new(11.0, 5.0, -4.0); - next.hand_l.orientation = - Quaternion::rotation_x(1.27) * Quaternion::rotation_y(0.0); - - next.hand_r.position = Vec3::new(12.0, 5.5, 2.0); - next.hand_r.orientation = - Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.2); - - next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); - - next.shoulder_l.position = - Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_l.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(2.0); - - next.shoulder_r.position = - Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_r.orientation = - Quaternion::rotation_z(0.4) * Quaternion::rotation_x(2.0); - - next.jaw.orientation = Quaternion::rotation_x(-0.2); - - next.main.position = Vec3::new(10.0, 12.5, 13.2); - next.main.orientation = Quaternion::rotation_y(PI); - - next.control.position = Vec3::new(-7.0, 6.0, 6.0 - exp * 5.0); - next.control.orientation = - Quaternion::rotation_x(exp * 1.3) * Quaternion::rotation_z(exp * 1.5); - }, - _ => {}, - } - - next - } - } - */ fn update_skeleton_inner( skeleton: &Self::Skeleton, - (active_tool_kind, _second_tool_kind, velocity, _global_time): Self::Dependency, + ( + active_tool_kind, + _second_tool_kind, + velocity, + orientation, + last_ori, + _global_time, + stage_section, + ): Self::Dependency, anim_time: f64, rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { *rate = 1.0; + let speed = Vec2::::from(velocity).magnitude(); let mut next = (*skeleton).clone(); let lab = 1.0; - let foot = (((5.0) - / (0.2 + 4.8 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * lab as f32 * 8.0).sin()); - let foote = (((5.0) - / (0.5 + 4.5 * ((anim_time as f32 * lab as f32 * 8.0 + 1.57).sin()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * lab as f32 * 8.0).sin()); + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if ::vek::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 exp = ((anim_time as f32).powf(0.3 as f32)).min(1.2); - - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_z(exp * -0.4) - * Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(exp * 0.1); - - next.upper_torso.position = - Vec3::new(0.0, s_a.upper_torso.0 - exp * 1.5, s_a.upper_torso.1); - next.upper_torso.orientation = Quaternion::rotation_z(0.4 + exp * 1.0) - * Quaternion::rotation_x(0.0 + exp * 0.2) - * Quaternion::rotation_y(exp * -0.08); - - next.lower_torso.position = - Vec3::new(0.0, s_a.lower_torso.0 + exp * 1.0, s_a.lower_torso.1); - next.lower_torso.orientation = next.upper_torso.orientation * -0.08; + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(0.0); match active_tool_kind { Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { + let (movement1, movement2, movement3) = match stage_section { + Some(StageSection::Buildup) => (anim_time as f32, 0.0, 0.0), + Some(StageSection::Swing) => (1.0, (anim_time as f32).powf(0.25), 0.0), + Some(StageSection::Recover) => (1.0, 1.0, anim_time as f32), + _ => (0.0, 0.0, 0.0), + }; + let xmove = (movement1 as f32 * 6.0 * lab as f32 + PI).sin(); + let ymove = (movement1 as f32 * 6.0 * lab as f32 + PI * (0.5)).sin(); next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); next.hand_l.orientation = Quaternion::rotation_x(s_a.sthl.3); next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); next.hand_r.orientation = Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); + next.shoulder_l.orientation = Quaternion::rotation_z(0.2) + * Quaternion::rotation_x( + (movement1 * (movement2 * 8.0 + PI / 2.0).sin() * -0.1) * (1.0 - movement3), + ); + next.shoulder_r.orientation = Quaternion::rotation_z(-0.2) + * Quaternion::rotation_x( + 1.0 + movement1 * (movement2 * 8.0 + PI / 2.0).sin() * -0.1, + ); next.main.position = Vec3::new(0.0, 0.0, 0.0); next.main.orientation = Quaternion::rotation_y(0.0); next.control.position = Vec3::new( - s_a.stc.0, - s_a.stc.1 + exp * 5.0, - 10.0 + s_a.stc.2 - exp * 5.0, + s_a.stc.0 + (xmove * 3.0 + movement1 * -4.0) * (1.0 - movement3), + s_a.stc.1 + (2.0 + ymove * 3.0 + movement2 * 3.0) * (1.0 - movement3), + s_a.stc.2, ); - next.control.orientation = Quaternion::rotation_x(s_a.stc.3 + exp * 0.4) - * Quaternion::rotation_y(s_a.stc.4) - * Quaternion::rotation_z(s_a.stc.5 + exp * 1.5); + next.control.orientation = + Quaternion::rotation_x(s_a.stc.3 + (movement2 * 0.6) * (1.0 - movement3)) + * Quaternion::rotation_y(s_a.stc.4 + (movement1 * 0.5 + movement2 * -0.5)) + * Quaternion::rotation_z( + s_a.stc.5 + - (0.2 + movement1 * -0.5 + movement2 * 0.8) * (1.0 - movement3), + ); + next.upper_torso.orientation = + Quaternion::rotation_z((movement1 * 0.3 + movement2 * 0.2) * (1.0 - movement3)); + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = Quaternion::rotation_z( + tilt * -2.5 + (movement1 * -0.2 + movement2 * -0.4) * (1.0 - movement3), + ); + + if speed < 0.5 { + next.lower_torso.orientation = + Quaternion::rotation_x(0.08) * Quaternion::rotation_z(0.0); + + next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1 - 5.0, s_a.foot.2); + next.foot_l.orientation = Quaternion::rotation_x(-0.5); + + next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1 + 3.0, s_a.foot.2); + next.foot_r.orientation = + Quaternion::rotation_x(0.5) * Quaternion::rotation_z(0.3); + } else { + }; }, Some(ToolKind::Bow) => { - next.hand_l.position = Vec3::new( - s_a.bhl.0 - exp * 2.0, - s_a.bhl.1 - exp * 4.0, - s_a.bhl.2 + exp * 6.0, - ); - next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3) - * Quaternion::rotation_y(s_a.bhl.4 + exp * 0.8) - * Quaternion::rotation_z(s_a.bhl.5 + exp * 0.9); - next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); - next.hand_r.orientation = Quaternion::rotation_x(s_a.bhl.3) - * Quaternion::rotation_y(s_a.bhr.4) - * Quaternion::rotation_z(s_a.bhr.5); + let (movement1, movement2, movement3) = match stage_section { + Some(StageSection::Buildup) => ((anim_time as f32).powf(0.25), 0.0, 0.0), + Some(StageSection::Swing) => (1.0, anim_time as f32, 0.0), + Some(StageSection::Recover) => (1.0, 1.0, (anim_time as f32).powf(4.0)), + _ => (0.0, 0.0, 0.0), + }; next.main.position = Vec3::new(0.0, 0.0, 0.0); next.main.orientation = Quaternion::rotation_x(0.0); + next.hand_l.position = Vec3::new( + s_a.bhl.0 + movement2 * -2.0, + s_a.bhl.1 + movement2 * -12.0, + s_a.bhl.2 + movement2 * -3.0, + ); + next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3); + next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); + next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3); + next.shoulder_l.orientation = Quaternion::rotation_z(0.2) + * Quaternion::rotation_x( + (movement1 * (movement2 * 8.0 + PI / 2.0).sin() * 1.1) * (1.0 - movement3), + ); - next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, 4.0 + s_a.bc.2); - next.control.orientation = Quaternion::rotation_x(s_a.bc.3 + exp * 0.4); + next.shoulder_r.orientation = Quaternion::rotation_z(-0.2) + * Quaternion::rotation_x( + 1.5 + movement1 * (movement2 * 8.0 + PI / 2.0).sin() * -0.1, + ); + next.hold.position = + Vec3::new(0.0, -1.0 + movement2 * 2.0, -5.2 + movement2 * -3.0); + next.hold.orientation = Quaternion::rotation_x(-1.57); + next.hold.scale = Vec3::one() * 1.0 * (1.0 - movement2); + + next.control.position = Vec3::new(s_a.bc.0 + 11.0, s_a.bc.1 + 2.0, s_a.bc.2 + 8.0); + next.control.orientation = + Quaternion::rotation_x(0.0 + (movement2 as f32 * 0.1).sin()) + * Quaternion::rotation_y(s_a.bc.4 - 1.25) + * Quaternion::rotation_z(s_a.bc.5 - 0.2 + (movement2 as f32 * -0.2).sin()); + next.upper_torso.orientation = Quaternion::rotation_z(0.8); + next.head.position = Vec3::new(0.0 - 2.0, s_a.head.0, s_a.head.1); + + next.head.orientation = + Quaternion::rotation_z(tilt * -2.5 - 0.5 + (movement2 as f32 * 0.2).sin()); + if speed < 0.5 { + next.upper_torso.orientation = + Quaternion::rotation_z(0.8 + (movement2 as f32 * 0.1).sin()); + + next.lower_torso.orientation = Quaternion::rotation_x(0.08) + * Quaternion::rotation_z((movement2 as f32 * -0.15).sin()); + + next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1 - 5.0, s_a.foot.2); + next.foot_l.orientation = Quaternion::rotation_x(-0.5); + + next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1 + 3.0, s_a.foot.2); + next.foot_r.orientation = + Quaternion::rotation_x(0.5) * Quaternion::rotation_z(0.3); + } else { + }; }, _ => {}, } - if velocity > 0.5 { - next.foot_l.position = Vec3::new( - -s_a.foot.0 - foot * 1.0 + exp * -1.0, - foote * 0.8 + exp * 1.5, - s_a.foot.2, - ); - next.foot_l.orientation = Quaternion::rotation_x(exp * 0.5) - * Quaternion::rotation_z(exp * 0.4) - * Quaternion::rotation_y(0.15); - - next.foot_r.position = Vec3::new( - s_a.foot.0 + foot * 1.0 + exp * 1.0, - foote * -0.8 + exp * -1.0, - s_a.foot.2, - ); - next.foot_r.orientation = Quaternion::rotation_x(exp * -0.5) - * Quaternion::rotation_z(exp * 0.4) - * Quaternion::rotation_y(0.0); - next.torso.orientation = Quaternion::rotation_x(-0.15); - } else { - next.foot_l.position = Vec3::new(-s_a.foot.0, -2.5, s_a.foot.2 + exp * 2.5); - next.foot_l.orientation = - Quaternion::rotation_x(exp * -0.2 - 0.2) * Quaternion::rotation_z(exp * 1.0); - - next.foot_r.position = Vec3::new(s_a.foot.0, 3.5 - exp * 2.0, s_a.foot.2); - next.foot_r.orientation = - Quaternion::rotation_x(exp * 0.1) * Quaternion::rotation_z(exp * 0.5); - } next } diff --git a/voxygen/src/anim/src/biped_large/wield.rs b/voxygen/src/anim/src/biped_large/wield.rs index bd77702bb5..4f898ea49b 100644 --- a/voxygen/src/anim/src/biped_large/wield.rs +++ b/voxygen/src/anim/src/biped_large/wield.rs @@ -238,7 +238,7 @@ impl Animation for WieldAnimation { next.hold.orientation = Quaternion::rotation_x(-1.57); next.hold.scale = Vec3::one() * 1.0; - next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2); + next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2 - 5.0); next.control.orientation = Quaternion::rotation_x(u_slow * 0.06) * Quaternion::rotation_y(s_a.bc.4) * Quaternion::rotation_z(s_a.bc.5 + u_slowalt * 0.1); @@ -436,6 +436,17 @@ impl Animation for WieldAnimation { _ => {}, } }; + + if s_a.float { + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + slower * 1.0 + 4.0, + ); + next.foot_l.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + next.foot_r.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + } + next } } diff --git a/voxygen/src/anim/src/quadruped_low/idle.rs b/voxygen/src/anim/src/quadruped_low/idle.rs index aee2ca90eb..fc35b3dde2 100644 --- a/voxygen/src/anim/src/quadruped_low/idle.rs +++ b/voxygen/src/anim/src/quadruped_low/idle.rs @@ -45,7 +45,7 @@ impl Animation for IdleAnimation { next.tail_rear.scale = Vec3::one() * 0.98; next.head_upper.position = - Vec3::new(0.0, s_a.head_upper.0, s_a.head_upper.1 + slower * 0.20); + Vec3::new(0.0, s_a.head_upper.0, s_a.head_upper.1 + slower * 0.2); next.head_upper.orientation = Quaternion::rotation_z(0.8 * dragon_look.x) * Quaternion::rotation_x(0.8 * dragon_look.y); @@ -55,7 +55,7 @@ impl Animation for IdleAnimation { * Quaternion::rotation_x(0.8 * dragon_look.y); next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); - next.jaw.orientation = Quaternion::rotation_x(slow * 0.04); + next.jaw.orientation = Quaternion::rotation_x(slow * 0.05 - 0.05); next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1) * s_a.scaler / 11.0; next.chest.orientation = Quaternion::rotation_y(slow * 0.03); diff --git a/voxygen/src/anim/src/quadruped_low/mod.rs b/voxygen/src/anim/src/quadruped_low/mod.rs index c359150001..60163dcc08 100644 --- a/voxygen/src/anim/src/quadruped_low/mod.rs +++ b/voxygen/src/anim/src/quadruped_low/mod.rs @@ -107,95 +107,119 @@ impl Default for SkeletonAttr { impl<'a> From<&'a Body> for SkeletonAttr { fn from(body: &'a Body) -> Self { - use comp::quadruped_low::Species::*; + use comp::quadruped_low::{BodyType::*, Species::*}; Self { head_upper: match (body.species, body.body_type) { (Crocodile, _) => (1.5, 2.0), (Alligator, _) => (0.5, 2.0), - (Salamander, _) => (0.5, 2.5), + (Salamander, Male) => (0.5, 2.5), + (Salamander, Female) => (0.5, 1.0), (Monitor, _) => (4.5, 1.0), (Asp, _) => (6.0, 5.5), (Tortoise, _) => (5.0, 1.0), (Rocksnapper, _) => (6.0, 0.5), (Pangolin, _) => (-0.5, 8.0), (Maneater, _) => (7.0, 11.5), + (Sandshark, _) => (8.5, 0.5), + (Hakulaq, _) => (8.0, 10.0), }, head_lower: match (body.species, body.body_type) { (Crocodile, _) => (8.0, 0.0), (Alligator, _) => (9.0, 0.25), - (Salamander, _) => (9.0, 0.0), + (Salamander, Male) => (9.0, 0.0), + (Salamander, Female) => (9.0, 0.0), (Monitor, _) => (10.0, 2.0), (Asp, _) => (9.0, 2.5), (Tortoise, _) => (12.0, -3.5), (Rocksnapper, _) => (12.0, -9.0), (Pangolin, _) => (8.0, -9.0), (Maneater, _) => (1.0, 4.5), + (Sandshark, _) => (13.5, -10.5), + (Hakulaq, _) => (10.5, 1.0), }, jaw: match (body.species, body.body_type) { (Crocodile, _) => (2.5, -3.0), (Alligator, _) => (2.5, -2.0), - (Salamander, _) => (0.0, -2.0), + (Salamander, Male) => (0.0, -2.0), + (Salamander, Female) => (0.5, -1.0), (Monitor, _) => (-2.0, -1.0), (Asp, _) => (-3.0, -2.0), (Tortoise, _) => (-3.5, -2.0), (Rocksnapper, _) => (-5.0, -1.5), (Pangolin, _) => (0.0, 0.0), (Maneater, _) => (-1.0, 4.0), + (Sandshark, _) => (-8.0, -5.5), + (Hakulaq, _) => (-6.5, -4.0), }, chest: match (body.species, body.body_type) { (Crocodile, _) => (0.0, 5.0), (Alligator, _) => (0.0, 5.0), - (Salamander, _) => (0.0, 5.0), + (Salamander, Male) => (0.0, 5.0), + (Salamander, Female) => (0.0, 5.0), (Monitor, _) => (0.0, 5.0), (Asp, _) => (0.0, 8.0), (Tortoise, _) => (0.0, 11.0), (Rocksnapper, _) => (0.0, 18.5), (Pangolin, _) => (0.0, 7.0), (Maneater, _) => (0.0, 12.0), + (Sandshark, _) => (0.0, 20.0), + (Hakulaq, _) => (0.0, 13.5), }, tail_rear: match (body.species, body.body_type) { (Crocodile, _) => (-12.5, -1.0), (Alligator, _) => (-13.0, -1.0), - (Salamander, _) => (-8.0, 0.0), + (Salamander, Male) => (-8.0, 0.0), + (Salamander, Female) => (-6.5, 0.0), (Monitor, _) => (-12.0, 0.0), (Asp, _) => (-14.0, -2.0), (Tortoise, _) => (-10.0, -1.5), (Rocksnapper, _) => (-14.5, -2.0), (Pangolin, _) => (-7.0, -3.0), (Maneater, _) => (-15.0, 4.0), + (Sandshark, _) => (-10.0, 0.5), + (Hakulaq, _) => (-9.0, -2.0), }, tail_front: match (body.species, body.body_type) { (Crocodile, _) => (-6.0, 0.0), (Alligator, _) => (-5.0, 0.0), - (Salamander, _) => (-7.5, 0.0), + (Salamander, Male) => (-7.5, 0.0), + (Salamander, Female) => (-7.0, 0.0), (Monitor, _) => (-6.5, 0.0), (Asp, _) => (-6.0, -2.0), (Tortoise, _) => (-13.0, -3.5), (Rocksnapper, _) => (-13.5, -6.5), (Pangolin, _) => (-7.5, -0.5), (Maneater, _) => (-1.0, 4.0), + (Sandshark, _) => (-13.0, -8.0), + (Hakulaq, _) => (-6.0, -5.5), }, feet_f: match (body.species, body.body_type) { (Crocodile, _) => (3.5, 6.0, -1.0), (Alligator, _) => (4.5, 4.25, -1.0), - (Salamander, _) => (5.0, 5.0, -2.0), + (Salamander, Male) => (5.0, 5.0, -2.0), + (Salamander, Female) => (5.0, 4.5, -2.0), (Monitor, _) => (3.0, 5.0, 0.0), (Asp, _) => (1.5, 4.0, -1.0), (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), + (Sandshark, _) => (5.5, 2.0, -8.0), + (Hakulaq, _) => (4.5, 2.0, -4.5), }, feet_b: match (body.species, body.body_type) { (Crocodile, _) => (3.5, -6.0, -1.0), (Alligator, _) => (4.5, -5.5, -1.0), - (Salamander, _) => (4.0, -6.0, -2.0), + (Salamander, Male) => (4.0, -6.0, -2.0), + (Salamander, Female) => (3.0, -6.0, -2.0), (Monitor, _) => (2.5, -6.5, 0.0), (Asp, _) => (2.5, -5.5, -1.0), (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), + (Sandshark, _) => (3.5, -15.0, -14.0), + (Hakulaq, _) => (3.5, -8.0, -4.5), }, lean: match (body.species, body.body_type) { (Pangolin, _) => (0.4, 0.0), @@ -211,6 +235,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rocksnapper, _) => (1.4), (Pangolin, _) => (1.3), (Maneater, _) => (1.4), + (Sandshark, _) => (1.0), + (Hakulaq, _) => (1.0), }, tempo: match (body.species, body.body_type) { (Crocodile, _) => (0.8), @@ -222,6 +248,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rocksnapper, _) => (0.9), (Pangolin, _) => (1.15), (Maneater, _) => (1.0), + (Sandshark, _) => (1.0), + (Hakulaq, _) => (1.0), }, } } diff --git a/voxygen/src/anim/src/quadruped_medium/idle.rs b/voxygen/src/anim/src/quadruped_medium/idle.rs index 6e306bdb3a..d2a168bec4 100644 --- a/voxygen/src/anim/src/quadruped_medium/idle.rs +++ b/voxygen/src/anim/src/quadruped_medium/idle.rs @@ -62,6 +62,7 @@ impl Animation for IdleAnimation { next.foot_fr.scale = Vec3::one() * 0.96; next.foot_bl.scale = Vec3::one() * 0.96; next.foot_br.scale = Vec3::one() * 0.96; + next.ears.scale = Vec3::one() * 1.02; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + slower * 0.2); next.head.orientation = diff --git a/voxygen/src/anim/src/quadruped_medium/jump.rs b/voxygen/src/anim/src/quadruped_medium/jump.rs index e7646b268b..87029d0c8b 100644 --- a/voxygen/src/anim/src/quadruped_medium/jump.rs +++ b/voxygen/src/anim/src/quadruped_medium/jump.rs @@ -33,6 +33,7 @@ impl Animation for JumpAnimation { next.foot_fr.scale = Vec3::one() * 0.96; next.foot_bl.scale = Vec3::one() * 0.96; next.foot_br.scale = Vec3::one() * 0.96; + next.ears.scale = Vec3::one() * 1.02; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.head.orientation = Quaternion::rotation_z(0.4) * Quaternion::rotation_x(0.3); diff --git a/voxygen/src/anim/src/quadruped_medium/mod.rs b/voxygen/src/anim/src/quadruped_medium/mod.rs index 5c3175a2db..c96b5511d6 100644 --- a/voxygen/src/anim/src/quadruped_medium/mod.rs +++ b/voxygen/src/anim/src/quadruped_medium/mod.rs @@ -151,6 +151,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, Female) => (0.5, 3.5), (Hirdrasil, _) => (0.0, 5.0), (Roshwalr, _) => (1.0, 0.5), + (Donkey, _) => (4.5, -3.0), + (Camel, _) => (-0.5, 5.0), + (Zebra, _) => (3.0, -2.0), + (Antelope, _) => (1.5, 2.5), + (Kelpie, _) => (4.0, -1.0), + (Horse, _) => (0.5, 1.5), }, neck: match (body.species, body.body_type) { (Grolgar, _) => (1.0, -1.0), @@ -167,6 +173,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (-0.5, 1.0), (Hirdrasil, _) => (-1.0, 0.5), (Roshwalr, _) => (0.0, 1.0), + (Donkey, _) => (1.0, 3.5), + (Camel, _) => (3.5, -1.5), + (Zebra, _) => (1.0, 3.5), + (Antelope, _) => (0.5, 2.5), + (Kelpie, _) => (2.0, 1.0), + (Horse, _) => (1.5, 1.5), }, jaw: match (body.species, body.body_type) { (Grolgar, _) => (7.0, 2.0), @@ -183,6 +195,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (3.5, 2.5), (Hirdrasil, _) => (2.5, 3.0), (Roshwalr, _) => (4.0, -1.0), + (Donkey, _) => (1.0, 1.0), + (Camel, _) => (2.0, 2.5), + (Zebra, _) => (4.0, 0.0), + (Antelope, _) => (3.0, 0.5), + (Kelpie, _) => (1.0, 1.0), + (Horse, _) => (4.0, 1.0), }, tail: match (body.species, body.body_type) { (Grolgar, _) => (-11.5, -0.5), @@ -199,6 +217,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (-8.5, 0.5), (Hirdrasil, _) => (-11.0, 2.0), (Roshwalr, _) => (-8.5, -1.0), + (Donkey, _) => (-11.0, 1.5), + (Camel, _) => (-14.0, -1.0), + (Zebra, _) => (-10.0, 1.5), + (Antelope, _) => (-10.0, 2.0), + (Kelpie, _) => (-9.0, 3.0), + (Horse, _) => (-9.0, 1.5), }, torso_front: match (body.species, body.body_type) { (Grolgar, _) => (10.0, 13.0), @@ -215,6 +239,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (11.0, 13.5), (Hirdrasil, _) => (11.0, 14.5), (Roshwalr, _) => (6.0, 12.5), + (Donkey, _) => (10.0, 15.5), + (Camel, _) => (11.0, 22.5), + (Zebra, _) => (10.0, 16.5), + (Antelope, _) => (10.0, 14.0), + (Kelpie, _) => (10.0, 16.0), + (Horse, _) => (7.0, 16.0), }, torso_back: match (body.species, body.body_type) { (Grolgar, _) => (-10.0, 1.5), @@ -231,6 +261,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (-9.0, 0.5), (Hirdrasil, _) => (-9.0, -0.5), (Roshwalr, _) => (-9.0, -3.5), + (Donkey, _) => (-6.0, -1.0), + (Camel, _) => (-12.0, -0.5), + (Zebra, _) => (-6.0, -1.0), + (Antelope, _) => (-7.0, 0.0), + (Kelpie, _) => (-8.0, -1.0), + (Horse, _) => (-8.0, -1.5), }, ears: match (body.species, body.body_type) { (Grolgar, _) => (5.0, 8.0), @@ -247,6 +283,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (2.5, 5.0), (Hirdrasil, _) => (2.5, 5.0), (Roshwalr, _) => (5.0, 8.0), + (Donkey, _) => (-1.0, 8.0), + (Camel, _) => (2.5, 5.0), + (Zebra, _) => (0.0, 7.0), + (Antelope, _) => (2.5, 5.0), + (Kelpie, _) => (1.0, 7.5), + (Horse, _) => (1.0, 7.0), }, leg_f: match (body.species, body.body_type) { (Grolgar, _) => (7.5, -5.5, -1.0), @@ -263,6 +305,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (3.5, -4.5, -3.5), (Hirdrasil, _) => (4.5, -5.0, -2.5), (Roshwalr, _) => (8.0, -2.5, -2.5), + (Donkey, _) => (4.0, -3.5, -4.0), + (Camel, _) => (4.5, -3.5, -5.5), + (Zebra, _) => (4.0, -2.5, -4.5), + (Antelope, _) => (4.0, -4.5, -2.5), + (Kelpie, _) => (4.5, -3.5, -3.5), + (Horse, _) => (4.5, -2.5, -3.0), }, leg_b: match (body.species, body.body_type) { (Grolgar, _) => (6.0, -6.5, -4.0), @@ -279,6 +327,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (3.0, -6.5, -3.5), (Hirdrasil, _) => (4.0, -6.5, -3.0), (Roshwalr, _) => (7.0, -7.0, -2.5), + (Donkey, _) => (4.0, -9.0, -3.0), + (Camel, _) => (4.5, -10.5, -5.0), + (Zebra, _) => (3.5, -8.0, -3.5), + (Antelope, _) => (3.5, -7.5, -3.5), + (Kelpie, _) => (3.5, -7.0, -2.5), + (Horse, _) => (3.5, -7.0, -2.0), }, feet_f: match (body.species, body.body_type) { (Grolgar, _) => (0.0, 0.0, -4.0), @@ -295,6 +349,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (-0.5, -0.5, -2.5), (Hirdrasil, _) => (-0.5, -3.0, -3.5), (Roshwalr, _) => (0.5, 0.0, -3.0), + (Donkey, _) => (0.5, 1.0, -3.5), + (Camel, _) => (0.0, 0.0, -8.0), + (Zebra, _) => (-0.5, 0.5, -4.0), + (Antelope, _) => (-0.5, 0.0, -3.5), + (Kelpie, _) => (-0.5, 0.5, -4.5), + (Horse, _) => (-0.5, 0.5, -5.0), }, feet_b: match (body.species, body.body_type) { (Grolgar, _) => (0.5, -1.5, -3.0), @@ -311,6 +371,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (-1.0, -0.5, -2.0), (Hirdrasil, _) => (-1.0, -2.0, -4.5), (Roshwalr, _) => (0.5, -1.0, -3.5), + (Donkey, _) => (0.5, -1.0, -3.5), + (Camel, _) => (0.0, 0.5, -9.0), + (Zebra, _) => (0.5, -1.0, -3.0), + (Antelope, _) => (-0.5, -1.5, -3.5), + (Kelpie, _) => (0.5, -0.5, -3.5), + (Horse, _) => (0.5, -1.5, -3.5), }, scaler: match (body.species, body.body_type) { (Grolgar, _) => (1.3), @@ -327,6 +393,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (1.0), (Hirdrasil, _) => (1.0), (Roshwalr, _) => (1.2), + (Donkey, _) => (1.0), + (Camel, _) => (1.0), + (Zebra, _) => (1.0), + (Antelope, _) => (1.0), + (Kelpie, _) => (1.0), + (Horse, _) => (1.0), }, startangle: match (body.species, body.body_type) { //changes the default angle of front feet @@ -344,6 +416,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (0.0), (Hirdrasil, _) => (0.0), (Roshwalr, _) => (-0.3), + (Donkey, _) => (0.0), + (Camel, _) => (0.0), + (Zebra, _) => (0.0), + (Antelope, _) => (0.0), + (Kelpie, _) => (0.0), + (Horse, _) => (0.0), }, tempo: match (body.species, body.body_type) { (Grolgar, _) => (0.95), @@ -360,6 +438,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (0.85), (Hirdrasil, _) => (0.85), (Roshwalr, _) => (0.95), + (Donkey, _) => (0.85), + (Camel, _) => (0.85), + (Zebra, _) => (0.85), + (Antelope, _) => (1.0), + (Kelpie, _) => (0.85), + (Horse, _) => (0.85), }, spring: match (body.species, body.body_type) { (Grolgar, _) => (1.0), @@ -376,12 +460,23 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Deer, _) => (0.9), (Hirdrasil, _) => (1.1), (Roshwalr, _) => (1.0), + (Donkey, _) => (0.85), + (Camel, _) => (0.85), + (Zebra, _) => (0.85), + (Antelope, _) => (1.2), + (Kelpie, _) => (0.95), + (Horse, _) => (0.85), }, feed: match (body.species, body.body_type) { (Tuskram, _) => (true, 0.5), (Mouflon, _) => (true, 1.0), (Deer, _) => (true, 1.0), (Hirdrasil, _) => (true, 0.9), + (Donkey, _) => (false, 1.0), + (Zebra, _) => (false, 1.0), + (Antelope, _) => (false, 0.9), + (Kelpie, _) => (false, 1.0), + (Horse, _) => (true, 0.85), (_, _) => (false, 0.0), }, } diff --git a/voxygen/src/anim/src/quadruped_medium/run.rs b/voxygen/src/anim/src/quadruped_medium/run.rs index b7b09c5e59..2db9aeacb9 100644 --- a/voxygen/src/anim/src/quadruped_medium/run.rs +++ b/voxygen/src/anim/src/quadruped_medium/run.rs @@ -109,7 +109,6 @@ impl Animation for RunAnimation { next.foot_fr.scale = Vec3::one() * 0.96; next.foot_bl.scale = Vec3::one() * 0.96; next.foot_br.scale = Vec3::one() * 0.96; - next.ears.scale = Vec3::one() * 1.02; //Gallop diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index 2d7167db56..3ca7129099 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -95,7 +95,7 @@ impl Default for SkeletonAttr { impl<'a> From<&'a Body> for SkeletonAttr { fn from(body: &'a Body) -> Self { - use comp::quadruped_small::Species::*; + use comp::quadruped_small::{BodyType::*, Species::*}; Self { head: match (body.species, body.body_type) { (Pig, _) => (5.0, 2.0), @@ -122,6 +122,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (1.5, -1.5), (Porcupine, _) => (6.0, 1.0), (Beaver, _) => (5.5, 0.0), + (Hare, Male) => (3.0, 2.0), + (Hare, Female) => (2.5, 3.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 6.0), @@ -148,6 +150,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (4.0, 4.0), (Porcupine, _) => (2.0, 11.0), (Beaver, _) => (2.0, 6.0), + (Hare, Male) => (-2.0, 7.0), + (Hare, Female) => (-2.0, 6.0), }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.5, -1.0), @@ -174,6 +178,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (3.0, 2.0, -1.0), (Porcupine, _) => (4.0, 6.5, -9.0), (Beaver, _) => (4.5, 4.5, -4.0), + (Hare, Male) => (3.0, 1.0, -3.0), + (Hare, Female) => (3.0, 0.5, -4.0), }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, 0.0), @@ -200,6 +206,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (3.0, -3.5, -1.0), (Porcupine, _) => (4.5, -1.0, -8.0), (Beaver, _) => (4.0, -2.5, -3.0), + (Hare, Male) => (3.5, -1.0, -2.0), + (Hare, Female) => (3.5, -3.0, -2.0), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -226,6 +234,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (-4.0, -2.0), (Porcupine, _) => (-6.0, 1.0), (Beaver, _) => (-6.5, -1.0), + (Hare, Male) => (-4.0, -1.0), + (Hare, Female) => (-4.0, 2.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => (0.9), @@ -252,6 +262,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (0.9), (Porcupine, _) => (0.8), (Beaver, _) => (1.0), + (Hare, _) => (0.8), }, tempo: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -278,6 +289,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (1.0), (Porcupine, _) => (1.2), (Beaver, _) => (1.2), + (Hare, _) => (1.15), }, maximize: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -304,6 +316,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (0.7), (Porcupine, _) => (1.0), (Beaver, _) => (1.0), + (Hare, _) => (1.3), }, minimize: match (body.species, body.body_type) { (Pig, _) => (0.6), @@ -330,6 +343,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (0.4), (Porcupine, _) => (0.9), (Beaver, _) => (0.9), + (Hare, _) => (0.8), }, spring: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -356,6 +370,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (0.8), (Porcupine, _) => (1.3), (Beaver, _) => (1.3), + (Hare, Male) => (2.2), + (Hare, Female) => (2.5), }, feed: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -382,6 +398,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Fungome, _) => (0.7), (Porcupine, _) => (1.0), (Beaver, _) => (1.0), + (Hare, _) => (1.2), }, } } diff --git a/voxygen/src/anim/src/theropod/jump.rs b/voxygen/src/anim/src/theropod/jump.rs index 1c32684d86..cd37180b7b 100644 --- a/voxygen/src/anim/src/theropod/jump.rs +++ b/voxygen/src/anim/src/theropod/jump.rs @@ -5,7 +5,7 @@ use super::super::vek::*; pub struct JumpAnimation; impl Animation for JumpAnimation { - type Dependency = (f32, f64); + type Dependency = (f32, Vec3, Vec3, f64, Vec3); type Skeleton = TheropodSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -14,7 +14,7 @@ impl Animation for JumpAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_jump")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - _global_time: Self::Dependency, + (_velocity, _orientation, _last_ori, _global_time, _avg_vel): Self::Dependency, _anim_time: f64, _rate: &mut f32, s_a: &SkeletonAttr, diff --git a/voxygen/src/anim/src/theropod/run.rs b/voxygen/src/anim/src/theropod/run.rs index 94c34b30c0..7ef233c7c4 100644 --- a/voxygen/src/anim/src/theropod/run.rs +++ b/voxygen/src/anim/src/theropod/run.rs @@ -6,7 +6,7 @@ use std::f32::consts::PI; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (f32, f64); + type Dependency = (f32, Vec3, Vec3, f64, Vec3); type Skeleton = TheropodSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -15,7 +15,7 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_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, s_a: &SkeletonAttr, @@ -56,8 +56,20 @@ impl Animation for RunAnimation { //FR let foot2a = (anim_time as f32 * (16.0) * lab as f32 * speedmult).sin(); //1.2 let foot2b = (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.57).sin(); //1.6 - //BL - //BR + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if ::vek::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.scale = Vec3::one() * 1.02; next.neck.scale = Vec3::one() * 0.98; @@ -67,32 +79,40 @@ impl Animation for RunAnimation { next.chest_front.scale = Vec3::one() / s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + breathe * 0.3); - next.head.orientation = - Quaternion::rotation_x(-0.1 + short * -0.05) * Quaternion::rotation_z(shortalt * -0.2); + next.head.orientation = Quaternion::rotation_x(-0.1 + short * -0.05) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(shortalt * -0.2 - tilt * 1.2); next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); next.jaw.orientation = Quaternion::rotation_x(short * -0.03); next.neck.position = Vec3::new(0.0, s_a.neck.0, s_a.neck.1); - next.neck.orientation = - Quaternion::rotation_x(-0.1 + short * -0.04) * Quaternion::rotation_z(shortalt * -0.1); + next.neck.orientation = Quaternion::rotation_x(-0.1 + short * -0.04) + * Quaternion::rotation_y(tilt * 0.3) + * Quaternion::rotation_z(shortalt * -0.1 - tilt * 1.2); - next.chest_front.position = - Vec3::new(0.0, s_a.chest_front.0, s_a.chest_front.1 + short * 0.5) / s_a.scaler; + next.chest_front.position = Vec3::new( + 0.0, + s_a.chest_front.0, + s_a.chest_front.1 + short * 0.5 + x_tilt * 10.0 * canceler, + ) / s_a.scaler; next.chest_front.orientation = - Quaternion::rotation_x(short * 0.07) * Quaternion::rotation_z(shortalt * 0.15); + Quaternion::rotation_x(short * 0.07 + x_tilt * (canceler * 6.0).min(1.0)) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(shortalt * 0.15 + tilt * -1.5); next.chest_back.position = Vec3::new(0.0, s_a.chest_back.0, s_a.chest_back.1); - next.chest_back.orientation = - Quaternion::rotation_x(short * -0.04) * Quaternion::rotation_z(shortalt * -0.15); + next.chest_back.orientation = Quaternion::rotation_x(short * -0.04) + * Quaternion::rotation_y(tilt * 0.6) + * Quaternion::rotation_z(shortalt * -0.15 + tilt * 0.6); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); - next.tail_front.orientation = - Quaternion::rotation_x(0.1 + short * -0.02) * Quaternion::rotation_z(shortalt * -0.1); + next.tail_front.orientation = Quaternion::rotation_x(0.1 + short * -0.02) + * Quaternion::rotation_z(shortalt * -0.1 + tilt * 1.0); next.tail_back.position = Vec3::new(0.0, s_a.tail_back.0, s_a.tail_back.1); - next.tail_back.orientation = - Quaternion::rotation_x(0.2 + short * -0.2) * Quaternion::rotation_z(shortalt * -0.2); + next.tail_back.orientation = Quaternion::rotation_x(0.2 + short * -0.1) + * Quaternion::rotation_z(shortalt * -0.2 + tilt * 1.4); next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2); next.hand_l.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot2a * 0.3); @@ -106,7 +126,8 @@ impl Animation for RunAnimation { s_a.leg.2 + amplitude3 * foot1a * 1.4, ); next.leg_l.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot1a * 0.2) - * Quaternion::rotation_z(foot1a * -0.3); + * Quaternion::rotation_y(tilt * 0.5) + * Quaternion::rotation_z(foot1a * -0.3 + tilt * -0.5); next.leg_r.position = Vec3::new( s_a.leg.0, @@ -114,7 +135,8 @@ impl Animation for RunAnimation { s_a.leg.2 + amplitude3 * foot2a * 1.4, ); next.leg_r.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot2a * 0.2) - * Quaternion::rotation_z(foot2a * 0.3); + * Quaternion::rotation_y(tilt * 0.5) + * Quaternion::rotation_z(foot2a * 0.3 + tilt * -0.5); next.foot_l.position = Vec3::new( -s_a.foot.0, @@ -122,14 +144,16 @@ impl Animation for RunAnimation { s_a.foot.2 + canceler * 2.0 + (foot1a * 2.0).max(0.0) * amplitude2, ); next.foot_l.orientation = Quaternion::rotation_x(-0.3 + amplitude2 * foot1b * -0.35) - * Quaternion::rotation_y(0.0); + * Quaternion::rotation_y(tilt * -1.0) + * Quaternion::rotation_z(tilt * -0.5); next.foot_r.position = Vec3::new( s_a.foot.0, s_a.foot.1 + canceler * -2.0 + amplitude3 * foot2b * -2.0, s_a.foot.2 + canceler * 2.0 + (foot2a * 2.0).max(0.0) * amplitude2, ); - next.foot_r.orientation = Quaternion::rotation_x(-0.3 + amplitude2 * foot2b * -0.35); + next.foot_r.orientation = Quaternion::rotation_x(-0.3 + amplitude2 * foot2b * -0.35) + * Quaternion::rotation_y(tilt * -1.0); next } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index c9cf99ae27..aae6b08720 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -1986,7 +1986,7 @@ impl FigureMgr { // Running (true, true, false) => anim::theropod::RunAnimation::update_skeleton( &TheropodSkeleton::default(), - (vel.0.magnitude(), time), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -1994,7 +1994,7 @@ impl FigureMgr { // In air (false, _, false) => anim::theropod::JumpAnimation::update_skeleton( &TheropodSkeleton::default(), - (vel.0.magnitude(), time), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -2299,57 +2299,65 @@ impl FigureMgr { skeleton_attr, ) }, - CharacterState::BasicRanged(data) => { - if data.exhausted { - anim::biped_large::ShootAnimation::update_skeleton( - &target_base, - (active_tool_kind, second_tool_kind, vel.0.magnitude(), time), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ) - } else { - anim::biped_large::ChargeAnimation::update_skeleton( - &target_base, - ( - active_tool_kind, - second_tool_kind, - vel.0.magnitude(), - ori, - state.last_ori, - time, - ), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ) - } + CharacterState::BasicRanged(s) => { + let stage_time = s.timer.as_secs_f64(); + + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f64() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f64() + }, + + _ => 0.0, + }; + + anim::biped_large::ShootAnimation::update_skeleton( + &target_base, + ( + active_tool_kind, + second_tool_kind, + vel.0.magnitude(), + ori, + state.last_ori, + time, + Some(s.stage_section), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) }, - CharacterState::ChargedRanged(data) => { - if data.exhausted { - anim::biped_large::ShootAnimation::update_skeleton( - &target_base, - (active_tool_kind, second_tool_kind, vel.0.magnitude(), time), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ) - } else { - anim::biped_large::ChargeAnimation::update_skeleton( - &target_base, - ( - active_tool_kind, - second_tool_kind, - vel.0.magnitude(), - ori, - state.last_ori, - time, - ), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ) - } + CharacterState::ChargedRanged(s) => { + let stage_time = s.timer.as_secs_f64(); + + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f64() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f64() + }, + + _ => 0.0, + }; + + anim::biped_large::ShootAnimation::update_skeleton( + &target_base, + ( + active_tool_kind, + second_tool_kind, + vel.0.magnitude(), + ori, + state.last_ori, + time, + Some(s.stage_section), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) }, CharacterState::DashMelee(s) => { let stage_time = s.timer.as_secs_f64(); diff --git a/world/src/lib.rs b/world/src/lib.rs index d1672a4677..5fccc613c9 100644 --- a/world/src/lib.rs +++ b/world/src/lib.rs @@ -269,6 +269,12 @@ impl World { quadruped_medium::Species::Tuskram => is_hostile = false, quadruped_medium::Species::Deer => is_hostile = false, quadruped_medium::Species::Hirdrasil => is_hostile = false, + quadruped_medium::Species::Donkey => is_hostile = false, + quadruped_medium::Species::Camel => is_hostile = false, + quadruped_medium::Species::Zebra => is_hostile = false, + quadruped_medium::Species::Antelope => is_hostile = false, + quadruped_medium::Species::Kelpie => is_hostile = false, + quadruped_medium::Species::Horse => is_hostile = false, _ => is_hostile = true, } }, @@ -287,6 +293,8 @@ impl World { quadruped_low::Species::Crocodile => is_hostile = true, quadruped_low::Species::Alligator => is_hostile = true, quadruped_low::Species::Maneater => is_hostile = true, + quadruped_low::Species::Sandshark => is_hostile = true, + quadruped_low::Species::Hakulaq => is_hostile = true, _ => is_hostile = false, } }, diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index 29063f0227..e81c241545 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -211,6 +211,7 @@ pub struct Room { seed: u32, loot_density: f32, enemy_density: Option, + miniboss: bool, boss: bool, area: Rect, height: i32, @@ -267,6 +268,7 @@ impl Floor { seed: ctx.rng.gen(), loot_density: 0.0, enemy_density: None, + miniboss: false, boss: false, area: Rect::from((stair_tile - tile_offset - 1, Extent2::broadcast(3))), height: STAIR_ROOM_HEIGHT, @@ -280,6 +282,7 @@ impl Floor { seed: ctx.rng.gen(), loot_density: 0.0, enemy_density: Some(0.001), // Minions! + miniboss: false, boss: true, area: Rect::from((new_stair_tile - tile_offset - 4, Extent2::broadcast(9))), height: 30, @@ -291,6 +294,7 @@ impl Floor { seed: ctx.rng.gen(), loot_density: 0.0, enemy_density: None, + miniboss: false, boss: false, area: Rect::from((new_stair_tile - tile_offset - 1, Extent2::broadcast(3))), height: STAIR_ROOM_HEIGHT, @@ -352,20 +356,34 @@ impl Floor { Some(area) => area, None => return, }; + let mut dynamic_rng = rand::thread_rng(); - self.create_room(Room { - seed: ctx.rng.gen(), - loot_density: 0.000025 + level as f32 * 0.00015, - enemy_density: Some(0.001 + level as f32 * 0.00006), - boss: false, - area, - height: ctx.rng.gen_range(10, 15), - pillars: if ctx.rng.gen_range(0, 4) == 0 { - Some(2) - } else { - None - }, - }); + match dynamic_rng.gen_range(0, 5) { + 0 => self.create_room(Room { + seed: ctx.rng.gen(), + loot_density: 0.000025 + level as f32 * 0.00015, + enemy_density: None, + miniboss: true, + boss: false, + area, + height: ctx.rng.gen_range(15, 20), + pillars: Some(4), + }), + _ => self.create_room(Room { + seed: ctx.rng.gen(), + loot_density: 0.000025 + level as f32 * 0.00015, + enemy_density: Some(0.001 + level as f32 * 0.00006), + miniboss: false, + boss: false, + area, + height: ctx.rng.gen_range(10, 15), + pillars: if ctx.rng.gen_range(0, 4) == 0 { + Some(4) + } else { + None + }, + }), + }; } } @@ -534,6 +552,43 @@ impl Floor { supplement.add_entity(entity); } } + if room.miniboss { + let miniboss_spawn_tile = room.area.center(); + // Don't spawn the miniboss in a pillar + let miniboss_tile_is_pillar = room + .pillars + .map(|pillar_space| { + miniboss_spawn_tile + .map(|e| e.rem_euclid(pillar_space) == 0) + .reduce_and() + }) + .unwrap_or(false); + let miniboss_spawn_tile = + miniboss_spawn_tile + if miniboss_tile_is_pillar { 1 } else { 0 }; + + if tile_pos == miniboss_spawn_tile && tile_wcenter.xy() == wpos2d { + let chosen = + Lottery::::load_expect(match dynamic_rng.gen_range(0, 5) { + 0 => "common.loot_tables.loot_table_humanoids", + 1 => "common.loot_tables.loot_table_armor_misc", + _ => "common.loot_tables.loot_table_cultists", + }); + let chosen = chosen.choose(); + let entity = EntityInfo::at(tile_wcenter.map(|e| e as f32)) + .with_level(1) + .with_alignment(comp::Alignment::Enemy) + .with_body(comp::Body::BipedLarge( + comp::biped_large::Body::random_with( + dynamic_rng, + &comp::biped_large::Species::Mindflayer, + ), + )) + .with_name("Mindflayer") + .with_loot_drop(comp::Item::new_from_asset_expect(chosen)); + + supplement.add_entity(entity); + } + } } } }