From cd6e1ad45feb88bed15297ce124a7c4e876b0470 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Sat, 29 Aug 2020 04:23:12 -0400 Subject: [PATCH] haul out the critter skele, add theropod --- assets/common/npc_names.json | 56 ++-- .../voxygen/voxel/critter_center_manifest.ron | 266 --------------- .../voxel/npc/archaeos/male/chest_back.vox | 3 + .../voxel/npc/archaeos/male/chest_front.vox | 3 + .../voxel/npc/archaeos/male/foot_l.vox | 3 + .../voxel/npc/archaeos/male/foot_r.vox | 3 + .../voxel/npc/archaeos/male/hand_l.vox | 3 + .../voxel/npc/archaeos/male/hand_r.vox | 3 + .../voxygen/voxel/npc/archaeos/male/head.vox | 3 + .../voxygen/voxel/npc/archaeos/male/jaw.vox | 3 + .../voxygen/voxel/npc/archaeos/male/leg_l.vox | 3 + .../voxygen/voxel/npc/archaeos/male/leg_r.vox | 3 + .../voxygen/voxel/npc/archaeos/male/neck.vox | 3 + .../voxel/npc/archaeos/male/tail_back.vox | 3 + .../voxel/npc/archaeos/male/tail_front.vox | 3 + .../voxygen/voxel/npc/axolotl/male/chest.vox | 4 +- .../voxygen/voxel/npc/axolotl/male/feet_b.vox | 3 - .../voxygen/voxel/npc/axolotl/male/feet_f.vox | 3 - .../feet_b.vox => axolotl/male/foot_bl.vox} | 0 .../feet_f.vox => axolotl/male/foot_br.vox} | 0 .../voxel/npc/axolotl/male/foot_fl.vox | 3 + .../voxel/npc/axolotl/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/axolotl/male/head.vox | 4 +- .../voxygen/voxel/npc/axolotl/male/tail.vox | 4 +- .../voxygen/voxel/npc/fungome/male/chest.vox | 4 +- .../voxygen/voxel/npc/fungome/male/feet_b.vox | 3 - .../voxygen/voxel/npc/fungome/male/feet_f.vox | 3 - .../voxel/npc/fungome/male/foot_bl.vox | 3 + .../voxel/npc/fungome/male/foot_br.vox | 3 + .../voxel/npc/fungome/male/foot_fl.vox | 3 + .../voxel/npc/fungome/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/fungome/male/head.vox | 4 +- .../voxygen/voxel/npc/fungome/male/tail.vox | 4 +- assets/voxygen/voxel/npc/gecko/male/chest.vox | 4 +- .../voxygen/voxel/npc/gecko/male/feet_b.vox | 3 - .../voxygen/voxel/npc/gecko/male/feet_f.vox | 3 - .../voxygen/voxel/npc/gecko/male/foot_bl.vox | 3 + .../voxygen/voxel/npc/gecko/male/foot_br.vox | 3 + .../voxygen/voxel/npc/gecko/male/foot_fl.vox | 3 + .../voxygen/voxel/npc/gecko/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/gecko/male/head.vox | 4 +- assets/voxygen/voxel/npc/gecko/male/tail.vox | 4 +- .../npc/odontotyrannos/Odontotyrannos-0.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-1.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-10.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-11.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-2.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-3.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-4.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-5.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-6.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-7.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-8.vox | 3 + .../npc/odontotyrannos/Odontotyrannos-9.vox | 3 + assets/voxygen/voxel/npc/rat/male/chest.vox | 4 +- assets/voxygen/voxel/npc/rat/male/feet_b.vox | 3 - assets/voxygen/voxel/npc/rat/male/feet_f.vox | 3 - assets/voxygen/voxel/npc/rat/male/feet_r.vox | 3 - assets/voxygen/voxel/npc/rat/male/foot_bl.vox | 3 + assets/voxygen/voxel/npc/rat/male/foot_br.vox | 3 + assets/voxygen/voxel/npc/rat/male/foot_fl.vox | 3 + assets/voxygen/voxel/npc/rat/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/rat/male/head.vox | 4 +- assets/voxygen/voxel/npc/rat/male/tail.vox | 4 +- .../voxygen/voxel/npc/squirrel/male/chest.vox | 4 +- .../voxel/npc/squirrel/male/feet_b.vox | 3 - .../voxel/npc/squirrel/male/feet_f.vox | 3 - .../voxel/npc/squirrel/male/foot_bl.vox | 3 + .../voxel/npc/squirrel/male/foot_br.vox | 3 + .../voxel/npc/squirrel/male/foot_fl.vox | 3 + .../voxel/npc/squirrel/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/squirrel/male/head.vox | 4 +- .../voxygen/voxel/npc/squirrel/male/tail.vox | 4 +- .../voxygen/voxel/npc/turtle/male/foot_bl.vox | 3 + .../voxygen/voxel/npc/turtle/male/foot_br.vox | 3 + .../voxygen/voxel/npc/turtle/male/foot_fl.vox | 3 + .../voxygen/voxel/npc/turtle/male/foot_fr.vox | 3 + .../quadruped_small_central_manifest.ron | 168 ++++++++++ .../quadruped_small_lateral_manifest.ron | 217 ++++++++++++- .../voxel/theropod_central_manifest.ron | 122 +++++++ .../voxel/theropod_lateral_manifest.ron | 106 ++++++ common/src/comp/agent.rs | 8 +- common/src/comp/body.rs | 26 +- common/src/comp/body/quadruped_small.rs | 69 ++-- common/src/comp/body/theropod.rs | 8 +- common/src/comp/mod.rs | 4 +- common/src/generation.rs | 2 +- common/src/loadout_builder.rs | 2 +- common/src/npc.rs | 12 +- common/src/states/utils.rs | 4 +- server/src/events/entity_manipulation.rs | 4 +- voxygen/src/anim/src/critter/idle.rs | 68 ---- voxygen/src/anim/src/critter/jump.rs | 48 --- voxygen/src/anim/src/critter/mod.rs | 136 -------- voxygen/src/anim/src/critter/run.rs | 59 ---- voxygen/src/anim/src/lib.rs | 2 +- voxygen/src/anim/src/quadruped_small/mod.rs | 66 ++++ voxygen/src/anim/src/theropod/idle.rs | 109 +++++++ voxygen/src/anim/src/theropod/jump.rs | 111 +++++++ voxygen/src/anim/src/theropod/mod.rs | 177 ++++++++++ voxygen/src/anim/src/theropod/run.rs | 114 +++++++ voxygen/src/scene/figure/cache.rs | 7 + voxygen/src/scene/figure/load.rs | 306 +++++++++++++++--- voxygen/src/scene/figure/mod.rs | 69 ++-- world/src/layer/mod.rs | 10 +- world/src/lib.rs | 6 +- 106 files changed, 1771 insertions(+), 825 deletions(-) delete mode 100644 assets/voxygen/voxel/critter_center_manifest.ron create mode 100644 assets/voxygen/voxel/npc/archaeos/male/chest_back.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/chest_front.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/head.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/neck.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/tail_back.vox create mode 100644 assets/voxygen/voxel/npc/archaeos/male/tail_front.vox delete mode 100644 assets/voxygen/voxel/npc/axolotl/male/feet_b.vox delete mode 100644 assets/voxygen/voxel/npc/axolotl/male/feet_f.vox rename assets/voxygen/voxel/npc/{turtle/male/feet_b.vox => axolotl/male/foot_bl.vox} (100%) rename assets/voxygen/voxel/npc/{turtle/male/feet_f.vox => axolotl/male/foot_br.vox} (100%) create mode 100644 assets/voxygen/voxel/npc/axolotl/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/male/foot_fr.vox delete mode 100644 assets/voxygen/voxel/npc/fungome/male/feet_b.vox delete mode 100644 assets/voxygen/voxel/npc/fungome/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/foot_fr.vox delete mode 100644 assets/voxygen/voxel/npc/gecko/male/feet_b.vox delete mode 100644 assets/voxygen/voxel/npc/gecko/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-0.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-1.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-10.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-11.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-2.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-3.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-4.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-5.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-6.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-7.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-8.vox create mode 100644 assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-9.vox delete mode 100644 assets/voxygen/voxel/npc/rat/male/feet_b.vox delete mode 100644 assets/voxygen/voxel/npc/rat/male/feet_f.vox delete mode 100644 assets/voxygen/voxel/npc/rat/male/feet_r.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/foot_fr.vox delete mode 100644 assets/voxygen/voxel/npc/squirrel/male/feet_b.vox delete mode 100644 assets/voxygen/voxel/npc/squirrel/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/theropod_central_manifest.ron create mode 100644 assets/voxygen/voxel/theropod_lateral_manifest.ron delete mode 100644 voxygen/src/anim/src/critter/idle.rs delete mode 100644 voxygen/src/anim/src/critter/jump.rs delete mode 100644 voxygen/src/anim/src/critter/mod.rs delete mode 100644 voxygen/src/anim/src/critter/run.rs create mode 100644 voxygen/src/anim/src/theropod/idle.rs create mode 100644 voxygen/src/anim/src/theropod/jump.rs create mode 100644 voxygen/src/anim/src/theropod/mod.rs create mode 100644 voxygen/src/anim/src/theropod/run.rs diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index d24db1222a..d8d7b341f8 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -461,6 +461,30 @@ "frog": { "keyword": "frog", "generic": "Frog" + }, + "rat": { + "keyword": "rat", + "generic": "Rat" + }, + "axolotl": { + "keyword": "axolotl", + "generic": "Axolotl" + }, + "gecko": { + "keyword": "gecko", + "generic": "Gecko" + }, + "turtle": { + "keyword": "turtle", + "generic": "Turtle" + }, + "squirrel": { + "keyword": "squirrel", + "generic": "Squirrel" + }, + "fungome": { + "keyword": "fungome", + "generic": "Fungome" } } }, @@ -550,37 +574,21 @@ } } }, - "critter": { + "theropod": { "body": { - "keyword": "critter", + "keyword": "theropod", "names": [ "Remy" ] }, "species": { - "rat": { - "keyword": "rat", - "generic": "Rat" + "archaeos": { + "keyword": "archaeos", + "generic": "Archaeos" }, - "axolotl": { - "keyword": "axolotl", - "generic": "Axolotl" - }, - "gecko": { - "keyword": "gecko", - "generic": "Gecko" - }, - "turtle": { - "keyword": "turtle", - "generic": "Turtle" - }, - "squirrel": { - "keyword": "squirrel", - "generic": "Squirrel" - }, - "fungome": { - "keyword": "fungome", - "generic": "Fungome" + "odontotyrannos": { + "keyword": "odontotyrannos", + "generic": "Odontotyrannos" } } }, diff --git a/assets/voxygen/voxel/critter_center_manifest.ron b/assets/voxygen/voxel/critter_center_manifest.ron deleted file mode 100644 index 038fcfc611..0000000000 --- a/assets/voxygen/voxel/critter_center_manifest.ron +++ /dev/null @@ -1,266 +0,0 @@ -({ - (Rat, Male): ( - head: ( - offset: (-4.5, -4.0, -4.0), - center: ("npc.rat.male.head"), - ), - chest: ( - offset: (-4.5, -6.0, -4.0), - center: ("npc.rat.male.chest"), - ), - feet_f: ( - offset: (-4.0, -1.5, -1.0), - center: ("npc.rat.male.feet_f"), - ), - feet_b: ( - offset: (-4.0, -1.5, -1.0), - center: ("npc.rat.male.feet_b"), - ), - tail: ( - offset: (-0.5, -4.0, -1.5), - center: ("npc.rat.male.tail"), - ), - ), - (Rat, Female): ( - head: ( - offset: (-4.5, -4.0, -4.0), - center: ("npc.rat.male.head"), - ), - chest: ( - offset: (-4.5, -6.0, -4.0), - center: ("npc.rat.male.chest"), - ), - feet_f: ( - offset: (-4.0, -1.5, -1.0), - center: ("npc.rat.male.feet_f"), - ), - feet_b: ( - offset: (-4.0, -1.5, -1.0), - center: ("npc.rat.male.feet_b"), - ), - tail: ( - offset: (-0.5, -4.0, -1.5), - center: ("npc.rat.male.tail"), - ), - ), - (Axolotl, Male): ( - head: ( - offset: (-3.5, -4.0, -2.0), - center: ("npc.axolotl.male.head"), - ), - chest: ( - offset: (-2.5, -4.0, -1.5), - center: ("npc.axolotl.male.chest"), - ), - feet_f: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.axolotl.male.feet_f"), - ), - feet_b: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.axolotl.male.feet_b"), - ), - tail: ( - offset: (-1.5, -2.5, -1.5), - center: ("npc.axolotl.male.tail"), - ), - ), - (Axolotl, Female): ( - head: ( - offset: (-3.5, -4.0, -2.0), - center: ("npc.axolotl.male.head"), - ), - chest: ( - offset: (-2.5, -4.0, -1.5), - center: ("npc.axolotl.male.chest"), - ), - feet_f: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.axolotl.male.feet_f"), - ), - feet_b: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.axolotl.male.feet_b"), - ), - tail: ( - offset: (-1.5, -2.5, -1.5), - center: ("npc.axolotl.male.tail"), - ), - ), - (Gecko, Male): ( - head: ( - offset: (-2.5, -3.0, -2.0), - center: ("npc.gecko.male.head"), - ), - chest: ( - offset: (-1.5, -4.0, -2.0), - center: ("npc.gecko.male.chest"), - ), - feet_f: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.gecko.male.feet_f"), - ), - feet_b: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.gecko.male.feet_b"), - ), - tail: ( - offset: (-0.5, -2.5, -1.0), - center: ("npc.gecko.male.tail"), - ), - ), - (Gecko, Female): ( - head: ( - offset: (-2.5, -3.0, -2.0), - center: ("npc.gecko.male.head"), - ), - chest: ( - offset: (-1.5, -4.0, -1.5), - center: ("npc.gecko.male.chest"), - ), - feet_f: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.gecko.male.feet_f"), - ), - feet_b: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.gecko.male.feet_b"), - ), - tail: ( - offset: (-0.5, -2.5, -1.0), - center: ("npc.gecko.male.tail"), - ), - ), - (Turtle, Male): ( - head: ( - offset: (-2.5, -2.5, -2.5), - center: ("npc.turtle.male.head"), - ), - chest: ( - offset: (-6.0, -6.0, -4.0), - center: ("npc.turtle.male.chest"), - ), - feet_f: ( - offset: (-5.0, -0.5, -1.0), - center: ("npc.turtle.male.feet_f"), - ), - feet_b: ( - offset: (-5.0, -0.5, -1.0), - center: ("npc.turtle.male.feet_b"), - ), - tail: ( - offset: (-0.5, -2.0, -1.0), - center: ("npc.turtle.male.tail"), - ), - ), - (Turtle, Female): ( - head: ( - offset: (-2.5, -2.5, -2.5), - center: ("npc.turtle.male.head"), - ), - chest: ( - offset: (-6.0, -6.0, -4.0), - center: ("npc.turtle.male.chest"), - ), - feet_f: ( - offset: (-5.0, -0.5, -1.0), - center: ("npc.turtle.male.feet_f"), - ), - feet_b: ( - offset: (-5.0, -0.5, -1.0), - center: ("npc.turtle.male.feet_b"), - ), - tail: ( - offset: (-0.5, -2.0, -1.0), - center: ("npc.turtle.male.tail"), - ), - ), - (Squirrel, Male): ( - head: ( - offset: (-1.5, -2.0, -2.0), - center: ("npc.squirrel.male.head"), - ), - chest: ( - offset: (-1.5, -3.0, -1.5), - center: ("npc.squirrel.male.chest"), - ), - feet_f: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.squirrel.male.feet_f"), - ), - feet_b: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.squirrel.male.feet_b"), - ), - tail: ( - offset: (-1.5, -1.5, -3.0), - center: ("npc.squirrel.male.tail"), - ), - ), - (Squirrel, Female): ( - head: ( - offset: (-1.5, -2.0, -2.0), - center: ("npc.squirrel.male.head"), - ), - chest: ( - offset: (-1.5, -3.0, -1.5), - center: ("npc.squirrel.male.chest"), - ), - feet_f: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.squirrel.male.feet_f"), - ), - feet_b: ( - offset: (-2.0, -0.5, -1.0), - center: ("npc.squirrel.male.feet_b"), - ), - tail: ( - offset: (-1.5, -1.5, -3.0), - center: ("npc.squirrel.male.tail"), - ), - ), - (Fungome, Male): ( - head: ( - offset: (-2.5, -1.5, -2.0), - center: ("npc.fungome.male.head"), - ), - chest: ( - offset: (-6.0, -6.0, -4.0), - center: ("npc.fungome.male.chest"), - ), - feet_f: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.fungome.male.feet_f"), - ), - feet_b: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.fungome.male.feet_b"), - ), - tail: ( - offset: (-1.0, -0.5, -1.0), - center: ("npc.fungome.male.tail"), - ), - ), - (Fungome, Female): ( - head: ( - offset: (-2.5, -1.5, -2.0), - center: ("npc.fungome.male.head"), - ), - chest: ( - offset: (-6.0, -6.0, -4.0), - center: ("npc.fungome.male.chest"), - ), - feet_f: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.fungome.male.feet_f"), - ), - feet_b: ( - offset: (-3.0, -0.5, -1.0), - center: ("npc.fungome.male.feet_b"), - ), - tail: ( - offset: (-1.0, -0.5, -1.0), - center: ("npc.fungome.male.tail"), - ), - ), -}) diff --git a/assets/voxygen/voxel/npc/archaeos/male/chest_back.vox b/assets/voxygen/voxel/npc/archaeos/male/chest_back.vox new file mode 100644 index 0000000000..4fd232a069 --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/chest_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c85abf7d62872c13073d1c9ba2722a788c05c74843a2fa7aabd8512058287b8 +size 3580 diff --git a/assets/voxygen/voxel/npc/archaeos/male/chest_front.vox b/assets/voxygen/voxel/npc/archaeos/male/chest_front.vox new file mode 100644 index 0000000000..811b5409bb --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/chest_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f468da4caa09bb6cbb0e782cd70fc326b767fc27faad63c1fad1b1dd1de5e6b +size 5608 diff --git a/assets/voxygen/voxel/npc/archaeos/male/foot_l.vox b/assets/voxygen/voxel/npc/archaeos/male/foot_l.vox new file mode 100644 index 0000000000..03a9710acd --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/foot_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00268caa63742ad6b6ecec52881a67bf1efc4cb914d0f95e3e42610b25a71685 +size 2204 diff --git a/assets/voxygen/voxel/npc/archaeos/male/foot_r.vox b/assets/voxygen/voxel/npc/archaeos/male/foot_r.vox new file mode 100644 index 0000000000..9fe3eed0d0 --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:855290c70bc7926c9c95c2e0ab4cc4d0c6a99bd6f3c037ff9548f5d6726dfdaa +size 2204 diff --git a/assets/voxygen/voxel/npc/archaeos/male/hand_l.vox b/assets/voxygen/voxel/npc/archaeos/male/hand_l.vox new file mode 100644 index 0000000000..1151e23ba6 --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/hand_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db3c129d96bf431c65c7e8f3ac4049c82682a630806a616ba57f7d844f355a7a +size 1316 diff --git a/assets/voxygen/voxel/npc/archaeos/male/hand_r.vox b/assets/voxygen/voxel/npc/archaeos/male/hand_r.vox new file mode 100644 index 0000000000..495a897c9a --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/hand_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430c1c47e72e031a20e7ee67de569918584c2d434121961f1b160346ab91146d +size 1316 diff --git a/assets/voxygen/voxel/npc/archaeos/male/head.vox b/assets/voxygen/voxel/npc/archaeos/male/head.vox new file mode 100644 index 0000000000..ee2d960dac --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e7420c1ff8494b9025a963b48f8caf8e7db2b92fa15032983022c9b3a45a907 +size 2884 diff --git a/assets/voxygen/voxel/npc/archaeos/male/jaw.vox b/assets/voxygen/voxel/npc/archaeos/male/jaw.vox new file mode 100644 index 0000000000..3642958e4f --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b8e90768bb66034e1cc6cfec2ef9db70448821eef438d4e9a7c278252ae4344 +size 2300 diff --git a/assets/voxygen/voxel/npc/archaeos/male/leg_l.vox b/assets/voxygen/voxel/npc/archaeos/male/leg_l.vox new file mode 100644 index 0000000000..3d553d3f5c --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cfad23ebce2f98a450497f430e2733c013697144f4550ff2bf4375b8744ca90 +size 2540 diff --git a/assets/voxygen/voxel/npc/archaeos/male/leg_r.vox b/assets/voxygen/voxel/npc/archaeos/male/leg_r.vox new file mode 100644 index 0000000000..f9ce12f95f --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f75106d357c8c677f3f19d8febd9ed399e23e6572372df601af16ab4dc38cb22 +size 2540 diff --git a/assets/voxygen/voxel/npc/archaeos/male/neck.vox b/assets/voxygen/voxel/npc/archaeos/male/neck.vox new file mode 100644 index 0000000000..694e43c092 --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34b4900065f932ce51df7a3c9683bd2f5840f9fae14a5ab682c7ff12a9f577d8 +size 2836 diff --git a/assets/voxygen/voxel/npc/archaeos/male/tail_back.vox b/assets/voxygen/voxel/npc/archaeos/male/tail_back.vox new file mode 100644 index 0000000000..0e7c854337 --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/tail_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94c532de8ab002976e71f300003b1d7d6c82794a436de7e4232cce56b9e8b50c +size 2624 diff --git a/assets/voxygen/voxel/npc/archaeos/male/tail_front.vox b/assets/voxygen/voxel/npc/archaeos/male/tail_front.vox new file mode 100644 index 0000000000..21221ff729 --- /dev/null +++ b/assets/voxygen/voxel/npc/archaeos/male/tail_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1254eaadefcb5c5125ed421dcab79588a203719bab20c7303afa63c7a8dc3234 +size 1960 diff --git a/assets/voxygen/voxel/npc/axolotl/male/chest.vox b/assets/voxygen/voxel/npc/axolotl/male/chest.vox index d0079e149c..f69772001d 100644 --- a/assets/voxygen/voxel/npc/axolotl/male/chest.vox +++ b/assets/voxygen/voxel/npc/axolotl/male/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ddc9f5687ec55dd25e98cf4f4fddca222585f9788e2480fc0d04b4095222c93d -size 1352 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/axolotl/male/feet_b.vox b/assets/voxygen/voxel/npc/axolotl/male/feet_b.vox deleted file mode 100644 index 8fe0d4abc5..0000000000 --- a/assets/voxygen/voxel/npc/axolotl/male/feet_b.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:382afa56ac6638a27743553618aef968203572ff558ed09da06b324178fa888c -size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/male/feet_f.vox b/assets/voxygen/voxel/npc/axolotl/male/feet_f.vox deleted file mode 100644 index 8fe0d4abc5..0000000000 --- a/assets/voxygen/voxel/npc/axolotl/male/feet_f.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:382afa56ac6638a27743553618aef968203572ff558ed09da06b324178fa888c -size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/feet_b.vox b/assets/voxygen/voxel/npc/axolotl/male/foot_bl.vox similarity index 100% rename from assets/voxygen/voxel/npc/turtle/male/feet_b.vox rename to assets/voxygen/voxel/npc/axolotl/male/foot_bl.vox diff --git a/assets/voxygen/voxel/npc/turtle/male/feet_f.vox b/assets/voxygen/voxel/npc/axolotl/male/foot_br.vox similarity index 100% rename from assets/voxygen/voxel/npc/turtle/male/feet_f.vox rename to assets/voxygen/voxel/npc/axolotl/male/foot_br.vox diff --git a/assets/voxygen/voxel/npc/axolotl/male/foot_fl.vox b/assets/voxygen/voxel/npc/axolotl/male/foot_fl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/male/foot_fr.vox b/assets/voxygen/voxel/npc/axolotl/male/foot_fr.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/male/head.vox b/assets/voxygen/voxel/npc/axolotl/male/head.vox index 2f44cbc2c7..9a5982b2de 100644 --- a/assets/voxygen/voxel/npc/axolotl/male/head.vox +++ b/assets/voxygen/voxel/npc/axolotl/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cdb4af85c499c53e786c9ae7591e051b951bf0c6d568b24c97b01476626c4c2 -size 1420 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/axolotl/male/tail.vox b/assets/voxygen/voxel/npc/axolotl/male/tail.vox index f16e5c2c63..20bbc2175d 100644 --- a/assets/voxygen/voxel/npc/axolotl/male/tail.vox +++ b/assets/voxygen/voxel/npc/axolotl/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:778e3722d185f4fda349efde9e31e48c0d3e257294e1874a4b6ba2422b72001f -size 1168 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/fungome/male/chest.vox b/assets/voxygen/voxel/npc/fungome/male/chest.vox index b3c3001ead..f69772001d 100644 --- a/assets/voxygen/voxel/npc/fungome/male/chest.vox +++ b/assets/voxygen/voxel/npc/fungome/male/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6266cf063932bde665aebe3708e65300a1f929205225418d0e17985dff82e908 -size 2840 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/fungome/male/feet_b.vox b/assets/voxygen/voxel/npc/fungome/male/feet_b.vox deleted file mode 100644 index 2aebd5d5c1..0000000000 --- a/assets/voxygen/voxel/npc/fungome/male/feet_b.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f56c8a2c4fcbb3a495cad034de59840078c4613447874876e22e5f442658a20a -size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/feet_f.vox b/assets/voxygen/voxel/npc/fungome/male/feet_f.vox deleted file mode 100644 index 2aebd5d5c1..0000000000 --- a/assets/voxygen/voxel/npc/fungome/male/feet_f.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f56c8a2c4fcbb3a495cad034de59840078c4613447874876e22e5f442658a20a -size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/foot_bl.vox b/assets/voxygen/voxel/npc/fungome/male/foot_bl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/foot_br.vox b/assets/voxygen/voxel/npc/fungome/male/foot_br.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/foot_fl.vox b/assets/voxygen/voxel/npc/fungome/male/foot_fl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/foot_fr.vox b/assets/voxygen/voxel/npc/fungome/male/foot_fr.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/head.vox b/assets/voxygen/voxel/npc/fungome/male/head.vox index 68d5137b0b..9a5982b2de 100644 --- a/assets/voxygen/voxel/npc/fungome/male/head.vox +++ b/assets/voxygen/voxel/npc/fungome/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3e2257aad4e4b5ba7bc43206ce8e3e19ebf4f96758a20f927589a9795197426 -size 1300 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/fungome/male/tail.vox b/assets/voxygen/voxel/npc/fungome/male/tail.vox index c0d69871b7..20bbc2175d 100644 --- a/assets/voxygen/voxel/npc/fungome/male/tail.vox +++ b/assets/voxygen/voxel/npc/fungome/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56c4dc3e1de0732fd1e1cbdb5b8bcaf0df7f7549130624d4d6cf82d9fe0132df -size 1108 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/gecko/male/chest.vox b/assets/voxygen/voxel/npc/gecko/male/chest.vox index 5bfce4e9b0..f69772001d 100644 --- a/assets/voxygen/voxel/npc/gecko/male/chest.vox +++ b/assets/voxygen/voxel/npc/gecko/male/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0f3c9de244922e529ecf3b5be4f2c5b59030d5ec3cc4d31647d3b294645390f -size 1268 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/gecko/male/feet_b.vox b/assets/voxygen/voxel/npc/gecko/male/feet_b.vox deleted file mode 100644 index 0e6ac3aaf0..0000000000 --- a/assets/voxygen/voxel/npc/gecko/male/feet_b.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c27fa19b797d1c973c6e6155b47df80caeed8c3e1f793f0854b603198e57ea5 -size 1112 diff --git a/assets/voxygen/voxel/npc/gecko/male/feet_f.vox b/assets/voxygen/voxel/npc/gecko/male/feet_f.vox deleted file mode 100644 index 450e1421c7..0000000000 --- a/assets/voxygen/voxel/npc/gecko/male/feet_f.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7d5f09fb478759d81983e61609c461c87f8e79e533e067533306e25b941c3e15 -size 1112 diff --git a/assets/voxygen/voxel/npc/gecko/male/foot_bl.vox b/assets/voxygen/voxel/npc/gecko/male/foot_bl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/gecko/male/foot_br.vox b/assets/voxygen/voxel/npc/gecko/male/foot_br.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/gecko/male/foot_fl.vox b/assets/voxygen/voxel/npc/gecko/male/foot_fl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/gecko/male/foot_fr.vox b/assets/voxygen/voxel/npc/gecko/male/foot_fr.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/gecko/male/head.vox b/assets/voxygen/voxel/npc/gecko/male/head.vox index 95b106dbed..9a5982b2de 100644 --- a/assets/voxygen/voxel/npc/gecko/male/head.vox +++ b/assets/voxygen/voxel/npc/gecko/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35891c200c205b7848f2dbf40fe2074d1ce0b1543cb7a6075fb22be589b98c2e -size 1372 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/gecko/male/tail.vox b/assets/voxygen/voxel/npc/gecko/male/tail.vox index bb8a7563f9..20bbc2175d 100644 --- a/assets/voxygen/voxel/npc/gecko/male/tail.vox +++ b/assets/voxygen/voxel/npc/gecko/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:451f6c6a9d83da6acd25d9048e69c40cd3b9b3ff312267a988aae35df37ab238 -size 1124 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-0.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-0.vox new file mode 100644 index 0000000000..e0159b79c2 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-0.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d020f6462cc68320888396f85094a4f322c57ce41c1817e9d9e4cf1c3616fd0f +size 4416 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-1.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-1.vox new file mode 100644 index 0000000000..40925e41d1 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-1.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e5b872c14997786fc6e9fdf071f113720198bc126e90335a16c7f25f3d38c3a +size 2788 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-10.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-10.vox new file mode 100644 index 0000000000..42189b7f0b --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-10.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d7e3cab3f2a990ee083b02a292b972844e05124ace87575f72adc6b4c683fcf +size 2952 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-11.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-11.vox new file mode 100644 index 0000000000..47a9744a10 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-11.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:067074f802303741d404e130b5e9ac0ee859c0199ecfff9a46e52c97dffd8150 +size 1228 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-2.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-2.vox new file mode 100644 index 0000000000..f284891dbd --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-2.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3163d19b490d5fb52e2d144ae8a7b9acb27f87ecc0d02d7a32b5f3998c02f5cf +size 5624 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-3.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-3.vox new file mode 100644 index 0000000000..86a229eee4 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-3.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74cf342ba8615e629de169785cc4d381be30e3989a2a1432255392e12425b99e +size 4244 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-4.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-4.vox new file mode 100644 index 0000000000..42189b7f0b --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-4.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d7e3cab3f2a990ee083b02a292b972844e05124ace87575f72adc6b4c683fcf +size 2952 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-5.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-5.vox new file mode 100644 index 0000000000..3e2578dbc3 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-5.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bc3d9f3b008cf8ab7e32a0923a3744c3b7354ef8da305b7d21f6f40601e8d63 +size 2476 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-6.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-6.vox new file mode 100644 index 0000000000..4f7f97380c --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-6.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6912093b51066d2c34c51fcb3db6ebd90f77090becb2c64e0ef9b1114084471e +size 1228 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-7.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-7.vox new file mode 100644 index 0000000000..c4fc4fa756 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-7.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5de93f6ad8b5d6631d0a2d3290a7fc42c4ac182a77802c311fc20f60f10c83d2 +size 2272 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-8.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-8.vox new file mode 100644 index 0000000000..876627ff0d --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-8.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4225127e6a0b8d14d06652c665ef7334bcfd9a440c73e3bd5a8507fbf66ee34a +size 1932 diff --git a/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-9.vox b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-9.vox new file mode 100644 index 0000000000..3e2578dbc3 --- /dev/null +++ b/assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-9.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bc3d9f3b008cf8ab7e32a0923a3744c3b7354ef8da305b7d21f6f40601e8d63 +size 2476 diff --git a/assets/voxygen/voxel/npc/rat/male/chest.vox b/assets/voxygen/voxel/npc/rat/male/chest.vox index b52ca54ea4..f69772001d 100644 --- a/assets/voxygen/voxel/npc/rat/male/chest.vox +++ b/assets/voxygen/voxel/npc/rat/male/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c46d59e54f15dd391deffd416050ed7da07fc4bdd9440fa956ab3f65078d1fac -size 3636 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/rat/male/feet_b.vox b/assets/voxygen/voxel/npc/rat/male/feet_b.vox deleted file mode 100644 index b5792500cd..0000000000 --- a/assets/voxygen/voxel/npc/rat/male/feet_b.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 -size 1168 diff --git a/assets/voxygen/voxel/npc/rat/male/feet_f.vox b/assets/voxygen/voxel/npc/rat/male/feet_f.vox deleted file mode 100644 index b5792500cd..0000000000 --- a/assets/voxygen/voxel/npc/rat/male/feet_f.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 -size 1168 diff --git a/assets/voxygen/voxel/npc/rat/male/feet_r.vox b/assets/voxygen/voxel/npc/rat/male/feet_r.vox deleted file mode 100644 index b5792500cd..0000000000 --- a/assets/voxygen/voxel/npc/rat/male/feet_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 -size 1168 diff --git a/assets/voxygen/voxel/npc/rat/male/foot_bl.vox b/assets/voxygen/voxel/npc/rat/male/foot_bl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/rat/male/foot_br.vox b/assets/voxygen/voxel/npc/rat/male/foot_br.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/rat/male/foot_fl.vox b/assets/voxygen/voxel/npc/rat/male/foot_fl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/rat/male/foot_fr.vox b/assets/voxygen/voxel/npc/rat/male/foot_fr.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/rat/male/head.vox b/assets/voxygen/voxel/npc/rat/male/head.vox index 6e680d1028..9a5982b2de 100644 --- a/assets/voxygen/voxel/npc/rat/male/head.vox +++ b/assets/voxygen/voxel/npc/rat/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61fb2a387492fd6aef77b26184e90afd712316aa21090617ee621d6fd76be722 -size 1656 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/rat/male/tail.vox b/assets/voxygen/voxel/npc/rat/male/tail.vox index 43015d4188..20bbc2175d 100644 --- a/assets/voxygen/voxel/npc/rat/male/tail.vox +++ b/assets/voxygen/voxel/npc/rat/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52e33f3f0b42eae270513d68e8bfd39f70d2e838789dc83156ea4c5b4b3e33f3 -size 1136 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/squirrel/male/chest.vox b/assets/voxygen/voxel/npc/squirrel/male/chest.vox index d3ef9e4e8d..f69772001d 100644 --- a/assets/voxygen/voxel/npc/squirrel/male/chest.vox +++ b/assets/voxygen/voxel/npc/squirrel/male/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77b379b111e3e4c629b49b653310070d4a91f4cd40aef58f36c176ec7c2acafc -size 1212 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/squirrel/male/feet_b.vox b/assets/voxygen/voxel/npc/squirrel/male/feet_b.vox deleted file mode 100644 index 016a819839..0000000000 --- a/assets/voxygen/voxel/npc/squirrel/male/feet_b.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce618962f93c5a5e53d09fcb3b1410565d6a3a8a10868011a869e7b886dca05a -size 1112 diff --git a/assets/voxygen/voxel/npc/squirrel/male/feet_f.vox b/assets/voxygen/voxel/npc/squirrel/male/feet_f.vox deleted file mode 100644 index 016a819839..0000000000 --- a/assets/voxygen/voxel/npc/squirrel/male/feet_f.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce618962f93c5a5e53d09fcb3b1410565d6a3a8a10868011a869e7b886dca05a -size 1112 diff --git a/assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox b/assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/squirrel/male/foot_br.vox b/assets/voxygen/voxel/npc/squirrel/male/foot_br.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox b/assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/squirrel/male/foot_fr.vox b/assets/voxygen/voxel/npc/squirrel/male/foot_fr.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/squirrel/male/head.vox b/assets/voxygen/voxel/npc/squirrel/male/head.vox index c0f7b856db..9a5982b2de 100644 --- a/assets/voxygen/voxel/npc/squirrel/male/head.vox +++ b/assets/voxygen/voxel/npc/squirrel/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ab082812e15cccf183525025bcec751e6c1995fcd4756b919eda82c53c76a9b -size 1264 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/squirrel/male/tail.vox b/assets/voxygen/voxel/npc/squirrel/male/tail.vox index 648f09505f..20bbc2175d 100644 --- a/assets/voxygen/voxel/npc/squirrel/male/tail.vox +++ b/assets/voxygen/voxel/npc/squirrel/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3faa8bfd0bedaea5cf14b3d5ca69e47848c0cbe40938e8caa9ca0c0d57aa5edf -size 1208 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/turtle/male/foot_bl.vox b/assets/voxygen/voxel/npc/turtle/male/foot_bl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/foot_br.vox b/assets/voxygen/voxel/npc/turtle/male/foot_br.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/foot_fl.vox b/assets/voxygen/voxel/npc/turtle/male/foot_fl.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/foot_fr.vox b/assets/voxygen/voxel/npc/turtle/male/foot_fr.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index d1d5628738..d8fdc201fe 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -462,4 +462,172 @@ central: ("armor.empty"), ), ), + (Rat, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Rat, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Axolotl, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Axolotl, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Gecko, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.frog.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Gecko, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.frog.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.gecko.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Turtle, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.turtle.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.turtle.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Turtle, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.turtle.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.turtle.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Squirrel, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.squirrel.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.squirrel.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Squirrel, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.squirrel.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.squirrel.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Fungome, Male):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.fungome.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.fungome.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Fungome, Female):( + head: ( + offset: (-3.5, 0.0, -3.0), + central: ("npc.fungome.male.head"), + ), + chest: ( + offset: (-3.5, -5.0, -3.0), + central: ("npc.fungome.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index d89037e22b..2d2399e6c0 100644 --- a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -575,7 +575,6 @@ lateral: ("npc.frog.male.foot_br"), ), ), - (Frog, Female): ( left_front: ( offset: (-2.5, -2.5, -4.0), @@ -594,4 +593,220 @@ lateral: ("npc.frog.male.foot_br"), ), ), + (Rat, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.rat.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.rat.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.rat.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.rat.male.foot_br"), + ), + ), + (Rat, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.rat.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.rat.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.rat.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.rat.male.foot_br"), + ), + ), + (Axolotl, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.axolotl.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.axolotl.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.axolotl.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.axolotl.male.foot_br"), + ), + ), + (Axolotl, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.axolotl.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.axolotl.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.axolotl.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.axolotl.male.foot_br"), + ), + ), + (Gecko, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.gecko.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.gecko.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.gecko.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.gecko.male.foot_br"), + ), + ), + (Gecko, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.gecko.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.gecko.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.gecko.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.gecko.male.foot_br"), + ), + ), + (Turtle, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.turtle.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.turtle.male.foot_br"), + ), + ), + (Turtle, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.turtle.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.turtle.male.foot_br"), + ), + ), + (Squirrel, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.squirrel.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.squirrel.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.squirrel.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.squirrel.male.foot_br"), + ), + ), + (Squirrel, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.squirrel.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.squirrel.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.squirrel.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.squirrel.male.foot_br"), + ), + ), + (Fungome, Male): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.fungome.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.fungome.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.fungome.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.fungome.male.foot_br"), + ), + ), + (Fungome, Female): ( + left_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.fungome.male.foot_fl"), + ), + right_front: ( + offset: (-2.5, -2.5, -4.0), + lateral: ("npc.fungome.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.fungome.male.foot_bl"), + ), + right_back: ( + offset: (-2.5, -3.5, -4.0), + lateral: ("npc.fungome.male.foot_br"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/theropod_central_manifest.ron b/assets/voxygen/voxel/theropod_central_manifest.ron new file mode 100644 index 0000000000..1b21ef0838 --- /dev/null +++ b/assets/voxygen/voxel/theropod_central_manifest.ron @@ -0,0 +1,122 @@ +({ + (Archaeos, Male): ( + head: ( + offset: (-4.5, 0.0, -5.0), + central: ("npc.archaeos.male.head"), + ), + jaw: ( + offset: (-4.5, -9.0, -3.0), + central: ("npc.archaeos.male.jaw"), + ), + neck: ( + offset: (-4.5, 0.0, -3.0), + central: ("npc.archaeos.male.neck"), + ), + chest_front: ( + offset: (-7.5, -5.5, -7.0), + central: ("npc.archaeos.male.chest_front"), + ), + chest_back: ( + offset: (-4.5, -9.0, -7.0), + central: ("npc.archaeos.male.chest_back"), + ), + tail_front: ( + offset: (-3.5, -8.0, -3.5), + central: ("npc.archaeos.male.tail_front"), + ), + tail_back: ( + offset: (-7.5, -11.0, -3.0), + central: ("npc.archaeos.male.tail_back"), + ), + ), + (Archaeos, Female): ( + head: ( + offset: (-4.5, 0.0, -5.0), + central: ("npc.archaeos.male.head"), + ), + jaw: ( + offset: (-4.5, -9.0, -3.0), + central: ("npc.archaeos.male.jaw"), + ), + neck: ( + offset: (-4.5, 0.0, -3.0), + central: ("npc.archaeos.male.neck"), + ), + chest_front: ( + offset: (-7.5, -5.5, -7.0), + central: ("npc.archaeos.male.chest_front"), + ), + chest_back: ( + offset: (-4.5, -9.0, -7.0), + central: ("npc.archaeos.male.chest_back"), + ), + tail_front: ( + offset: (-3.5, -8.0, -3.5), + central: ("npc.archaeos.male.tail_front"), + ), + tail_back: ( + offset: (-7.5, -11.0, -3.0), + central: ("npc.archaeos.male.tail_back"), + ), + ), + (Odontotyrannos, Male): ( + head: ( + offset: (-4.5, -4.0, -4.0), + central: ("npc.rat.male.head"), + ), + jaw: ( + offset: (-4.5, -6.0, -4.0), + central: ("npc.rat.male.chest"), + ), + neck: ( + offset: (-4.0, -1.5, -1.0), + central: ("npc.rat.male.chest"), + ), + chest_front: ( + offset: (-4.0, -1.5, -1.0), + central: ("npc.rat.male.chest"), + ), + chest_back: ( + offset: (-4.0, -1.5, -1.0), + central: ("npc.rat.male.chest"), + ), + tail_front: ( + offset: (-0.5, -4.0, -1.5), + central: ("npc.rat.male.chest"), + ), + tail_back: ( + offset: (-0.5, -4.0, -1.5), + central: ("npc.rat.male.chest"), + ), + ), + (Odontotyrannos, Female): ( + head: ( + offset: (-4.5, -4.0, -4.0), + central: ("npc.rat.male.head"), + ), + jaw: ( + offset: (-4.5, -6.0, -4.0), + central: ("npc.rat.male.chest"), + ), + neck: ( + offset: (-4.0, -1.5, -1.0), + central: ("npc.rat.male.chest"), + ), + chest_front: ( + offset: (-4.0, -1.5, -1.0), + central: ("npc.rat.male.chest"), + ), + chest_back: ( + offset: (-4.0, -1.5, -1.0), + central: ("npc.rat.male.chest"), + ), + tail_front: ( + offset: (-0.5, -4.0, -1.5), + central: ("npc.rat.male.chest"), + ), + tail_back: ( + offset: (-0.5, -4.0, -1.5), + central: ("npc.rat.male.chest"), + ), + ), +}) diff --git a/assets/voxygen/voxel/theropod_lateral_manifest.ron b/assets/voxygen/voxel/theropod_lateral_manifest.ron new file mode 100644 index 0000000000..67e48db670 --- /dev/null +++ b/assets/voxygen/voxel/theropod_lateral_manifest.ron @@ -0,0 +1,106 @@ +({ + (Archaeos, Male): ( + hand_l: ( + offset: (-4.0, 2.0, -9.0), + lateral: ("npc.archaeos.male.hand_l"), + ), + hand_r: ( + offset: (0.0, -2.0, -4.0), + lateral: ("npc.archaeos.male.hand_r"), + ), + leg_l: ( + offset: (-6.0, -4.5, -8.0), + lateral: ("npc.archaeos.male.leg_l"), + ), + leg_r: ( + offset: (0.0, -4.5, -8.0), + lateral: ("npc.archaeos.male.leg_r"), + ), + foot_l: ( + offset: (-11.0, -1.0, -8.0), + lateral: ("npc.archaeos.male.foot_l"), + ), + foot_r: ( + offset: (0.0, -1.0, -8.0), + lateral: ("npc.archaeos.male.foot_r"), + ), + ), + (Archaeos, Female): ( + hand_l: ( + offset: (-4.0, 2.0, -9.0), + lateral: ("npc.archaeos.male.hand_l"), + ), + hand_r: ( + offset: (0.0, -2.0, -4.0), + lateral: ("npc.archaeos.male.hand_r"), + ), + leg_l: ( + offset: (-6.0, -4.5, -8.0), + lateral: ("npc.archaeos.male.leg_l"), + ), + leg_r: ( + offset: (0.0, -4.5, -8.0), + lateral: ("npc.archaeos.male.leg_r"), + ), + foot_l: ( + offset: (-11.0, -1.0, -8.0), + lateral: ("npc.archaeos.male.foot_l"), + ), + foot_r: ( + offset: (0.0, -1.0, -8.0), + lateral: ("npc.archaeos.male.foot_r"), + ), + ), + (Odontotyrannos, Male): ( + hand_l: ( + offset: (-6.0, -3.5, -4.0), + lateral: ("npc.ogre.male.shoulder_l"), + ), + hand_r: ( + offset: (-6.0, -4.5, -4.0), + lateral: ("npc.ogre.male.shoulder_r"), + ), + leg_l: ( + offset: (-6.0, -3.5, -4.0), + lateral: ("npc.ogre.male.shoulder_l"), + ), + leg_r: ( + offset: (-6.0, -4.5, -4.0), + lateral: ("npc.ogre.male.shoulder_r"), + ), + foot_l: ( + offset: (-6.0, -3.5, -4.0), + lateral: ("npc.ogre.male.shoulder_l"), + ), + foot_r: ( + offset: (-6.0, -4.5, -4.0), + lateral: ("npc.ogre.male.shoulder_r"), + ), + ), + (Odontotyrannos, Female): ( + hand_l: ( + offset: (-6.0, -3.5, -4.0), + lateral: ("npc.ogre.male.shoulder_l"), + ), + hand_r: ( + offset: (-6.0, -4.5, -4.0), + lateral: ("npc.ogre.male.shoulder_r"), + ), + leg_l: ( + offset: (-6.0, -3.5, -4.0), + lateral: ("npc.ogre.male.shoulder_l"), + ), + leg_r: ( + offset: (-6.0, -4.5, -4.0), + lateral: ("npc.ogre.male.shoulder_r"), + ), + foot_l: ( + offset: (-6.0, -3.5, -4.0), + lateral: ("npc.ogre.male.shoulder_l"), + ), + foot_r: ( + offset: (-6.0, -4.5, -4.0), + lateral: ("npc.ogre.male.shoulder_r"), + ), + ), +}) diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index 218d12240d..1fc7b53371 100644 --- a/common/src/comp/agent.rs +++ b/common/src/comp/agent.rs @@ -1,5 +1,5 @@ use crate::{ - comp::{critter, humanoid, quadruped_low, quadruped_medium, quadruped_small, Body}, + comp::{humanoid, quadruped_low, quadruped_medium, quadruped_small, theropod, Body}, path::Chaser, sync::Uid, }; @@ -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, + _ => 1.0, }, Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species { quadruped_medium::Species::Tuskram => 0.8, @@ -123,10 +124,7 @@ impl<'a> From<&'a Body> for Psyche { Body::BipedLarge(_) => 1.0, Body::Object(_) => 1.0, Body::Golem(_) => 1.0, - Body::Critter(critter) => match critter.species { - critter::Species::Axolotl => 1.0, - critter::Species::Turtle => 1.0, - critter::Species::Fungome => 1.0, + Body::Theropod(theropod) => match theropod.species { _ => 0.4, }, Body::Dragon(_) => 1.0, diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index ce9895893a..986bc6647d 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -1,7 +1,6 @@ pub mod biped_large; pub mod bird_medium; pub mod bird_small; -pub mod critter; pub mod dragon; pub mod fish_medium; pub mod fish_small; @@ -11,6 +10,7 @@ pub mod object; pub mod quadruped_low; pub mod quadruped_medium; pub mod quadruped_small; +pub mod theropod; use crate::{ assets::{self, Asset}, @@ -39,7 +39,7 @@ make_case_elim!( BipedLarge(body: biped_large::Body)= 8, Object(body: object::Body) = 9, Golem(body: golem::Body) = 10, - Critter(body: critter::Body) = 11, + Theropod(body: theropod::Body) = 11, QuadrupedLow(body: quadruped_low::Body) = 12, } ); @@ -72,7 +72,7 @@ pub struct AllBodies { pub biped_large: BodyData>, pub object: BodyData, pub golem: BodyData>, - pub critter: BodyData>, + pub theropod: BodyData>, pub quadruped_low: BodyData>, } @@ -89,7 +89,7 @@ impl core::ops::Index for AllBodies &self.bird_medium.body, NpcKind::Ogre => &self.biped_large.body, NpcKind::StoneGolem => &self.golem.body, - NpcKind::Rat => &self.critter.body, + NpcKind::Archaeos => &self.theropod.body, NpcKind::Reddragon => &self.dragon.body, NpcKind::Crocodile => &self.quadruped_low.body, } @@ -114,7 +114,7 @@ impl<'a, BodyMeta, SpeciesMeta> core::ops::Index<&'a Body> for AllBodies &self.biped_large.body, Body::Object(_) => &self.object.body, Body::Golem(_) => &self.golem.body, - Body::Critter(_) => &self.critter.body, + Body::Theropod(_) => &self.theropod.body, Body::QuadrupedLow(_) => &self.quadruped_low.body, } } @@ -158,7 +158,7 @@ impl Body { quadruped_low::Species::Pangolin => 1.3, _ => 1.6, }, - Body::Critter(_) => 0.3, + Body::Theropod(_) => 0.3, Body::BirdMedium(_) => 0.35, Body::FishMedium(_) => 0.35, Body::Dragon(_) => 8.0, @@ -198,7 +198,7 @@ impl Body { quadruped_low::Species::Maneater => 4.0, _ => 1.3, }, - Body::Critter(_) => 0.7, + Body::Theropod(_) => 0.7, Body::BirdMedium(body) => match body.species { bird_medium::Species::Cockatrice => 1.8, _ => 1.1, @@ -264,7 +264,7 @@ impl Body { }, Body::Object(_) => 10000, Body::Golem(_) => 1500, - Body::Critter(_) => 50, + Body::Theropod(_) => 50, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 600, quadruped_low::Species::Alligator => 600, @@ -331,7 +331,7 @@ impl Body { }, Body::Object(_) => 10, Body::Golem(_) => 150, - Body::Critter(_) => 20, + Body::Theropod(_) => 20, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 20, quadruped_low::Species::Alligator => 20, @@ -396,7 +396,7 @@ impl Body { }, Body::Object(_) => 1, Body::Golem(_) => 75, - Body::Critter(_) => 2, + Body::Theropod(_) => 2, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 10, quadruped_low::Species::Alligator => 10, @@ -426,7 +426,7 @@ impl Body { Body::BipedLarge(_) => 2, Body::Object(_) => 0, Body::Golem(_) => 5, - Body::Critter(_) => 1, + Body::Theropod(_) => 1, Body::QuadrupedLow(_) => 1, } } @@ -473,7 +473,7 @@ impl Body { }, Body::Object(_) => 0, Body::Golem(_) => 250, - Body::Critter(_) => 10, + Body::Theropod(_) => 10, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { quadruped_low::Species::Crocodile => 50, quadruped_low::Species::Alligator => 50, @@ -502,7 +502,7 @@ impl Body { Body::BipedLarge(_) => 10.0, Body::Object(_) => 3.0, Body::Golem(_) => 7.5, - Body::Critter(_) => 3.0, + Body::Theropod(_) => 3.0, Body::QuadrupedLow(_) => 4.5, } } diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index b0829352f6..7844997cf3 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -29,29 +29,32 @@ impl From for super::Body { fn from(body: Body) -> Self { super::Body::QuadrupedSmall(body) } } -make_case_elim!( - species, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] - #[repr(u32)] - pub enum Species { - Pig = 0, - Fox = 1, - Sheep = 2, - Boar = 3, - Jackalope = 4, - Skunk = 5, - Cat = 6, - Batfox = 7, - Raccoon = 8, - Quokka = 9, - Dodarock = 10, - Holladon = 11, - Hyena = 12, - Rabbit = 13, - Truffler = 14, - Frog = 15, - } -); +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Species { + Pig = 0, + Fox = 1, + Sheep = 2, + Boar = 3, + Jackalope = 4, + Skunk = 5, + Cat = 6, + Batfox = 7, + Raccoon = 8, + Quokka = 9, + Dodarock = 10, + Holladon = 11, + Hyena = 12, + Rabbit = 13, + Truffler = 14, + Frog = 15, + Rat = 16, + Axolotl = 17, + Gecko = 18, + Turtle = 19, + Squirrel = 20, + Fungome = 21, +} /// Data representing per-species generic data. /// @@ -74,6 +77,12 @@ pub struct AllSpecies { pub rabbit: SpeciesMeta, pub truffler: SpeciesMeta, pub frog: SpeciesMeta, + pub rat: SpeciesMeta, + pub axolotl: SpeciesMeta, + pub gecko: SpeciesMeta, + pub turtle: SpeciesMeta, + pub squirrel: SpeciesMeta, + pub fungome: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -98,11 +107,17 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Rabbit => &self.rabbit, Species::Truffler => &self.truffler, Species::Frog => &self.frog, + Species::Rat => &self.rat, + Species::Axolotl => &self.axolotl, + Species::Gecko => &self.gecko, + Species::Turtle => &self.turtle, + Species::Squirrel => &self.squirrel, + Species::Fungome => &self.fungome, } } } -pub const ALL_SPECIES: [Species; 16] = [ +pub const ALL_SPECIES: [Species; 22] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -119,6 +134,12 @@ pub const ALL_SPECIES: [Species; 16] = [ Species::Rabbit, Species::Truffler, Species::Frog, + Species::Rat, + Species::Axolotl, + Species::Gecko, + Species::Turtle, + Species::Squirrel, + Species::Fungome, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/theropod.rs b/common/src/comp/body/theropod.rs index cee07dd02d..446034a128 100644 --- a/common/src/comp/body/theropod.rs +++ b/common/src/comp/body/theropod.rs @@ -22,7 +22,7 @@ impl Body { } impl From for super::Body { - fn from(body: Body) -> Self { super::Body::Critter(body) } + fn from(body: Body) -> Self { super::Body::Theropod(body) } } #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -30,7 +30,6 @@ impl From for super::Body { pub enum Species { Archaeos = 0, Odontotyrannos = 1, - } /// Data representing per-species generic data. @@ -52,10 +51,7 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies } } -pub const ALL_SPECIES: [Species; 2] = [ - Species::Archaeos, - Species::Odontotyrannos, -]; +pub const ALL_SPECIES: [Species; 2] = [Species::Archaeos, Species::Odontotyrannos]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { type IntoIter = std::iter::Copied>; diff --git a/common/src/comp/mod.rs b/common/src/comp/mod.rs index 6deb364dff..322d5025e7 100644 --- a/common/src/comp/mod.rs +++ b/common/src/comp/mod.rs @@ -25,8 +25,8 @@ pub use ability::{CharacterAbility, CharacterAbilityType, ItemConfig, Loadout}; pub use admin::{Admin, AdminList}; pub use agent::{Agent, Alignment}; pub use body::{ - biped_large, bird_medium, bird_small, critter, dragon, fish_medium, fish_small, golem, - humanoid, object, quadruped_low, quadruped_medium, quadruped_small, AllBodies, Body, BodyData, + biped_large, bird_medium, bird_small, dragon, fish_medium, fish_small, golem, humanoid, object, + quadruped_low, quadruped_medium, quadruped_small, theropod, AllBodies, Body, BodyData, }; pub use character_state::{Attacking, CharacterState, StateUpdate}; pub use chat::{ diff --git a/common/src/generation.rs b/common/src/generation.rs index e5d19437ab..65a70e6bf8 100644 --- a/common/src/generation.rs +++ b/common/src/generation.rs @@ -110,7 +110,7 @@ impl EntityInfo { Some(get_npc_name(&NPC_NAMES.quadruped_medium, body.species)) }, Body::BirdMedium(body) => Some(get_npc_name(&NPC_NAMES.bird_medium, body.species)), - Body::Critter(body) => Some(get_npc_name(&NPC_NAMES.critter, body.species)), + Body::Theropod(body) => Some(get_npc_name(&NPC_NAMES.theropod, body.species)), Body::QuadrupedSmall(body) => { Some(get_npc_name(&NPC_NAMES.quadruped_small, body.species)) }, diff --git a/common/src/loadout_builder.rs b/common/src/loadout_builder.rs index da149f4458..6ce34b0e8e 100644 --- a/common/src/loadout_builder.rs +++ b/common/src/loadout_builder.rs @@ -55,7 +55,7 @@ impl LoadoutBuilder { .lantern(Some(Item::new_from_asset_expect( "common.items.armor.starter.lantern", ))) - .glider(Some(assets::load_expect_cloned( + .glider(Some(ItemAsset::load_expect_cloned( "common.items.armor.starter.glider", ))) } diff --git a/common/src/npc.rs b/common/src/npc.rs index 815aa1e35f..881aea55fa 100644 --- a/common/src/npc.rs +++ b/common/src/npc.rs @@ -14,7 +14,7 @@ pub enum NpcKind { Pig, Duck, Ogre, - Rat, + Archaeos, StoneGolem, Reddragon, Crocodile, @@ -26,7 +26,7 @@ pub const ALL_NPCS: [NpcKind; 9] = [ NpcKind::Pig, NpcKind::Duck, NpcKind::Ogre, - NpcKind::Rat, + NpcKind::Archaeos, NpcKind::StoneGolem, NpcKind::Reddragon, NpcKind::Crocodile, @@ -94,7 +94,7 @@ pub fn kind_to_body(kind: NpcKind) -> Body { NpcKind::Wolf => comp::quadruped_medium::Body::random().into(), NpcKind::Duck => comp::bird_medium::Body::random().into(), NpcKind::Ogre => comp::biped_large::Body::random().into(), - NpcKind::Rat => comp::critter::Body::random().into(), + NpcKind::Archaeos => comp::theropod::Body::random().into(), NpcKind::StoneGolem => comp::golem::Body::random().into(), NpcKind::Reddragon => comp::dragon::Body::random().into(), NpcKind::Crocodile => comp::quadruped_low::Body::random().into(), @@ -206,9 +206,9 @@ impl NpcBody { .or_else(|| { parse( s, - NpcKind::Rat, - &npc_names.critter, - comp::critter::Body::random_with, + NpcKind::Archaeos, + &npc_names.theropod, + comp::theropod::Body::random_with, ) }) .or_else(|| { diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 579b1becb8..02cd6ebfd4 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -41,7 +41,7 @@ impl Body { Body::BipedLarge(_) => 75.0, Body::Object(_) => 40.0, Body::Golem(_) => 60.0, - Body::Critter(_) => 85.0, + Body::Theropod(_) => 85.0, Body::QuadrupedLow(_) => 120.0, } } @@ -59,7 +59,7 @@ impl Body { Body::BipedLarge(_) => 12.0, Body::Object(_) => 5.0, Body::Golem(_) => 8.0, - Body::Critter(_) => 35.0, + Body::Theropod(_) => 35.0, Body::QuadrupedLow(_) => 12.0, } } diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index b499b3dd6f..cef530ce5d 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -317,9 +317,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc 7 => "common.loot_tables.loot_table_weapon_rare", _ => "common.loot_tables.loot_table", }, - Some(common::comp::Body::Critter(_)) => { - "common.loot_tables.loot_table_animal_parts" - }, + Some(common::comp::Body::Theropod(_)) => "common.loot_tables.loot_table_animal_parts", Some(common::comp::Body::Dragon(_)) => "common.loot_tables.loot_table_weapon_rare", Some(common::comp::Body::QuadrupedLow(_)) => match rng.gen_range(0, 3) { 0 => "common.loot_tables.loot_table_food", diff --git a/voxygen/src/anim/src/critter/idle.rs b/voxygen/src/anim/src/critter/idle.rs deleted file mode 100644 index 192a89cab0..0000000000 --- a/voxygen/src/anim/src/critter/idle.rs +++ /dev/null @@ -1,68 +0,0 @@ -use super::{super::Animation, CritterAttr, CritterSkeleton}; -//use std::{f32::consts::PI, ops::Mul}; -use super::super::vek::*; -use std::{f32::consts::PI, ops::Mul}; - -pub struct IdleAnimation; - -impl Animation for IdleAnimation { - type Dependency = f64; - type Skeleton = CritterSkeleton; - - #[cfg(feature = "use-dyn-lib")] - const UPDATE_FN: &'static [u8] = b"critter_idle\0"; - - #[cfg_attr(feature = "be-dyn-lib", export_name = "critter_idle")] - fn update_skeleton_inner( - skeleton: &Self::Skeleton, - global_time: Self::Dependency, - anim_time: f64, - _rate: &mut f32, - skeleton_attr: &CritterAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let wave = (anim_time as f32 * 10.0).sin(); - let wave_slow = (anim_time as f32 * 5.5 + PI).sin(); - - let rat_head_look = Vec2::new( - ((global_time + anim_time) as f32 / 3.0) - .floor() - .mul(7331.0) - .sin() - * 0.5, - ((global_time + anim_time) as f32 / 3.0) - .floor() - .mul(1337.0) - .sin() - * 0.25, - ); - next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); - next.head.orientation = Quaternion::rotation_z(rat_head_look.x) - * Quaternion::rotation_x(rat_head_look.y + wave * 0.03); - next.head.scale = Vec3::one(); - - next.chest.position = Vec3::new( - 0.0, - skeleton_attr.chest.0, - skeleton_attr.chest.1 + wave * 0.3, - ) / 18.0; - next.chest.orientation = Quaternion::rotation_y(wave_slow * 0.06); - next.chest.scale = Vec3::one() / 18.0; - - next.feet_f.position = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); - next.feet_f.orientation = Quaternion::rotation_z(0.0); - next.feet_f.scale = Vec3::one(); - - next.feet_b.position = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1); - next.feet_b.orientation = Quaternion::rotation_x(0.0); - next.feet_b.scale = Vec3::one(); - - next.tail.position = - Vec3::new(0.0, skeleton_attr.tail.0 + wave * 0.2, skeleton_attr.tail.1); - next.tail.orientation = Quaternion::rotation_y(wave_slow * 0.05); - next.tail.scale = Vec3::one(); - - next - } -} diff --git a/voxygen/src/anim/src/critter/jump.rs b/voxygen/src/anim/src/critter/jump.rs deleted file mode 100644 index 7630744289..0000000000 --- a/voxygen/src/anim/src/critter/jump.rs +++ /dev/null @@ -1,48 +0,0 @@ -use super::{super::Animation, CritterAttr, CritterSkeleton}; -//use std::f32::consts::PI; -use super::super::vek::*; - -pub struct JumpAnimation; - -impl Animation for JumpAnimation { - type Dependency = (f32, f64); - type Skeleton = CritterSkeleton; - - #[cfg(feature = "use-dyn-lib")] - const UPDATE_FN: &'static [u8] = b"critter_jump\0"; - - #[cfg_attr(feature = "be-dyn-lib", export_name = "critter_jump")] - fn update_skeleton_inner( - skeleton: &Self::Skeleton, - _global_time: Self::Dependency, - _anim_time: f64, - _rate: &mut f32, - skeleton_attr: &CritterAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let wave = (_anim_time as f32 * 1.0).sin(); - - next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); - next.head.orientation = Quaternion::rotation_z(0.8) * Quaternion::rotation_x(0.5); - next.head.scale = Vec3::one(); - - next.chest.position = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) / 18.0; - next.chest.orientation = Quaternion::rotation_y(0.0); - next.chest.scale = Vec3::one() / 18.0; - - next.feet_f.position = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); - next.feet_f.orientation = Quaternion::rotation_x(wave * 0.4); - next.feet_f.scale = Vec3::one(); - - next.feet_b.position = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1); - next.feet_b.orientation = Quaternion::rotation_x(wave * 0.4); - next.feet_b.scale = Vec3::one(); - - next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); - next.tail.orientation = Quaternion::rotation_y(0.0); - next.tail.scale = Vec3::one(); - - next - } -} diff --git a/voxygen/src/anim/src/critter/mod.rs b/voxygen/src/anim/src/critter/mod.rs deleted file mode 100644 index f83461a23b..0000000000 --- a/voxygen/src/anim/src/critter/mod.rs +++ /dev/null @@ -1,136 +0,0 @@ -pub mod idle; -pub mod jump; -pub mod run; - -// Reexports -pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation}; - -use super::{make_bone, vek::*, FigureBoneData, Skeleton}; -use common::comp::{self}; -use core::convert::TryFrom; - -pub type Body = comp::critter::Body; - -skeleton_impls!(struct CritterSkeleton { - + head, - + chest, - + feet_f, - + feet_b, - + tail, -}); - -pub struct CritterAttr { - head: (f32, f32), - chest: (f32, f32), - feet_f: (f32, f32), - feet_b: (f32, f32), - tail: (f32, f32), -} - -impl Skeleton for CritterSkeleton { - type Attr = CritterAttr; - type Body = Body; - - const BONE_COUNT: usize = 5; - #[cfg(feature = "use-dyn-lib")] - const COMPUTE_FN: &'static [u8] = b"critter_compute_mats\0"; - - #[cfg_attr(feature = "be-dyn-lib", export_name = "critter_compute_mats")] - - fn compute_matrices_inner( - &self, - base_mat: Mat4, - buf: &mut [FigureBoneData; super::MAX_BONE_COUNT], - ) -> Vec3 { - let chest_mat = base_mat * Mat4::::from(self.chest); - - *(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [ - make_bone(chest_mat * Mat4::::from(self.head)), - make_bone(chest_mat), - make_bone(chest_mat * Mat4::::from(self.feet_f)), - make_bone(chest_mat * Mat4::::from(self.feet_b)), - make_bone(chest_mat * Mat4::::from(self.tail)), - ]; - Vec3::default() - } -} - -impl<'a> std::convert::TryFrom<&'a comp::Body> for CritterAttr { - type Error = (); - - fn try_from(body: &'a comp::Body) -> Result { - match body { - comp::Body::Critter(body) => Ok(CritterAttr::from(body)), - _ => Err(()), - } - } -} - -impl CritterAttr { - #[allow(clippy::match_single_binding)] // TODO: Pending review in #587 - pub fn calculate_scale(body: &comp::critter::Body) -> f32 { - match (body.species, body.body_type) { - (_, _) => 0.0, - } - } -} - -impl Default for CritterAttr { - fn default() -> Self { - Self { - head: (0.0, 0.0), - chest: (0.0, 0.0), - feet_f: (0.0, 0.0), - feet_b: (0.0, 0.0), - tail: (0.0, 0.0), - } - } -} - -impl<'a> From<&'a Body> for CritterAttr { - fn from(body: &'a Body) -> Self { - use comp::critter::Species::*; - Self { - head: match (body.species, body.body_type) { - (Rat, _) => (6.5, 3.0), - (Axolotl, _) => (5.0, 1.0), - (Gecko, _) => (5.0, 0.0), - (Turtle, _) => (8.0, 3.0), - (Squirrel, _) => (5.0, 0.0), - (Fungome, _) => (4.0, 0.0), - }, - chest: match (body.species, body.body_type) { - (Rat, _) => (0.0, 6.0), - (Axolotl, _) => (-1.0, 3.0), - (Gecko, _) => (-2.0, 3.0), - (Turtle, _) => (0.0, 6.0), - (Squirrel, _) => (0.0, 3.0), - (Fungome, _) => (0.0, 5.0), - }, - feet_f: match (body.species, body.body_type) { - (Rat, _) => (2.0, -5.0), - (Axolotl, _) => (2.0, -5.0), - (Gecko, _) => (1.0, -2.0), - (Turtle, _) => (3.0, -5.0), - (Squirrel, _) => (1.0, -2.0), - (Fungome, _) => (1.0, -4.0), - }, - feet_b: match (body.species, body.body_type) { - (Rat, _) => (-2.0, -5.0), - (Axolotl, _) => (-2.0, -5.0), - (Gecko, _) => (-2.0, -2.0), - (Turtle, _) => (-2.0, -5.0), - (Squirrel, _) => (-1.0, -2.0), - (Fungome, _) => (-2.0, -4.0), - }, - tail: match (body.species, body.body_type) { - (Rat, _) => (-8.0, -1.0), - (Axolotl, _) => (-7.0, -1.0), - (Gecko, _) => (-6.5, -2.0), - (Turtle, _) => (-6.0, 0.0), - (Squirrel, _) => (-3.0, 0.0), - (Fungome, _) => (-6.0, -1.0), - }, - } - } -} diff --git a/voxygen/src/anim/src/critter/run.rs b/voxygen/src/anim/src/critter/run.rs deleted file mode 100644 index 2f342e28bd..0000000000 --- a/voxygen/src/anim/src/critter/run.rs +++ /dev/null @@ -1,59 +0,0 @@ -use super::{super::Animation, CritterAttr, CritterSkeleton}; -//use std::{f32::consts::PI, ops::Mul}; -use super::super::vek::*; -use std::f32::consts::PI; - -pub struct RunAnimation; - -impl Animation for RunAnimation { - type Dependency = (f32, f64); - type Skeleton = CritterSkeleton; - - #[cfg(feature = "use-dyn-lib")] - const UPDATE_FN: &'static [u8] = b"critter_run\0"; - - #[cfg_attr(feature = "be-dyn-lib", export_name = "critter_run")] - fn update_skeleton_inner( - skeleton: &Self::Skeleton, - (_velocity, _global_time): Self::Dependency, - anim_time: f64, - _rate: &mut f32, - skeleton_attr: &CritterAttr, - ) -> Self::Skeleton { - let mut next = (*skeleton).clone(); - - let wave = (anim_time as f32 * 8.0).sin(); - let wavealt = (anim_time as f32 * 8.0 + PI / 2.0).sin(); - let wave_slow = (anim_time as f32 * 6.5 + PI).sin(); - - next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); - next.head.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + wave * 0.03); - next.head.scale = Vec3::one(); - - next.chest.position = Vec3::new( - 0.0, - skeleton_attr.chest.0 + wave * 1.0, - skeleton_attr.chest.1, - ) / 18.0; - next.chest.orientation = Quaternion::rotation_x(wave * 0.1); - next.chest.scale = Vec3::one() / 18.0; - - next.feet_f.position = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1); - next.feet_f.orientation = - Quaternion::rotation_x(wave * 0.8) * Quaternion::rotation_z(wavealt / 6.0); - next.feet_f.scale = Vec3::one(); - - next.feet_b.position = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1); - next.feet_b.orientation = - Quaternion::rotation_x(wavealt * 0.8) * Quaternion::rotation_z(wavealt / 6.0); - next.feet_b.scale = Vec3::one(); - - next.tail.position = - Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1); - next.tail.orientation = Quaternion::rotation_y(wave_slow * 0.08); - next.tail.scale = Vec3::one(); - - next - } -} diff --git a/voxygen/src/anim/src/lib.rs b/voxygen/src/anim/src/lib.rs index 833227ae5f..ffe1380b00 100644 --- a/voxygen/src/anim/src/lib.rs +++ b/voxygen/src/anim/src/lib.rs @@ -43,7 +43,6 @@ pub mod biped_large; pub mod bird_medium; pub mod bird_small; pub mod character; -pub mod critter; pub mod dragon; #[cfg(feature = "use-dyn-lib")] pub mod dyn_lib; pub mod fish_medium; @@ -54,6 +53,7 @@ pub mod object; pub mod quadruped_low; pub mod quadruped_medium; pub mod quadruped_small; +pub mod theropod; pub mod vek; #[cfg(feature = "use-dyn-lib")] diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index 5d5de9e931..0c49563099 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -114,6 +114,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (4.0, 3.0), (Truffler, _) => (7.5, -9.0), (Frog, _) => (4.0, 2.0), + (Rat, _) => (6.0, -2.0), + (Axolotl, _) => (7.0, 1.0), + (Gecko, _) => (7.5, 2.0), + (Turtle, _) => (4.0, 3.0), + (Squirrel, _) => (7.5, -9.0), + (Fungome, _) => (4.0, 2.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 6.0), @@ -132,6 +138,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (-2.0, 6.0), (Truffler, _) => (-2.0, 16.0), (Frog, _) => (-2.0, 4.5), + (Rat, _) => (6.0, -2.0), + (Axolotl, _) => (7.0, 1.0), + (Gecko, _) => (7.5, 2.0), + (Turtle, _) => (4.0, 3.0), + (Squirrel, _) => (7.5, -9.0), + (Fungome, _) => (4.0, 2.0), }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.5, -1.0), @@ -150,6 +162,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (3.0, 3.0, -3.0), (Truffler, _) => (2.5, 5.0, -9.0), (Frog, _) => (4.5, 6.5, 0.0), + (Rat, _) => (6.0, -2.0, 0.0), + (Axolotl, _) => (7.0, 1.0, 0.0), + (Gecko, _) => (7.5, 2.0, 0.0), + (Turtle, _) => (4.0, 3.0, 0.0), + (Squirrel, _) => (7.5, -9.0, 0.0), + (Fungome, _) => (4.0, 2.0, 0.0), }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, 0.0), @@ -168,6 +186,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (3.5, -2.0, -1.0), (Truffler, _) => (3.0, -5.0, -9.5), (Frog, _) => (5.0, -3.5, 0.0), + (Rat, _) => (6.0, -2.0, 0.0), + (Axolotl, _) => (7.0, 1.0, 0.0), + (Gecko, _) => (7.5, 2.0, 0.0), + (Turtle, _) => (4.0, 3.0, 0.0), + (Squirrel, _) => (7.5, -9.0, 0.0), + (Fungome, _) => (4.0, 2.0, 0.0), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -186,6 +210,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (-4.0, -0.0), (Truffler, _) => (0.0, 0.0), (Frog, _) => (0.0, -0.0), + (Rat, _) => (6.0, -2.0), + (Axolotl, _) => (7.0, 1.0), + (Gecko, _) => (7.5, 2.0), + (Turtle, _) => (4.0, 3.0), + (Squirrel, _) => (7.5, -9.0), + (Fungome, _) => (4.0, 2.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => (0.9), @@ -204,6 +234,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (0.7), (Truffler, _) => (1.0), (Frog, _) => (0.7), + (Rat, _) => (6.0), + (Axolotl, _) => (7.0), + (Gecko, _) => (7.5), + (Turtle, _) => (4.0), + (Squirrel, _) => (7.5), + (Fungome, _) => (4.0), }, tempo: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -222,6 +258,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (1.15), (Truffler, _) => (1.0), (Frog, _) => (1.15), + (Rat, _) => (6.0), + (Axolotl, _) => (7.0), + (Gecko, _) => (7.5), + (Turtle, _) => (4.0), + (Squirrel, _) => (7.5), + (Fungome, _) => (4.0), }, maximize: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -240,6 +282,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (1.3), (Truffler, _) => (1.0), (Frog, _) => (1.3), + (Rat, _) => (0.1), + (Axolotl, _) => (0.1), + (Gecko, _) => (0.1), + (Turtle, _) => (0.1), + (Squirrel, _) => (0.1), + (Fungome, _) => (0.1), }, minimize: match (body.species, body.body_type) { (Pig, _) => (0.6), @@ -258,6 +306,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (0.8), (Truffler, _) => (1.0), (Frog, _) => (0.8), + (Rat, _) => (0.1), + (Axolotl, _) => (0.1), + (Gecko, _) => (0.1), + (Turtle, _) => (0.1), + (Squirrel, _) => (0.1), + (Fungome, _) => (0.1), }, spring: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -276,6 +330,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (2.5), (Truffler, _) => (0.8), (Frog, _) => (2.5), + (Rat, _) => (0.1), + (Axolotl, _) => (0.1), + (Gecko, _) => (0.1), + (Turtle, _) => (0.1), + (Squirrel, _) => (0.1), + (Fungome, _) => (0.1), }, feed: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -294,6 +354,12 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (1.2), (Truffler, _) => (0.6), (Frog, _) => (0.7), + (Rat, _) => (0.1), + (Axolotl, _) => (0.1), + (Gecko, _) => (0.1), + (Turtle, _) => (0.1), + (Squirrel, _) => (0.1), + (Fungome, _) => (0.1), }, } } diff --git a/voxygen/src/anim/src/theropod/idle.rs b/voxygen/src/anim/src/theropod/idle.rs new file mode 100644 index 0000000000..f82a9575a1 --- /dev/null +++ b/voxygen/src/anim/src/theropod/idle.rs @@ -0,0 +1,109 @@ +use super::{super::Animation, SkeletonAttr, TheropodSkeleton}; +//use std::{f32::consts::PI, ops::Mul}; +use super::super::vek::*; +use std::{f32::consts::PI, ops::Mul}; + +pub struct IdleAnimation; + +impl Animation for IdleAnimation { + type Dependency = f64; + type Skeleton = TheropodSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"theropod_idle\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_idle")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + global_time: Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_z(0.0); + next.head.scale = Vec3::one(); + + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_z(0.0); + next.jaw.scale = Vec3::one(); + + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = Quaternion::rotation_z(0.0); + next.neck.scale = Vec3::one(); + + next.chest_front.position = Vec3::new( + 0.0, + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1, + ); + next.chest_front.orientation = Quaternion::rotation_z(0.0); + next.chest_front.scale = Vec3::one(); + + next.chest_back.position = + Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1); + next.chest_back.orientation = Quaternion::rotation_z(0.0); + next.chest_back.scale = Vec3::one(); + + next.tail_front.position = + Vec3::new(0.0, skeleton_attr.tail_front.0, skeleton_attr.tail_front.1); + next.tail_front.orientation = Quaternion::rotation_z(0.0); + next.tail_front.scale = Vec3::one(); + + next.tail_back.position = + Vec3::new(0.0, skeleton_attr.tail_back.0, skeleton_attr.tail_back.1); + next.tail_back.orientation = Quaternion::rotation_z(0.0); + next.tail_back.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + skeleton_attr.hand_l.0, + skeleton_attr.hand_l.0, + skeleton_attr.hand_l.1, + ); + next.hand_l.orientation = Quaternion::rotation_z(0.0); + next.hand_l.scale = Vec3::one(); + + next.hand_r.position = Vec3::new( + skeleton_attr.hand_r.0, + skeleton_attr.hand_r.0, + skeleton_attr.hand_r.1, + ); + next.hand_r.orientation = Quaternion::rotation_z(0.0); + next.hand_l.scale = Vec3::one(); + + next.leg_l.position = Vec3::new( + skeleton_attr.leg_l.0, + skeleton_attr.leg_l.0, + skeleton_attr.leg_l.1, + ); + next.leg_l.orientation = Quaternion::rotation_z(0.0); + next.leg_l.scale = Vec3::one(); + + next.leg_r.position = Vec3::new( + skeleton_attr.leg_r.0, + skeleton_attr.leg_r.0, + skeleton_attr.leg_r.1, + ); + next.leg_r.orientation = Quaternion::rotation_z(0.0); + next.leg_r.scale = Vec3::one(); + + next.foot_l.position = Vec3::new( + skeleton_attr.foot_l.0, + skeleton_attr.foot_l.0, + skeleton_attr.foot_l.1, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0); + next.foot_l.scale = Vec3::one(); + + next.foot_r.position = Vec3::new( + skeleton_attr.foot_r.0, + skeleton_attr.foot_r.0, + skeleton_attr.foot_r.1, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0); + next.foot_r.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/src/theropod/jump.rs b/voxygen/src/anim/src/theropod/jump.rs new file mode 100644 index 0000000000..a18778e6a6 --- /dev/null +++ b/voxygen/src/anim/src/theropod/jump.rs @@ -0,0 +1,111 @@ +use super::{super::Animation, SkeletonAttr, TheropodSkeleton}; +//use std::f32::consts::PI; +use super::super::vek::*; + +pub struct JumpAnimation; + +impl Animation for JumpAnimation { + type Dependency = (f32, f64); + type Skeleton = TheropodSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"theropod_jump\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_jump")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + _global_time: Self::Dependency, + _anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let wave = (_anim_time as f32 * 1.0).sin(); + + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_z(0.0); + next.head.scale = Vec3::one(); + + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_z(0.0); + next.jaw.scale = Vec3::one(); + + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = Quaternion::rotation_z(0.0); + next.neck.scale = Vec3::one(); + + next.chest_front.position = Vec3::new( + 0.0, + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1, + ); + next.chest_front.orientation = Quaternion::rotation_z(0.0); + next.chest_front.scale = Vec3::one(); + + next.chest_back.position = + Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1); + next.chest_back.orientation = Quaternion::rotation_z(0.0); + next.chest_back.scale = Vec3::one(); + + next.tail_front.position = + Vec3::new(0.0, skeleton_attr.tail_front.0, skeleton_attr.tail_front.1); + next.tail_front.orientation = Quaternion::rotation_z(0.0); + next.tail_front.scale = Vec3::one(); + + next.tail_back.position = + Vec3::new(0.0, skeleton_attr.tail_back.0, skeleton_attr.tail_back.1); + next.tail_back.orientation = Quaternion::rotation_z(0.0); + next.tail_back.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + skeleton_attr.hand_l.0, + skeleton_attr.hand_l.0, + skeleton_attr.hand_l.1, + ); + next.hand_l.orientation = Quaternion::rotation_z(0.0); + next.hand_l.scale = Vec3::one(); + + next.hand_r.position = Vec3::new( + skeleton_attr.hand_r.0, + skeleton_attr.hand_r.0, + skeleton_attr.hand_r.1, + ); + next.hand_r.orientation = Quaternion::rotation_z(0.0); + next.hand_l.scale = Vec3::one(); + + next.leg_l.position = Vec3::new( + skeleton_attr.leg_l.0, + skeleton_attr.leg_l.0, + skeleton_attr.leg_l.1, + ); + next.leg_l.orientation = Quaternion::rotation_z(0.0); + next.leg_l.scale = Vec3::one(); + + next.leg_r.position = Vec3::new( + skeleton_attr.leg_r.0, + skeleton_attr.leg_r.0, + skeleton_attr.leg_r.1, + ); + next.leg_r.orientation = Quaternion::rotation_z(0.0); + next.leg_r.scale = Vec3::one(); + + next.foot_l.position = Vec3::new( + skeleton_attr.foot_l.0, + skeleton_attr.foot_l.0, + skeleton_attr.foot_l.1, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0); + next.foot_l.scale = Vec3::one(); + + next.foot_r.position = Vec3::new( + skeleton_attr.foot_r.0, + skeleton_attr.foot_r.0, + skeleton_attr.foot_r.1, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0); + next.foot_r.scale = Vec3::one(); + + next + } +} diff --git a/voxygen/src/anim/src/theropod/mod.rs b/voxygen/src/anim/src/theropod/mod.rs new file mode 100644 index 0000000000..4a024f8663 --- /dev/null +++ b/voxygen/src/anim/src/theropod/mod.rs @@ -0,0 +1,177 @@ +pub mod idle; +pub mod jump; +pub mod run; + +// Reexports +pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation}; + +use super::{make_bone, vek::*, FigureBoneData, Skeleton}; +use common::comp::{self}; +use core::convert::TryFrom; + +pub type Body = comp::theropod::Body; + +skeleton_impls!(struct TheropodSkeleton { + + head, + + jaw, + + neck, + + chest_front, + + chest_back, + + tail_front, + + tail_back, + + hand_l, + + hand_r, + + leg_l, + + leg_r, + + foot_l, + + foot_r, +}); + +impl Skeleton for TheropodSkeleton { + type Attr = SkeletonAttr; + type Body = Body; + + const BONE_COUNT: usize = 13; + #[cfg(feature = "use-dyn-lib")] + const COMPUTE_FN: &'static [u8] = b"theropod_compute_mats\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_compute_mats")] + + fn compute_matrices_inner( + &self, + base_mat: Mat4, + buf: &mut [FigureBoneData; super::MAX_BONE_COUNT], + ) -> Vec3 { + let chest_front_mat = base_mat * Mat4::::from(self.chest_front); + let neck_mat = chest_front_mat * Mat4::::from(self.neck); + let head_mat = neck_mat * Mat4::::from(self.head); + let chest_back_mat = chest_front_mat * Mat4::::from(self.chest_back); + let tail_front_mat = chest_back_mat * Mat4::::from(self.tail_front); + let leg_l_mat = chest_front_mat * Mat4::::from(self.leg_l); + let leg_r_mat = chest_front_mat * Mat4::::from(self.leg_r); + + *(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [ + make_bone(head_mat), + make_bone(head_mat * Mat4::::from(self.jaw)), + make_bone(neck_mat), + make_bone(chest_front_mat), + make_bone(chest_back_mat), + make_bone(tail_front_mat), + make_bone(tail_front_mat * Mat4::::from(self.tail_back)), + make_bone(chest_front_mat * Mat4::::from(self.hand_l)), + make_bone(chest_front_mat * Mat4::::from(self.hand_r)), + make_bone(leg_l_mat), + make_bone(leg_r_mat), + make_bone(leg_l_mat * Mat4::::from(self.foot_l)), + make_bone(leg_r_mat * Mat4::::from(self.foot_r)), + ]; + Vec3::default() + } +} + +pub struct SkeletonAttr { + head: (f32, f32), + neck: (f32, f32), + jaw: (f32, f32), + chest_front: (f32, f32), + chest_back: (f32, f32), + tail_front: (f32, f32), + tail_back: (f32, f32), + hand_l: (f32, f32, f32), + hand_r: (f32, f32, f32), + leg_l: (f32, f32, f32), + leg_r: (f32, f32, f32), + foot_l: (f32, f32, f32), + foot_r: (f32, f32, f32), +} + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::Theropod(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self { + head: (0.0, 0.0), + neck: (0.0, 0.0), + jaw: (0.0, 0.0), + chest_front: (0.0, 0.0), + chest_back: (0.0, 0.0), + tail_front: (0.0, 0.0), + tail_back: (0.0, 0.0), + hand_l: (0.0, 0.0, 0.0), + hand_r: (0.0, 0.0, 0.0), + leg_l: (0.0, 0.0, 0.0), + leg_r: (0.0, 0.0, 0.0), + foot_l: (0.0, 0.0, 0.0), + foot_r: (0.0, 0.0, 0.0), + } + } +} + +impl<'a> From<&'a Body> for SkeletonAttr { + fn from(body: &'a Body) -> Self { + use comp::theropod::Species::*; + Self { + head: match (body.species, body.body_type) { + (Archaeos, _) => (6.5, 3.0), + (Odontotyrannos, _) => (5.0, 1.0), + }, + jaw: match (body.species, body.body_type) { + (Archaeos, _) => (0.0, 6.0), + (Odontotyrannos, _) => (-1.0, 3.0), + }, + neck: match (body.species, body.body_type) { + (Archaeos, _) => (0.0, 6.0), + (Odontotyrannos, _) => (-1.0, 3.0), + }, + chest_front: match (body.species, body.body_type) { + (Archaeos, _) => (0.0, 6.0), + (Odontotyrannos, _) => (-1.0, 3.0), + }, + chest_back: match (body.species, body.body_type) { + (Archaeos, _) => (0.0, 6.0), + (Odontotyrannos, _) => (-1.0, 3.0), + }, + tail_front: match (body.species, body.body_type) { + (Archaeos, _) => (-8.0, -1.0), + (Odontotyrannos, _) => (-7.0, -1.0), + }, + tail_back: match (body.species, body.body_type) { + (Archaeos, _) => (-8.0, -1.0), + (Odontotyrannos, _) => (-7.0, -1.0), + }, + hand_l: match (body.species, body.body_type) { + (Archaeos, _) => (-8.0, -1.0, 0.0), + (Odontotyrannos, _) => (-7.0, -1.0, 0.0), + }, + hand_r: match (body.species, body.body_type) { + (Archaeos, _) => (8.0, -1.0, 0.0), + (Odontotyrannos, _) => (7.0, -1.0, 0.0), + }, + leg_l: match (body.species, body.body_type) { + (Archaeos, _) => (-8.0, -1.0, 0.0), + (Odontotyrannos, _) => (-7.0, -1.0, 0.0), + }, + leg_r: match (body.species, body.body_type) { + (Archaeos, _) => (8.0, -1.0, 0.0), + (Odontotyrannos, _) => (7.0, -1.0, 0.0), + }, + foot_l: match (body.species, body.body_type) { + (Archaeos, _) => (-8.0, -1.0, 0.0), + (Odontotyrannos, _) => (-7.0, -1.0, 0.0), + }, + foot_r: match (body.species, body.body_type) { + (Archaeos, _) => (8.0, -1.0, 0.0), + (Odontotyrannos, _) => (7.0, -1.0, 0.0), + }, + } + } +} diff --git a/voxygen/src/anim/src/theropod/run.rs b/voxygen/src/anim/src/theropod/run.rs new file mode 100644 index 0000000000..4ca88632a4 --- /dev/null +++ b/voxygen/src/anim/src/theropod/run.rs @@ -0,0 +1,114 @@ +use super::{super::Animation, SkeletonAttr, TheropodSkeleton}; +//use std::{f32::consts::PI, ops::Mul}; +use super::super::vek::*; +use std::f32::consts::PI; + +pub struct RunAnimation; + +impl Animation for RunAnimation { + type Dependency = (f32, f64); + type Skeleton = TheropodSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"theropod_run\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_run")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (_velocity, _global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let wave = (anim_time as f32 * 8.0).sin(); + let wavealt = (anim_time as f32 * 8.0 + PI / 2.0).sin(); + let wave_slow = (anim_time as f32 * 6.5 + PI).sin(); + + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_z(0.0); + next.head.scale = Vec3::one(); + + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_z(0.0); + next.jaw.scale = Vec3::one(); + + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = Quaternion::rotation_z(0.0); + next.neck.scale = Vec3::one(); + + next.chest_front.position = Vec3::new( + 0.0, + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1, + ); + next.chest_front.orientation = Quaternion::rotation_z(0.0); + next.chest_front.scale = Vec3::one(); + + next.chest_back.position = + Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1); + next.chest_back.orientation = Quaternion::rotation_z(0.0); + next.chest_back.scale = Vec3::one(); + + next.tail_front.position = + Vec3::new(0.0, skeleton_attr.tail_front.0, skeleton_attr.tail_front.1); + next.tail_front.orientation = Quaternion::rotation_z(0.0); + next.tail_front.scale = Vec3::one(); + + next.tail_back.position = + Vec3::new(0.0, skeleton_attr.tail_back.0, skeleton_attr.tail_back.1); + next.tail_back.orientation = Quaternion::rotation_z(0.0); + next.tail_back.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + skeleton_attr.hand_l.0, + skeleton_attr.hand_l.0, + skeleton_attr.hand_l.1, + ); + next.hand_l.orientation = Quaternion::rotation_z(0.0); + next.hand_l.scale = Vec3::one(); + + next.hand_r.position = Vec3::new( + skeleton_attr.hand_r.0, + skeleton_attr.hand_r.0, + skeleton_attr.hand_r.1, + ); + next.hand_r.orientation = Quaternion::rotation_z(0.0); + next.hand_l.scale = Vec3::one(); + + next.leg_l.position = Vec3::new( + skeleton_attr.leg_l.0, + skeleton_attr.leg_l.0, + skeleton_attr.leg_l.1, + ); + next.leg_l.orientation = Quaternion::rotation_z(0.0); + next.leg_l.scale = Vec3::one(); + + next.leg_r.position = Vec3::new( + skeleton_attr.leg_r.0, + skeleton_attr.leg_r.0, + skeleton_attr.leg_r.1, + ); + next.leg_r.orientation = Quaternion::rotation_z(0.0); + next.leg_r.scale = Vec3::one(); + + next.foot_l.position = Vec3::new( + skeleton_attr.foot_l.0, + skeleton_attr.foot_l.0, + skeleton_attr.foot_l.1, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0); + next.foot_l.scale = Vec3::one(); + + next.foot_r.position = Vec3::new( + skeleton_attr.foot_r.0, + skeleton_attr.foot_r.0, + skeleton_attr.foot_r.1, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0); + next.foot_r.scale = Vec3::one(); + + next + } +} diff --git a/voxygen/src/scene/figure/cache.rs b/voxygen/src/scene/figure/cache.rs index 60d723a4d5..421b3259eb 100644 --- a/voxygen/src/scene/figure/cache.rs +++ b/voxygen/src/scene/figure/cache.rs @@ -254,6 +254,7 @@ where manifest_indicator, } } + /// NOTE: Intended for render time (useful with systems like wgpu that /// expect data used by the rendering pipelines to be stable throughout /// the render pass). @@ -283,6 +284,12 @@ where }), }; + if let Some(((FigureModelEntryFuture::Done(model), _), _)) = self.models.get(&key) { + Some(model) + } else { + None + } + } pub fn get_or_create_model<'c>( &'c mut self, diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index 4fb0025440..09f0e40edc 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -5,7 +5,6 @@ use common::{ biped_large::{self, BodyType as BLBodyType, Species as BLSpecies}, bird_medium::{self, BodyType as BMBodyType, Species as BMSpecies}, bird_small, - critter::{self, BodyType as CBodyType, Species as CSpecies}, dragon::{self, BodyType as DBodyType, Species as DSpecies}, fish_medium, fish_small, golem::{self, BodyType as GBodyType, Species as GSpecies}, @@ -15,6 +14,7 @@ use common::{ quadruped_low::{self, BodyType as QLBodyType, Species as QLSpecies}, quadruped_medium::{self, BodyType as QMBodyType, Species as QMSpecies}, quadruped_small::{self, BodyType as QSBodyType, Species as QSSpecies}, + theropod::{self, BodyType as TBodyType, Species as TSpecies}, }, figure::{DynaUnionizer, MatSegment, Material, Segment}, }; @@ -1734,57 +1734,100 @@ impl BirdMediumLateralSpec { } //// #[derive(Deserialize)] -struct CritterCenterSpec(HashMap<(CSpecies, CBodyType), SidedCCenterVoxSpec>); +struct TheropodCentralSpec(HashMap<(TSpecies, TBodyType), SidedTCentralVoxSpec>); #[derive(Deserialize)] -struct SidedCCenterVoxSpec { - head: CritterCenterSubSpec, - chest: CritterCenterSubSpec, - feet_f: CritterCenterSubSpec, - feet_b: CritterCenterSubSpec, - tail: CritterCenterSubSpec, +struct SidedTCentralVoxSpec { + head: TheropodCentralSubSpec, + jaw: TheropodCentralSubSpec, + neck: TheropodCentralSubSpec, + chest_front: TheropodCentralSubSpec, + chest_back: TheropodCentralSubSpec, + tail_front: TheropodCentralSubSpec, + tail_back: TheropodCentralSubSpec, } #[derive(Deserialize)] -struct CritterCenterSubSpec { +struct TheropodCentralSubSpec { offset: [f32; 3], // Should be relative to initial origin - center: VoxSimple, + central: VoxSimple, } +#[derive(Deserialize)] +struct TheropodLateralSpec(HashMap<(TSpecies, TBodyType), SidedTLateralVoxSpec>); +#[derive(Deserialize)] +struct SidedTLateralVoxSpec { + hand_l: TheropodLateralSubSpec, + hand_r: TheropodLateralSubSpec, + leg_l: TheropodLateralSubSpec, + leg_r: TheropodLateralSubSpec, + foot_l: TheropodLateralSubSpec, + foot_r: TheropodLateralSubSpec, +} +#[derive(Deserialize)] +struct TheropodLateralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + lateral: VoxSimple, +} make_vox_spec!( - critter::Body, - struct CritterSpec { - center: CritterCenterSpec = "voxygen.voxel.critter_center_manifest", + theropod::Body, + struct TheropodSpec { + central: TheropodCentralSpec = "voxygen.voxel.theropod_central_manifest", + lateral: TheropodLateralSpec = "voxygen.voxel.theropod_lateral_manifest", }, |FigureKey { body, .. }, spec| { [ - Some(spec.center.asset.mesh_head( + Some(spec.central.asset.mesh_head( body.species, body.body_type, )), - Some(spec.center.asset.mesh_chest( + Some(spec.central.asset.mesh_jaw( body.species, body.body_type, )), - Some(spec.center.asset.mesh_feet_f( + Some(spec.central.asset.mesh_neck( body.species, body.body_type, )), - Some(spec.center.asset.mesh_feet_b( + Some(spec.central.asset.mesh_chest_front( body.species, body.body_type, )), - Some(spec.center.asset.mesh_tail( + Some(spec.central.asset.mesh_chest_back( + body.species, + body.body_type, + )), + Some(spec.central.asset.mesh_tail_front( + body.species, + body.body_type, + )), + Some(spec.central.asset.mesh_tail_back( + body.species, + body.body_type, + )), + Some(spec.lateral.asset.mesh_hand_l( + body.species, + body.body_type, + )), + Some(spec.lateral.asset.mesh_hand_r( + body.species, + body.body_type, + )), + Some(spec.lateral.asset.mesh_leg_l( + body.species, + body.body_type, + )), + Some(spec.lateral.asset.mesh_leg_r( + body.species, + body.body_type, + )), + Some(spec.lateral.asset.mesh_foot_l( + body.species, + body.body_type, + )), + Some(spec.lateral.asset.mesh_foot_r( body.species, body.body_type, )), - None, - None, - None, - None, - None, - None, - None, - None, None, None, None, @@ -1792,8 +1835,8 @@ make_vox_spec!( }, ); -impl CritterCenterSpec { - fn mesh_head(&self, species: CSpecies, body_type: CBodyType) -> BoneMeshes { +impl TheropodCentralSpec { + fn mesh_head(&self, species: TSpecies, body_type: TBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { @@ -1804,73 +1847,234 @@ impl CritterCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.head.center.0); + let central = graceful_load_segment(&spec.head.central.0); - (center, Vec3::from(spec.head.offset)) + (central, Vec3::from(spec.head.offset)) } - fn mesh_chest(&self, species: CSpecies, body_type: CBodyType) -> BoneMeshes { + fn mesh_jaw(&self, species: TSpecies, body_type: TBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No chest specification exists for the combination of {:?} and {:?}", + "No jaw specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.chest.center.0); + let central = graceful_load_segment(&spec.jaw.central.0); - (center, Vec3::from(spec.chest.offset)) + (central, Vec3::from(spec.jaw.offset)) } - fn mesh_feet_f(&self, species: CSpecies, body_type: CBodyType) -> BoneMeshes { + fn mesh_neck(&self, species: TSpecies, body_type: TBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No feet specification exists for the combination of {:?} and {:?}", + "No jaw specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.feet_f.center.0); + let central = graceful_load_segment(&spec.neck.central.0); - (center, Vec3::from(spec.feet_f.offset)) + (central, Vec3::from(spec.neck.offset)) } - fn mesh_feet_b(&self, species: CSpecies, body_type: CBodyType) -> BoneMeshes { + fn mesh_chest_front(&self, species: TSpecies, body_type: TBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No feet specification exists for the combination of {:?} and {:?}", + "No front chest specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.feet_b.center.0); + let central = graceful_load_segment(&spec.chest_front.central.0); - (center, Vec3::from(spec.feet_b.offset)) + (central, Vec3::from(spec.chest_front.offset)) } - fn mesh_tail(&self, species: CSpecies, body_type: CBodyType) -> BoneMeshes { + fn mesh_chest_back(&self, species: TSpecies, body_type: TBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No tail specification exists for the combination of {:?} and {:?}", + "No back chest specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.tail.center.0); + let central = graceful_load_segment(&spec.chest_back.central.0); - (center, Vec3::from(spec.tail.offset)) + (central, Vec3::from(spec.chest_back.offset)) + } + + fn mesh_tail_front( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No front tail specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let central = graceful_load_segment(&spec.tail_front.central.0); + + (central, Vec3::from(spec.tail_front.offset)) + } + + fn mesh_tail_back( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No back tail specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let central = graceful_load_segment(&spec.tail_back.central.0); + + (central, Vec3::from(spec.tail_back.offset)) + } +} +impl TheropodLateralSpec { + fn mesh_hand_l( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No left hand specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.hand_l.lateral.0); + + (lateral, Vec3::from(spec.hand_l.offset)) + } + + fn mesh_hand_r( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No right hand specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.hand_r.lateral.0); + + (lateral, Vec3::from(spec.hand_r.offset)) + } + + fn mesh_leg_l( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No left leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.leg_l.lateral.0); + + (lateral, Vec3::from(spec.leg_l.offset)) + } + + fn mesh_leg_r( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No right leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.leg_r.lateral.0); + + (lateral, Vec3::from(spec.leg_r.offset)) + } + + fn mesh_foot_l( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No left foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.foot_l.lateral.0); + + (lateral, Vec3::from(spec.foot_l.offset)) + } + + fn mesh_foot_r( + &self, + species: TSpecies, + body_type: TBodyType, + ) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No right foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.foot_r.lateral.0); + + (lateral, Vec3::from(spec.foot_r.offset)) } } //// @@ -2821,6 +3025,10 @@ make_vox_spec!( body.species, body.body_type, )), + Some(spec.center.asset.mesh_torso_lower( + body.species, + body.body_type, + )), Some(spec.lateral.asset.mesh_shoulder_l( body.species, body.body_type, @@ -2858,7 +3066,6 @@ make_vox_spec!( None, None, None, - None, ] }, ); @@ -2900,7 +3107,6 @@ impl GolemCenterSpec { &self, species: GSpecies, body_type: GBodyType, - generate_mesh: impl FnOnce(Segment, Vec3) -> BoneMeshes, ) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, @@ -2909,12 +3115,12 @@ impl GolemCenterSpec { "No torso lower specification exists for the combination of {:?} and {:?}", species, body_type ); - return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5), generate_mesh); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; let center = graceful_load_segment(&spec.torso_lower.center.0); - generate_mesh(center, Vec3::from(spec.torso_lower.offset)) + (center, Vec3::from(spec.torso_lower.offset)) } } impl GolemLateralSpec { diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index b6a16f0f9e..eda6fa8fb5 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -17,11 +17,11 @@ use crate::{ }; use anim::{ biped_large::BipedLargeSkeleton, bird_medium::BirdMediumSkeleton, - bird_small::BirdSmallSkeleton, character::CharacterSkeleton, critter::CritterSkeleton, - dragon::DragonSkeleton, fish_medium::FishMediumSkeleton, fish_small::FishSmallSkeleton, - golem::GolemSkeleton, object::ObjectSkeleton, quadruped_low::QuadrupedLowSkeleton, - quadruped_medium::QuadrupedMediumSkeleton, quadruped_small::QuadrupedSmallSkeleton, Animation, - Skeleton, + bird_small::BirdSmallSkeleton, character::CharacterSkeleton, dragon::DragonSkeleton, + fish_medium::FishMediumSkeleton, fish_small::FishSmallSkeleton, golem::GolemSkeleton, + object::ObjectSkeleton, quadruped_low::QuadrupedLowSkeleton, + quadruped_medium::QuadrupedMediumSkeleton, quadruped_small::QuadrupedSmallSkeleton, + theropod::TheropodSkeleton, Animation, Skeleton, }; use common::{ comp::{ @@ -87,7 +87,7 @@ struct FigureMgrStates { quadruped_low_states: HashMap>, bird_medium_states: HashMap>, fish_medium_states: HashMap>, - critter_states: HashMap>, + theropod_states: HashMap>, dragon_states: HashMap>, bird_small_states: HashMap>, fish_small_states: HashMap>, @@ -105,7 +105,7 @@ impl FigureMgrStates { quadruped_low_states: HashMap::new(), bird_medium_states: HashMap::new(), fish_medium_states: HashMap::new(), - critter_states: HashMap::new(), + theropod_states: HashMap::new(), dragon_states: HashMap::new(), bird_small_states: HashMap::new(), fish_small_states: HashMap::new(), @@ -149,8 +149,8 @@ impl FigureMgrStates { .fish_medium_states .get_mut(&entity) .map(DerefMut::deref_mut), - Body::Critter(_) => self - .critter_states + Body::Theropod(_) => self + .theropod_states .get_mut(&entity) .map(DerefMut::deref_mut), Body::Dragon(_) => self.dragon_states.get_mut(&entity).map(DerefMut::deref_mut), @@ -185,7 +185,7 @@ impl FigureMgrStates { Body::QuadrupedLow(_) => self.quadruped_low_states.remove(&entity).map(|e| e.meta), Body::BirdMedium(_) => self.bird_medium_states.remove(&entity).map(|e| e.meta), Body::FishMedium(_) => self.fish_medium_states.remove(&entity).map(|e| e.meta), - Body::Critter(_) => self.critter_states.remove(&entity).map(|e| e.meta), + Body::Theropod(_) => self.theropod_states.remove(&entity).map(|e| e.meta), Body::Dragon(_) => self.dragon_states.remove(&entity).map(|e| e.meta), Body::BirdSmall(_) => self.bird_small_states.remove(&entity).map(|e| e.meta), Body::FishSmall(_) => self.fish_small_states.remove(&entity).map(|e| e.meta), @@ -203,7 +203,7 @@ impl FigureMgrStates { self.quadruped_low_states.retain(|k, v| f(k, &mut *v)); self.bird_medium_states.retain(|k, v| f(k, &mut *v)); self.fish_medium_states.retain(|k, v| f(k, &mut *v)); - self.critter_states.retain(|k, v| f(k, &mut *v)); + self.theropod_states.retain(|k, v| f(k, &mut *v)); self.dragon_states.retain(|k, v| f(k, &mut *v)); self.bird_small_states.retain(|k, v| f(k, &mut *v)); self.fish_small_states.retain(|k, v| f(k, &mut *v)); @@ -220,7 +220,7 @@ impl FigureMgrStates { + self.quadruped_low_states.len() + self.bird_medium_states.len() + self.fish_medium_states.len() - + self.critter_states.len() + + self.theropod_states.len() + self.dragon_states.len() + self.bird_small_states.len() + self.fish_small_states.len() @@ -255,7 +255,7 @@ impl FigureMgrStates { .filter(|(_, c)| c.visible()) .count() + self - .critter_states + .theropod_states .iter() .filter(|(_, c)| c.visible()) .count() @@ -300,7 +300,7 @@ impl FigureMgrStates { pub struct FigureMgr { col_lights: FigureColLights, model_cache: FigureModelCache, - critter_model_cache: FigureModelCache, + theropod_model_cache: FigureModelCache, quadruped_small_model_cache: FigureModelCache, quadruped_medium_model_cache: FigureModelCache, quadruped_low_model_cache: FigureModelCache, @@ -320,7 +320,7 @@ impl FigureMgr { Self { col_lights: FigureColLights::new(renderer), model_cache: FigureModelCache::new(), - critter_model_cache: FigureModelCache::new(), + theropod_model_cache: FigureModelCache::new(), quadruped_small_model_cache: FigureModelCache::new(), quadruped_medium_model_cache: FigureModelCache::new(), quadruped_low_model_cache: FigureModelCache::new(), @@ -341,7 +341,7 @@ impl FigureMgr { pub fn clean(&mut self, tick: u64) { span!(_guard, "clean", "FigureManager::clean"); self.model_cache.clean(&mut self.col_lights, tick); - self.critter_model_cache.clean(&mut self.col_lights, tick); + self.theropod_model_cache.clean(&mut self.col_lights, tick); self.quadruped_small_model_cache .clean(&mut self.col_lights, tick); self.quadruped_medium_model_cache @@ -1636,8 +1636,8 @@ impl FigureMgr { &mut update_buf, ); }, - Body::Critter(body) => { - let (model, skeleton_attr) = self.critter_model_cache.get_or_create_model( + Body::Theropod(body) => { + let (model, skeleton_attr) = self.theropod_model_cache.get_or_create_model( renderer, &mut self.col_lights, *body, @@ -1648,10 +1648,11 @@ impl FigureMgr { scene_data.thread_pool, ); - let state = - self.states.critter_states.entry(entity).or_insert_with(|| { - FigureState::new(renderer, CritterSkeleton::default()) - }); + let state = self + .states + .theropod_states + .entry(entity) + .or_insert_with(|| FigureState::new(renderer, TheropodSkeleton::default())); let (character, last_character) = match (character, last_character) { (Some(c), Some(l)) => (c, l), @@ -1668,24 +1669,24 @@ impl FigureMgr { physics.in_fluid.is_some(), // In water ) { // Standing - (true, false, false) => anim::critter::IdleAnimation::update_skeleton( - &CritterSkeleton::default(), + (true, false, false) => anim::theropod::IdleAnimation::update_skeleton( + &TheropodSkeleton::default(), time, state.state_time, &mut state_animation_rate, skeleton_attr, ), // Running - (true, true, false) => anim::critter::RunAnimation::update_skeleton( - &CritterSkeleton::default(), + (true, true, false) => anim::theropod::RunAnimation::update_skeleton( + &TheropodSkeleton::default(), (vel.0.magnitude(), time), state.state_time, &mut state_animation_rate, skeleton_attr, ), // In air - (false, _, false) => anim::critter::JumpAnimation::update_skeleton( - &CritterSkeleton::default(), + (false, _, false) => anim::theropod::JumpAnimation::update_skeleton( + &TheropodSkeleton::default(), (vel.0.magnitude(), time), state.state_time, &mut state_animation_rate, @@ -1693,8 +1694,8 @@ impl FigureMgr { ), // TODO! - _ => anim::critter::IdleAnimation::update_skeleton( - &CritterSkeleton::default(), + _ => anim::theropod::IdleAnimation::update_skeleton( + &TheropodSkeleton::default(), time, state.state_time, &mut state_animation_rate, @@ -2321,7 +2322,7 @@ impl FigureMgr { let FigureMgr { col_lights: ref col_lights_, model_cache, - critter_model_cache, + theropod_model_cache, quadruped_small_model_cache, quadruped_medium_model_cache, quadruped_low_model_cache, @@ -2341,7 +2342,7 @@ impl FigureMgr { quadruped_low_states, bird_medium_states, fish_medium_states, - critter_states, + theropod_states, dragon_states, bird_small_states, fish_small_states, @@ -2454,14 +2455,14 @@ impl FigureMgr { ), ) }), - Body::Critter(body) => critter_states + Body::Theropod(body) => theropod_states .get(&entity) .filter(|state| filter_state(&*state)) .map(move |state| { ( state.locals(), state.bone_consts(), - critter_model_cache.get_model( + theropod_model_cache.get_model( col_lights, *body, loadout, diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs index 4ab7406b02..1f56cb27b6 100644 --- a/world/src/layer/mod.rs +++ b/world/src/layer/mod.rs @@ -281,7 +281,7 @@ pub fn apply_caves_supplement<'a>( }; comp::quadruped_low::Body::random_with(rng, &species).into() }, - 3 => { + _ => { is_hostile = true; let species = match rng.gen_range(0, 8) { 0 => comp::biped_large::Species::Ogre, @@ -291,14 +291,6 @@ pub fn apply_caves_supplement<'a>( }; comp::biped_large::Body::random_with(rng, &species).into() }, - _ => { - is_hostile = false; - let species = match rng.gen_range(0, 5) { - 0 => comp::critter::Species::Fungome, - _ => comp::critter::Species::Rat, - }; - comp::critter::Body::random_with(rng, &species).into() - }, }) .with_alignment(if is_hostile { comp::Alignment::Enemy diff --git a/world/src/lib.rs b/world/src/lib.rs index a992cc9188..e698f714e8 100644 --- a/world/src/lib.rs +++ b/world/src/lib.rs @@ -35,7 +35,7 @@ use crate::{ util::{Grid, Sampler}, }; use common::{ - comp::{self, bird_medium, critter, quadruped_low, quadruped_medium, quadruped_small}, + comp::{self, bird_medium, quadruped_low, quadruped_medium, quadruped_small, theropod}, generation::{ChunkSupplement, EntityInfo}, msg::server::WorldMapMsg, terrain::{Block, BlockKind, TerrainChunk, TerrainChunkMeta, TerrainChunkSize}, @@ -256,8 +256,8 @@ impl World { comp::Body::BirdMedium(bird_medium::Body::random()) }, 2 => { - is_hostile = false; - comp::Body::Critter(critter::Body::random()) + is_hostile = true; + comp::Body::Theropod(theropod::Body::random()) }, 3 => { match quadlow {