diff --git a/assets/common/items/armor/starter/glider.ron b/assets/common/items/armor/starter/glider.ron new file mode 100644 index 0000000000..087f4b16b5 --- /dev/null +++ b/assets/common/items/armor/starter/glider.ron @@ -0,0 +1,9 @@ +ItemDef( + name: "Swift Glider", + description: "Thank goodness for big pockets", + kind: Glider( + ( + kind: "Blue", + ), + ), +) diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index d24db1222a..657d073103 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -286,6 +286,14 @@ "bonerattler": { "keyword": "bonerattler", "generic": "Bonerattler" + }, + "deer": { + "keyword": "deer", + "generic": "Deer" + }, + "hirdrasil": { + "keyword": "hirdrasil", + "generic": "Hirdrasil" } } }, @@ -461,6 +469,38 @@ "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" + }, + "porcupine": { + "keyword": "porcupine", + "generic": "Porcupine" + }, + "beaver": { + "keyword": "beaver", + "generic": "Beaver" } } }, @@ -550,37 +590,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" + "odonto": { + "keyword": "odonto", + "generic": "Odonto" } } }, diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_central_manifest.ron similarity index 60% rename from assets/voxygen/voxel/biped_large_center_manifest.ron rename to assets/voxygen/voxel/biped_large_central_manifest.ron index ff6e86fb2c..1be2239118 100644 --- a/assets/voxygen/voxel/biped_large_center_manifest.ron +++ b/assets/voxygen/voxel/biped_large_central_manifest.ron @@ -2,241 +2,241 @@ (Ogre, Male): ( head: ( offset: (-8.0, -6.0, -6.5), - center: ("npc.ogre.male.head"), + central: ("npc.ogre.male.head"), ), torso_upper: ( offset: (-8.0, -6.0, -8.0), - center: ("npc.ogre.male.torso_upper"), + central: ("npc.ogre.male.torso_upper"), ), torso_lower: ( offset: (-6.0, -5.5, -10.0), - center: ("npc.ogre.male.torso_lower"), + central: ("npc.ogre.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -5.5, -5.0), - center: ("npc.ogre.male.hammer"), + central: ("npc.ogre.male.hammer"), ) ), (Ogre, Female): ( head: ( offset: (-9.0, -5.5, -6.0), - center: ("npc.ogre.female..head"), + central: ("npc.ogre.female..head"), ), torso_upper: ( offset: (-6.0, -5.0, -6.0), - center: ("npc.ogre.female.torso_upper"), + central: ("npc.ogre.female.torso_upper"), ), torso_lower: ( offset: (-5.0, -4.5, -6.0), - center: ("npc.ogre.female.torso_lower"), + central: ("npc.ogre.female.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-2.5, -5.5, -5.0), - center: ("npc.ogre.female.main"), + central: ("npc.ogre.female.main"), ) ), (Cyclops, Male): ( head: ( offset: (-7.0, -7.0, -6.5), - center: ("npc.cyclops.male.head"), + central: ("npc.cyclops.male.head"), ), torso_upper: ( offset: (-8.0, -6.0, -6.0), - center: ("npc.cyclops.male.torso_upper"), + central: ("npc.cyclops.male.torso_upper"), ), torso_lower: ( offset: (-6.0, -5.5, -12.0), - center: ("npc.cyclops.male.torso_lower"), + central: ("npc.cyclops.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.cyclops.male.hammer"), + central: ("npc.cyclops.male.hammer"), ) ), (Cyclops, Female): ( head: ( offset: (-7.0, -7.0, -6.5), - center: ("npc.cyclops.male.head"), + central: ("npc.cyclops.male.head"), ), torso_upper: ( offset: (-8.0, -6.0, -6.0), - center: ("npc.cyclops.male.torso_upper"), + central: ("npc.cyclops.male.torso_upper"), ), torso_lower: ( offset: (-6.0, -5.5, -12.0), - center: ("npc.cyclops.male.torso_lower"), + central: ("npc.cyclops.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.cyclops.female.hammer"), + central: ("npc.cyclops.female.hammer"), ) ), (Wendigo, Male): ( head: ( offset: (-15.0, -4.5, -9.5), - center: ("npc.wendigo.male.head"), + central: ("npc.wendigo.male.head"), ), torso_upper: ( offset: (-6.0, -5.5, -6.5), - center: ("npc.wendigo.male.torso_upper"), + central: ("npc.wendigo.male.torso_upper"), ), torso_lower: ( offset: (-4.0, -2.0, -4.0), - center: ("npc.wendigo.male.torso_lower"), + central: ("npc.wendigo.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.wendigo.male.hammer"), + central: ("npc.wendigo.male.hammer"), ) ), (Wendigo, Female): ( head: ( offset: (-15.0, -4.5, -9.5), - center: ("npc.wendigo.male.head"), + central: ("npc.wendigo.male.head"), ), torso_upper: ( offset: (-6.0, -5.5, -6.5), - center: ("npc.wendigo.male.torso_upper"), + central: ("npc.wendigo.male.torso_upper"), ), torso_lower: ( offset: (-4.0, -2.0, -4.0), - center: ("npc.wendigo.male.torso_lower"), + central: ("npc.wendigo.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.wendigo.male.hammer"), + central: ("npc.wendigo.male.hammer"), ) ), (Troll, Male): ( head: ( offset: (-8.0, -8.5, -9.0), - center: ("npc.troll.male.head"), + central: ("npc.troll.male.head"), ), torso_upper: ( offset: (-8.0, -7.5, -11.0), - center: ("npc.troll.male.torso_upper"), + central: ("npc.troll.male.torso_upper"), ), torso_lower: ( offset: (-6.0, -3.5, -5.0), - center: ("npc.troll.male.torso_lower"), + central: ("npc.troll.male.torso_lower"), ), jaw: ( offset: (-4.0, 0.0, -4.5), - center: ("npc.troll.male.jaw"), + central: ("npc.troll.male.jaw"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.troll.male.hammer"), + central: ("npc.troll.male.hammer"), ) ), (Troll, Female): ( head: ( offset: (-8.0, -8.5, -9.0), - center: ("npc.troll.male.head"), + central: ("npc.troll.male.head"), ), torso_upper: ( offset: (-8.0, -7.5, -11.0), - center: ("npc.troll.male.torso_upper"), + central: ("npc.troll.male.torso_upper"), ), torso_lower: ( offset: (-6.0, -3.5, -5.0), - center: ("npc.troll.male.torso_lower"), + central: ("npc.troll.male.torso_lower"), ), jaw: ( offset: (-4.0, 0.0, -4.5), - center: ("npc.troll.male.jaw"), + central: ("npc.troll.male.jaw"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.troll.female.hammer"), + central: ("npc.troll.female.hammer"), ) ), @@ -244,62 +244,62 @@ (Dullahan, Male): ( head: ( offset: (-8.0, -5.0, -6.0), - center: ("armor.empty"), + central: ("armor.empty"), ), torso_upper: ( offset: (-9.0, -7.5, -7.0), - center: ("npc.dullahan.male.torso_upper"), + central: ("npc.dullahan.male.torso_upper"), ), torso_lower: ( offset: (-8.0, -6.0, -9.0), - center: ("npc.dullahan.male.torso_lower"), + central: ("npc.dullahan.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.cyclops.male.hammer"), + central: ("npc.cyclops.male.hammer"), ) ), (Dullahan, Female): ( head: ( offset: (-8.0, -5.0, -6.0), - center: ("armor.empty"), + central: ("armor.empty"), ), torso_upper: ( offset: (-9.0, -7.5, -7.0), - center: ("npc.dullahan.male.torso_upper"), + central: ("npc.dullahan.male.torso_upper"), ), torso_lower: ( offset: (-8.0, -6.0, -9.0), - center: ("npc.dullahan.male.torso_lower"), + central: ("npc.dullahan.male.torso_lower"), ), jaw: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), tail: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), second: ( offset: (0.0, 0.0, 0.0), - center: ("armor.empty"), + central: ("armor.empty"), ), main: ( offset: (-5.0, -6.5, -4.0), - center: ("npc.cyclops.male.hammer"), + central: ("npc.cyclops.male.hammer"), ) ), }) diff --git a/assets/voxygen/voxel/bird_medium_center_manifest.ron b/assets/voxygen/voxel/bird_medium_central_manifest.ron similarity index 61% rename from assets/voxygen/voxel/bird_medium_center_manifest.ron rename to assets/voxygen/voxel/bird_medium_central_manifest.ron index 6657154280..87bf41bdf7 100644 --- a/assets/voxygen/voxel/bird_medium_center_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_central_manifest.ron @@ -2,225 +2,225 @@ (Duck, Male): ( head: ( offset: (-1.5, -2.0, -1.5), - center: ("npc.duck.male.head"), + central: ("npc.duck.male.head"), ), torso: ( offset: (-2.5, -3.0, -2.0), - center: ("npc.duck.male.torso"), + central: ("npc.duck.male.torso"), ), tail: ( offset: (-1.5, -0.5, -2.5), - center: ("npc.duck.male.tail"), + central: ("npc.duck.male.tail"), ) ), (Duck, Female): ( head: ( offset: (-1.5, -2.0, -1.5), - center: ("npc.duck.female.head"), + central: ("npc.duck.female.head"), ), torso: ( offset: (-2.5, -3.0, -2.0), - center: ("npc.duck.female.torso"), + central: ("npc.duck.female.torso"), ), tail: ( offset: (-1.5, -0.5, -2.5), - center: ("npc.duck.female.tail"), + central: ("npc.duck.female.tail"), ) ), (Chicken, Male): ( head: ( offset: (-1.5, -2.0, -3.5), - center: ("npc.chicken.male.head"), + central: ("npc.chicken.male.head"), ), torso: ( offset: (-2.5, -3.0, -2.0), - center: ("npc.chicken.male.torso"), + central: ("npc.chicken.male.torso"), ), tail: ( offset: (-1.5, -2.5, -3.5), - center: ("npc.chicken.male.tail"), + central: ("npc.chicken.male.tail"), ) ), (Chicken, Female): ( head: ( offset: (-1.5, -2.0, -2.5), - center: ("npc.chicken.female.head"), + central: ("npc.chicken.female.head"), ), torso: ( offset: (-2.5, -3.0, -2.0), - center: ("npc.chicken.female.torso"), + central: ("npc.chicken.female.torso"), ), tail: ( offset: (-1.5, -0.5, -2.5), - center: ("npc.chicken.female.tail"), + central: ("npc.chicken.female.tail"), ) ), (Goose, Male): ( head: ( offset: (-2.0, -3.5, -0.0), - center: ("npc.goose.male.head"), + central: ("npc.goose.male.head"), ), torso: ( offset: (-3.5, -4.5, -3.0), - center: ("npc.goose.male.torso"), + central: ("npc.goose.male.torso"), ), tail: ( offset: (-2.0, -1.0, -3.5), - center: ("npc.goose.male.tail"), + central: ("npc.goose.male.tail"), ) ), (Goose, Female): ( head: ( offset: (-2.0, -3.5, -0.0), - center: ("npc.goose.male.head"), + central: ("npc.goose.male.head"), ), torso: ( offset: (-3.5, -4.5, -3.0), - center: ("npc.goose.male.torso"), + central: ("npc.goose.male.torso"), ), tail: ( offset: (-2.0, -1.0, -3.5), - center: ("npc.goose.male.tail"), + central: ("npc.goose.male.tail"), ) ), (Peacock, Male): ( head: ( offset: (-2.0, -1.5, -0.0), - center: ("npc.peacock.male.head"), + central: ("npc.peacock.male.head"), ), torso: ( offset: (-2.5, -5.5, -4.5), - center: ("npc.peacock.male.torso"), + central: ("npc.peacock.male.torso"), ), tail: ( offset: (-3.0, -1.5, -5.0), - center: ("npc.peacock.male.tail"), + central: ("npc.peacock.male.tail"), ) ), (Peacock, Female): ( head: ( offset: (-2.0, -1.5, -0.0), - center: ("npc.peacock.female.head"), + central: ("npc.peacock.female.head"), ), torso: ( offset: (-2.5, -5.5, -4.5), - center: ("npc.peacock.female.torso"), + central: ("npc.peacock.female.torso"), ), tail: ( offset: (-3.0, -1.5, -5.0), - center: ("npc.peacock.female.tail"), + central: ("npc.peacock.female.tail"), ) ), (Eagle, Male): ( head: ( offset: (-2.0, -2.0, -3.5), - center: ("npc.eagle.male.head"), + central: ("npc.eagle.male.head"), ), torso: ( offset: (-3.0, -4.5, -4.5), - center: ("npc.eagle.male.torso"), + central: ("npc.eagle.male.torso"), ), tail: ( offset: (-2.0, -3.5, -3.5), - center: ("npc.eagle.male.tail"), + central: ("npc.eagle.male.tail"), ) ), (Eagle, Female): ( head: ( offset: (-2.0, -2.0, -3.5), - center: ("npc.eagle.male.head"), + central: ("npc.eagle.male.head"), ), torso: ( offset: (-3.0, -4.5, -4.5), - center: ("npc.eagle.male.torso"), + central: ("npc.eagle.male.torso"), ), tail: ( offset: (-2.0, -3.5, -3.5), - center: ("npc.eagle.male.tail"), + central: ("npc.eagle.male.tail"), ) ), (Snowyowl, Male): ( head: ( offset: (-3.5, -4.5, -4.0), - center: ("npc.snowyowl.male.head"), + central: ("npc.snowyowl.male.head"), ), torso: ( offset: (-3.5, -5.0, -3.0), - center: ("npc.snowyowl.male.torso"), + central: ("npc.snowyowl.male.torso"), ), tail: ( offset: (-2.5, -3.0, -2.0), - center: ("npc.snowyowl.male.tail"), + central: ("npc.snowyowl.male.tail"), ) ), (Snowyowl, Female): ( head: ( offset: (-3.5, -4.5, -4.0), - center: ("npc.snowyowl.male.head"), + central: ("npc.snowyowl.male.head"), ), torso: ( offset: (-3.5, -5.0, -3.0), - center: ("npc.snowyowl.male.torso"), + central: ("npc.snowyowl.male.torso"), ), tail: ( offset: (-2.5, -3.0, -2.0), - center: ("npc.snowyowl.male.tail"), + central: ("npc.snowyowl.male.tail"), ) ), (Parrot, Male): ( head: ( offset: (-1.5, -1.5, -2.5), - center: ("npc.parrot.male.head"), + central: ("npc.parrot.male.head"), ), torso: ( offset: (-1.5, -3.5, -3.5), - center: ("npc.parrot.male.torso"), + central: ("npc.parrot.male.torso"), ), tail: ( offset: (-1.5, -4.5, -1.5), - center: ("npc.parrot.male.tail"), + central: ("npc.parrot.male.tail"), ) ), (Parrot, Female): ( head: ( offset: (-1.5, -1.5, -2.5), - center: ("npc.parrot.male.head"), + central: ("npc.parrot.male.head"), ), torso: ( offset: (-1.5, -3.5, -3.5), - center: ("npc.parrot.male.torso"), + central: ("npc.parrot.male.torso"), ), tail: ( offset: (-1.5, -4.5, -1.5), - center: ("npc.parrot.male.tail"), + central: ("npc.parrot.male.tail"), ) ), (Cockatrice, Male): ( head: ( offset: (-2.5, 0.0, -8.0), - center: ("npc.cockatrice.male.head"), + central: ("npc.cockatrice.male.head"), ), torso: ( offset: (-3.5, -6.5, -7.5), - center: ("npc.cockatrice.male.torso"), + central: ("npc.cockatrice.male.torso"), ), tail: ( offset: (-1.5, -3.5, -4.0), - center: ("npc.cockatrice.male.tail"), + central: ("npc.cockatrice.male.tail"), ) ), (Cockatrice, Female): ( head: ( offset: (-2.5, 0.0, -8.0), - center: ("npc.cockatrice.male.head"), + central: ("npc.cockatrice.male.head"), ), torso: ( offset: (-3.5, -6.5, -7.5), - center: ("npc.cockatrice.male.torso"), + central: ("npc.cockatrice.male.torso"), ), tail: ( offset: (-1.5, -3.5, -4.0), - center: ("npc.cockatrice.male.tail"), + central: ("npc.cockatrice.male.tail"), ) ), }) \ No newline at end of file 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/dragon_center_manifest.ron b/assets/voxygen/voxel/dragon_central_manifest.ron similarity index 58% rename from assets/voxygen/voxel/dragon_center_manifest.ron rename to assets/voxygen/voxel/dragon_central_manifest.ron index 317e5183b1..e19af6fc92 100644 --- a/assets/voxygen/voxel/dragon_center_manifest.ron +++ b/assets/voxygen/voxel/dragon_central_manifest.ron @@ -2,61 +2,61 @@ (Reddragon, Male): ( upper: ( offset: (-6.5, -2.0, -6.0), - center: ("npc.reddragon.male.head_upper"), + central: ("npc.reddragon.male.head_upper"), ), lower: ( offset: (-2.5, -2.0, -5.0), - center: ("npc.reddragon.male.head_lower"), + central: ("npc.reddragon.male.head_lower"), ), jaw: ( offset: (-3.5, -2.0, -1.5), - center: ("npc.reddragon.male.jaw"), + central: ("npc.reddragon.male.jaw"), ), chest_front: ( offset: (-6.5, -6.0, -7.5), - center: ("npc.reddragon.male.chest_front"), + central: ("npc.reddragon.male.chest_front"), ), chest_rear: ( offset: (-6.5, -13.0, -7.0), - center: ("npc.reddragon.male.chest_rear"), + central: ("npc.reddragon.male.chest_rear"), ), tail_front: ( offset: (-2.5, -12.0, -3.5), - center: ("npc.reddragon.male.tail_front"), + central: ("npc.reddragon.male.tail_front"), ), tail_rear: ( offset: (-3.5, -16.0, -3.0), - center: ("npc.reddragon.male.tail_rear"), + central: ("npc.reddragon.male.tail_rear"), ) ), (Reddragon, Female): ( upper: ( offset: (-6.5, -2.0, -6.0), - center: ("npc.reddragon.male.head_upper"), + central: ("npc.reddragon.male.head_upper"), ), lower: ( offset: (-2.5, -2.0, -5.0), - center: ("npc.reddragon.male.head_lower"), + central: ("npc.reddragon.male.head_lower"), ), jaw: ( offset: (-3.5, -2.0, -1.5), - center: ("npc.reddragon.male.jaw"), + central: ("npc.reddragon.male.jaw"), ), chest_front: ( offset: (-6.5, -6.0, -7.5), - center: ("npc.reddragon.male.chest_front"), + central: ("npc.reddragon.male.chest_front"), ), chest_rear: ( offset: (-6.5, -13.0, -7.0), - center: ("npc.reddragon.male.chest_rear"), + central: ("npc.reddragon.male.chest_rear"), ), tail_front: ( offset: (-2.5, -12.0, -3.5), - center: ("npc.reddragon.male.tail_front"), + central: ("npc.reddragon.male.tail_front"), ), tail_rear: ( offset: (-3.5, -16.0, -3.0), - center: ("npc.reddragon.male.tail_rear"), + central: ("npc.reddragon.male.tail_rear"), ) ), }) diff --git a/assets/voxygen/voxel/golem_center_manifest.ron b/assets/voxygen/voxel/golem_center_manifest.ron deleted file mode 100644 index 2fe084ca44..0000000000 --- a/assets/voxygen/voxel/golem_center_manifest.ron +++ /dev/null @@ -1,22 +0,0 @@ -({ - (StoneGolem, Male): ( - head: ( - offset: (-5.0, -5.5, -7.5), - center: ("npc.stonegolem.male.head"), - ), - torso_upper: ( - offset: (-6.0, -3.5, -10.0), - center: ("npc.stonegolem.male.torso_upper"), - ), - ), - (StoneGolem, Female): ( - head: ( - offset: (-5.0, -5.5, -7.5), - center: ("npc.stonegolem.male.head"), - ), - torso_upper: ( - offset: (-6.0, -3.5, -10.0), - center: ("npc.stonegolem.male.torso_upper"), - ), - ), -}) diff --git a/assets/voxygen/voxel/golem_central_manifest.ron b/assets/voxygen/voxel/golem_central_manifest.ron new file mode 100644 index 0000000000..c225ebdfd9 --- /dev/null +++ b/assets/voxygen/voxel/golem_central_manifest.ron @@ -0,0 +1,30 @@ +({ + (StoneGolem, Male): ( + head: ( + offset: (-3.5, -4.0, -0.0), + central: ("npc.stonegolem.male.head"), + ), + torso_upper: ( + offset: (-10.5, -10.5, -10.5), + central: ("npc.stonegolem.male.chest_upper"), + ), + torso_lower: ( + offset: (-4.5, -4.5, -7.0), + central: ("npc.stonegolem.male.chest_lower"), + ), + ), + (StoneGolem, Female): ( + head: ( + offset: (-3.5, -4.0, -0.0), + central: ("npc.stonegolem.male.head"), + ), + torso_upper: ( + offset: (-10.5, -10.5, -10.5), + central: ("npc.stonegolem.male.chest_upper"), + ), + torso_lower: ( + offset: (-4.5, -4.5, -7.0), + central: ("npc.stonegolem.male.chest_lower"), + ), + ), +}) diff --git a/assets/voxygen/voxel/golem_lateral_manifest.ron b/assets/voxygen/voxel/golem_lateral_manifest.ron index 5945b66c37..4504476042 100644 --- a/assets/voxygen/voxel/golem_lateral_manifest.ron +++ b/assets/voxygen/voxel/golem_lateral_manifest.ron @@ -1,69 +1,69 @@ ({ (StoneGolem, Male): ( shoulder_l: ( - offset: (-4.5, -4.0, -5.0), + offset: (-18.0, -7.5, -7.0), lateral: ("npc.stonegolem.male.shoulder_l"), ), shoulder_r: ( - offset: (-4.5, -4.0, -5.0), + offset: (0.0, -7.5, -7.0), lateral: ("npc.stonegolem.male.shoulder_r"), ), hand_l: ( - offset: (-3.0, -3.5, -14.0), + offset: (-9.0, -11.5, -26.0), lateral: ("npc.stonegolem.male.hand_l"), ), hand_r: ( - offset: (-3.0, -3.5, -14.0), + offset: (-9.0, -11.5, -26.0), lateral: ("npc.stonegolem.male.hand_r"), ), leg_l: ( - offset: (-2.5, -2.5, -6.0), + offset: (-7.0, -3.5, -9.0), lateral: ("npc.stonegolem.male.leg_l"), ), leg_r: ( - offset: (-2.5, -2.5, -6.0), + offset: (0.0, -3.5, -9.0), lateral: ("npc.stonegolem.male.leg_r"), ), foot_l: ( - offset: (-3.0, -3.5, -9.5), + offset: (-4.5, -4.5, -11.0), lateral: ("npc.stonegolem.male.foot_l"), ), foot_r: ( - offset: (-3.0, -3.5, -9.5), + offset: (-4.5, -4.5, -11.0), lateral: ("npc.stonegolem.male.foot_r"), ) ), (StoneGolem, Female): ( shoulder_l: ( - offset: (-4.5, -4.0, -5.0), + offset: (-18.0, -7.5, -7.0), lateral: ("npc.stonegolem.male.shoulder_l"), ), shoulder_r: ( - offset: (-4.5, -4.0, -5.0), + offset: (0.0, -7.5, -7.0), lateral: ("npc.stonegolem.male.shoulder_r"), ), hand_l: ( - offset: (-3.0, -3.5, -14.0), + offset: (-9.0, -11.5, -26.0), lateral: ("npc.stonegolem.male.hand_l"), ), hand_r: ( - offset: (-3.0, -3.5, -14.0), + offset: (-9.0, -11.5, -26.0), lateral: ("npc.stonegolem.male.hand_r"), ), leg_l: ( - offset: (-2.5, -2.5, -6.0), + offset: (-7.0, -3.5, -9.0), lateral: ("npc.stonegolem.male.leg_l"), ), leg_r: ( - offset: (-2.5, -2.5, -6.0), + offset: (0.0, -3.5, -9.0), lateral: ("npc.stonegolem.male.leg_r"), ), foot_l: ( - offset: (-3.0, -3.5, -10.5), + offset: (-4.5, -4.5, -11.0), lateral: ("npc.stonegolem.male.foot_l"), ), foot_r: ( - offset: (-3.0, -3.5, -10.5), + offset: (-4.5, -4.5, -11.0), lateral: ("npc.stonegolem.male.foot_r"), ) ), 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..bc82319cbb --- /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:eb4161119dbb651beefd80d1baa3f4d293970c30605999380786f771b74c406d +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..80e54cd267 --- /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:7f406a2bac435814ff96aadd2dc3a54de3a0ebf43c686fd40e5d925dd4a171f5 +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..a48a8998e9 --- /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:334d175000dc06822f6951ab972689168b4b43fa64dda69fecc78b527f6748f2 +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..7dee3f7798 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:dda43f9641dfe78022973ce1a1d5631fe066e2f90a6a5f4d7f407478f7acacaa +size 1620 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/axolotl/male/foot_bl.vox b/assets/voxygen/voxel/npc/axolotl/male/foot_bl.vox new file mode 100644 index 0000000000..24830ba05d --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a06dd06be133f1b79f2ea03a28219ab58de825c3206e87b55dead31aca9d819 +size 1144 diff --git a/assets/voxygen/voxel/npc/axolotl/male/foot_br.vox b/assets/voxygen/voxel/npc/axolotl/male/foot_br.vox new file mode 100644 index 0000000000..f20993770c --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a420eb460e44c4ff45303a63bd375d9648247aba82649fe7d39c56a1d3229ab2 +size 1144 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..ae9e61784e --- /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:41232e14058833068511c1a10c79696fe922c379b818544e22ed260d753b4f31 +size 1144 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..54b295b91c --- /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:69f4882d537b341f38b4d1f0cfa48d75adf74e0ae57afda66b3b79b388a41d05 +size 1144 diff --git a/assets/voxygen/voxel/npc/axolotl/male/head.vox b/assets/voxygen/voxel/npc/axolotl/male/head.vox index 2f44cbc2c7..6009c965c4 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:9b976fba45fd1c0cb0c53425a96463f54ae6caba179b1bb7bb4896b61f029465 +size 1720 diff --git a/assets/voxygen/voxel/npc/axolotl/male/tail.vox b/assets/voxygen/voxel/npc/axolotl/male/tail.vox index f16e5c2c63..e5cf6777d0 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:e97951913ea37b36abafd3396747c1b195691ad4851fe7b5404a3537b04185be +size 1296 diff --git a/assets/voxygen/voxel/npc/beaver/male/chest.vox b/assets/voxygen/voxel/npc/beaver/male/chest.vox new file mode 100644 index 0000000000..e02d87d9be --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e87d102c59461852a6764d43f9829674fd494b647edea9316ad40a1f6cf457a2 +size 3080 diff --git a/assets/voxygen/voxel/npc/beaver/male/foot_bl.vox b/assets/voxygen/voxel/npc/beaver/male/foot_bl.vox new file mode 100644 index 0000000000..3a87ce60eb --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0396d67d40f031393caf6f74784aa8b53edd465012c64a4bc589cc0925fd3297 +size 1356 diff --git a/assets/voxygen/voxel/npc/beaver/male/foot_br.vox b/assets/voxygen/voxel/npc/beaver/male/foot_br.vox new file mode 100644 index 0000000000..8e6567e58d --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:484d230c5ededc5e3d7613fa2873f29c9a63a87c9e8e27f6b1d2bfb0c26d2b26 +size 1356 diff --git a/assets/voxygen/voxel/npc/beaver/male/foot_fl.vox b/assets/voxygen/voxel/npc/beaver/male/foot_fl.vox new file mode 100644 index 0000000000..c848036f75 --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de2ae142495e09cb599f9cd97c2be908931c126e5e4aa09a96266d66dda8dddd +size 1216 diff --git a/assets/voxygen/voxel/npc/beaver/male/foot_fr.vox b/assets/voxygen/voxel/npc/beaver/male/foot_fr.vox new file mode 100644 index 0000000000..d5f0a71c09 --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96852f43b409e058bb15b359aacb59031e2a642d594edf18f27a42a820fd92e9 +size 1216 diff --git a/assets/voxygen/voxel/npc/beaver/male/head.vox b/assets/voxygen/voxel/npc/beaver/male/head.vox new file mode 100644 index 0000000000..a3efaccad7 --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae85bad705d925efd5a1ceb74bd176fb2139e6dba59c28ec1e8f7b0be2fcd9e2 +size 1920 diff --git a/assets/voxygen/voxel/npc/beaver/male/tail.vox b/assets/voxygen/voxel/npc/beaver/male/tail.vox new file mode 100644 index 0000000000..2e6887dbe2 --- /dev/null +++ b/assets/voxygen/voxel/npc/beaver/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98306d9bfef42e4ec03322a7355ae418ee84d4c0c9f473f96cf16e014e97d61f +size 1336 diff --git a/assets/voxygen/voxel/npc/bonerattler/male/head_upper.vox b/assets/voxygen/voxel/npc/bonerattler/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/bonerattler/male/head_upper.vox rename to assets/voxygen/voxel/npc/bonerattler/male/head.vox diff --git a/assets/voxygen/voxel/npc/bonerattler/male/head_lower.vox b/assets/voxygen/voxel/npc/bonerattler/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/bonerattler/male/head_lower.vox rename to assets/voxygen/voxel/npc/bonerattler/male/neck.vox diff --git a/assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox b/assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox index 0bb861a008..2378aa6d83 100644 --- a/assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox +++ b/assets/voxygen/voxel/npc/catoblepas/male/foot_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36cd396b6676ebae90614b0b23b6234768cbf3feec21e89e9d7af1c1cf748365 -size 1984 +oid sha256:f852128a1b1dda0f6c0f0b3574070360366dcc121f758c8dd57428a7bd14a8b0 +size 1968 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/foot_fr.vox b/assets/voxygen/voxel/npc/catoblepas/male/foot_fr.vox index e5b4696b11..e2ce2d13f5 100644 --- a/assets/voxygen/voxel/npc/catoblepas/male/foot_fr.vox +++ b/assets/voxygen/voxel/npc/catoblepas/male/foot_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:299eaedeee8acb0b4e0ff9a6b7ab85dde9f788e5f3a4a37da9ca9c705b7d9411 -size 1984 +oid sha256:fd9bd42b20ddd1cb83b2b98e6b70263ae6d1a69d8a72ce09e5309d9652dbc0b2 +size 1968 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/head_upper.vox b/assets/voxygen/voxel/npc/catoblepas/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/catoblepas/male/head_upper.vox rename to assets/voxygen/voxel/npc/catoblepas/male/head.vox diff --git a/assets/voxygen/voxel/npc/catoblepas/male/leg_fl.vox b/assets/voxygen/voxel/npc/catoblepas/male/leg_fl.vox index fa70793c8c..e0a298a2cd 100644 --- a/assets/voxygen/voxel/npc/catoblepas/male/leg_fl.vox +++ b/assets/voxygen/voxel/npc/catoblepas/male/leg_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3caf6830cf45638f5bebc71e1a95c0af5a685bbed19983700e6826e5e7f74025 -size 2224 +oid sha256:42c2918702fe0bfb5a999f0e32a88324e4f6fe6182498567ad29c75769da0a76 +size 2280 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox b/assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox index 0cb7d1d311..c15bdf9dca 100644 --- a/assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox +++ b/assets/voxygen/voxel/npc/catoblepas/male/leg_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3686d1afbcbe88864e782208c38b0e0c77278d8cd9be3950b267f31b6a1d96bc -size 2224 +oid sha256:7bc02d3904bc9532a1067ea11cccd3a3c197373ffbbead00ca1f8dc5130d0786 +size 2280 diff --git a/assets/voxygen/voxel/npc/catoblepas/male/head_lower.vox b/assets/voxygen/voxel/npc/catoblepas/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/catoblepas/male/head_lower.vox rename to assets/voxygen/voxel/npc/catoblepas/male/neck.vox diff --git a/assets/voxygen/voxel/npc/deer/female/foot_bl.vox b/assets/voxygen/voxel/npc/deer/female/foot_bl.vox new file mode 100644 index 0000000000..5d0acc172d --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8a6343692a3b0b307d210ddaa32810d51f8577723a49fb8821ba212fd420d54 +size 1284 diff --git a/assets/voxygen/voxel/npc/deer/female/foot_br.vox b/assets/voxygen/voxel/npc/deer/female/foot_br.vox new file mode 100644 index 0000000000..c4401a8efe --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f390d5d9133ac17e1ed463ff16c52ba797d10e6cd8261a4380bbac312c46c3a +size 1284 diff --git a/assets/voxygen/voxel/npc/deer/female/foot_fl.vox b/assets/voxygen/voxel/npc/deer/female/foot_fl.vox new file mode 100644 index 0000000000..9ef54c93e1 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11b9589b90fa7e122eaaa2cb8af330c99001d334866f2fbe4ee1e9ff322f9b8d +size 1224 diff --git a/assets/voxygen/voxel/npc/deer/female/foot_fr.vox b/assets/voxygen/voxel/npc/deer/female/foot_fr.vox new file mode 100644 index 0000000000..eaf6dd9698 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:693b39a95bad975d4ad391fd5df73bd96e5e63edca884616f1feb7f66fbd3e87 +size 1224 diff --git a/assets/voxygen/voxel/npc/deer/female/head.vox b/assets/voxygen/voxel/npc/deer/female/head.vox new file mode 100644 index 0000000000..ce3dcf5874 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae6f9c307ee8c2aff2d6479780789fd04b4ab072f40cea0507b8f928a10bc2af +size 2084 diff --git a/assets/voxygen/voxel/npc/deer/female/jaw.vox b/assets/voxygen/voxel/npc/deer/female/jaw.vox new file mode 100644 index 0000000000..3fff4d0318 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f2f5f3aa63ec62578b904aa4db0c0dcf9405c1aeb5224c2b376937828e74797 +size 1120 diff --git a/assets/voxygen/voxel/npc/deer/female/leg_bl.vox b/assets/voxygen/voxel/npc/deer/female/leg_bl.vox new file mode 100644 index 0000000000..b388daeb23 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/leg_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c85f159166e7a57ebbdfdca4d42cdfbc4d581f45f88b48ea3617d8f2df6d9b7 +size 1528 diff --git a/assets/voxygen/voxel/npc/deer/female/leg_br.vox b/assets/voxygen/voxel/npc/deer/female/leg_br.vox new file mode 100644 index 0000000000..fe57b70e38 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/leg_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64ddf655a6ffca04b5491196ebe3b55497bd08c5ab1d7146af79df88b6591f00 +size 1528 diff --git a/assets/voxygen/voxel/npc/deer/female/leg_fl.vox b/assets/voxygen/voxel/npc/deer/female/leg_fl.vox new file mode 100644 index 0000000000..bd52c4ece4 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/leg_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2ad57a269866bb8c39357886a88fa6de0199045dfda70ae17604308116d036c +size 1444 diff --git a/assets/voxygen/voxel/npc/deer/female/leg_fr.vox b/assets/voxygen/voxel/npc/deer/female/leg_fr.vox new file mode 100644 index 0000000000..aa8b6e3e37 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/leg_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15e0697f4764c50e85f7bd45ed9f088b4e8ee90858526fdd166fc72fa11e58db +size 1444 diff --git a/assets/voxygen/voxel/npc/deer/female/neck.vox b/assets/voxygen/voxel/npc/deer/female/neck.vox new file mode 100644 index 0000000000..4ed9d3a208 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2dd296cb5fcd9ce29c5e5c9b785ee5d4edb482efb2542880bcf4abd8e9513a9 +size 1832 diff --git a/assets/voxygen/voxel/npc/deer/female/tail.vox b/assets/voxygen/voxel/npc/deer/female/tail.vox new file mode 100644 index 0000000000..7fdd6cdb98 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feb74d75d8b960d349f0a01de9f2feb0186dfa05ac785602addeef87c1616c17 +size 1232 diff --git a/assets/voxygen/voxel/npc/deer/female/torso_back.vox b/assets/voxygen/voxel/npc/deer/female/torso_back.vox new file mode 100644 index 0000000000..495bbbe200 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:422f8d686732c524a17e4bd6799995c24a18f88822dc75d9b05e608bb29b55a6 +size 2832 diff --git a/assets/voxygen/voxel/npc/deer/female/torso_front.vox b/assets/voxygen/voxel/npc/deer/female/torso_front.vox new file mode 100644 index 0000000000..261120798b --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab830bb1ffefde9af5c7418e31a6867f9741ceba1d033e81b4d8d9d425f507ae +size 2840 diff --git a/assets/voxygen/voxel/npc/deer/male/foot_bl.vox b/assets/voxygen/voxel/npc/deer/male/foot_bl.vox new file mode 100644 index 0000000000..3d5c156854 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a6923910d5875a533bca256a88e906b819d1902bee8093f4580e6003e256525 +size 1284 diff --git a/assets/voxygen/voxel/npc/deer/male/foot_br.vox b/assets/voxygen/voxel/npc/deer/male/foot_br.vox new file mode 100644 index 0000000000..2c3504a239 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ba2a9e2503c0b9d7b5117ec2b3f9af83b871c534e47d3f736e6e0184de9f925 +size 1284 diff --git a/assets/voxygen/voxel/npc/deer/male/foot_fl.vox b/assets/voxygen/voxel/npc/deer/male/foot_fl.vox new file mode 100644 index 0000000000..2b539b930d --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ece09099cabfb54a3057106ca9665909f16bce545b50f094a3130d6b336f8bd +size 1224 diff --git a/assets/voxygen/voxel/npc/deer/male/foot_fr.vox b/assets/voxygen/voxel/npc/deer/male/foot_fr.vox new file mode 100644 index 0000000000..e78f76722e --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:589f5178e855a2aa543c410fa77849c4cc7ce1f0bc47d731764f24ba2506a504 +size 1224 diff --git a/assets/voxygen/voxel/npc/deer/male/head.vox b/assets/voxygen/voxel/npc/deer/male/head.vox new file mode 100644 index 0000000000..306543a70f --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb95980cb5e60b0d169c3b0e47f37fd3ab9097c7f3085a56c60b7694b6de9e3a +size 2324 diff --git a/assets/voxygen/voxel/npc/deer/male/jaw.vox b/assets/voxygen/voxel/npc/deer/male/jaw.vox new file mode 100644 index 0000000000..fcd0b34cda --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b89160704115f8238ced8d594eb6f91b537ea80b3f9b8684dcae9d8b6bf96491 +size 1120 diff --git a/assets/voxygen/voxel/npc/deer/male/leg_bl.vox b/assets/voxygen/voxel/npc/deer/male/leg_bl.vox new file mode 100644 index 0000000000..902bbce745 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/leg_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d46e63796b7c93cced2649f77e50980c012b1189e6e4418e6741a3f692cd6365 +size 1528 diff --git a/assets/voxygen/voxel/npc/deer/male/leg_br.vox b/assets/voxygen/voxel/npc/deer/male/leg_br.vox new file mode 100644 index 0000000000..8c02167dc5 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/leg_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e521b3f754ba6e899f73aecda8bcda24e2430ccf897bbe96853d647969f3a6d +size 1528 diff --git a/assets/voxygen/voxel/npc/deer/male/leg_fl.vox b/assets/voxygen/voxel/npc/deer/male/leg_fl.vox new file mode 100644 index 0000000000..bd05cf9582 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/leg_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da910f17abc20f6063ad155ee6f848ea42cf2206b7a28604083266555873cddb +size 1444 diff --git a/assets/voxygen/voxel/npc/deer/male/leg_fr.vox b/assets/voxygen/voxel/npc/deer/male/leg_fr.vox new file mode 100644 index 0000000000..437b65a888 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/leg_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a0008d3043ce4a65eb40bd7e65ed97a22d64309c9a2c1835ae6e784f512419d +size 1444 diff --git a/assets/voxygen/voxel/npc/deer/male/neck.vox b/assets/voxygen/voxel/npc/deer/male/neck.vox new file mode 100644 index 0000000000..adba965a99 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6aac8d4e1e5fb1b43850a711a38f67c401ae7a4ffc9516f431715216a3a24c2c +size 1832 diff --git a/assets/voxygen/voxel/npc/deer/male/tail.vox b/assets/voxygen/voxel/npc/deer/male/tail.vox new file mode 100644 index 0000000000..abf12e5ae9 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46488983cb96091dc4ae87959919014ca45c2466cef051979f2a11eb542a7647 +size 1232 diff --git a/assets/voxygen/voxel/npc/deer/male/torso_back.vox b/assets/voxygen/voxel/npc/deer/male/torso_back.vox new file mode 100644 index 0000000000..205b16dc61 --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e1e1c05b387233552d9bb72fc27c9a66b40c4dd213941179f1ea77b96c87c9b +size 2832 diff --git a/assets/voxygen/voxel/npc/deer/male/torso_front.vox b/assets/voxygen/voxel/npc/deer/male/torso_front.vox new file mode 100644 index 0000000000..c7de9beb2e --- /dev/null +++ b/assets/voxygen/voxel/npc/deer/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bf95e1723ff23a2ed9d5537acd89260d0f36731b91d14a8f2fb4d75dcde237e +size 2840 diff --git a/assets/voxygen/voxel/npc/frostfang/male/head_upper.vox b/assets/voxygen/voxel/npc/frostfang/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/frostfang/male/head_upper.vox rename to assets/voxygen/voxel/npc/frostfang/male/head.vox diff --git a/assets/voxygen/voxel/npc/frostfang/male/head_lower.vox b/assets/voxygen/voxel/npc/frostfang/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/frostfang/male/head_lower.vox rename to assets/voxygen/voxel/npc/frostfang/male/neck.vox diff --git a/assets/voxygen/voxel/npc/fungome/male/chest.vox b/assets/voxygen/voxel/npc/fungome/male/chest.vox index b3c3001ead..b7ff36981e 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:441160398e5113e32af491d863e0ad7e599f0846d6844c3fb572179cb28bb374 +size 3232 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..e5db739148 --- /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:45c80e397249aa2b0518ee53f3edee8a37e888e549d56f0666b6ad1f608f481b +size 1136 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..7bee9878ac --- /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:f483a3d6fcc6cf3a2599037d3de3159d54a23887ff7ea50f4307b558176043e8 +size 1136 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..e475b5f432 --- /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:d4c3b9b5efe26218bc9931f28ae1cd616401e8813ee88bf64bb1f8d81c082932 +size 1140 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..354634f21a --- /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:716c8f36e39e340b4c2527548a5fc98276ae1403da488cc9e1533baa7f162206 +size 1140 diff --git a/assets/voxygen/voxel/npc/fungome/male/head.vox b/assets/voxygen/voxel/npc/fungome/male/head.vox index 68d5137b0b..b60f4f96c7 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:9553a7bc4e35153a96496a3d3ebc76d1cc896295e37ac057afd5c6c57f38b8bf +size 1376 diff --git a/assets/voxygen/voxel/npc/fungome/male/tail.vox b/assets/voxygen/voxel/npc/fungome/male/tail.vox index c0d69871b7..ecb3fd96d8 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:5261b24daf690fa32394fe14ef0b98a38c66f73fddffc233098cd4e2ac46952a +size 1152 diff --git a/assets/voxygen/voxel/npc/gecko/male/Gecko.vox b/assets/voxygen/voxel/npc/gecko/male/Gecko.vox new file mode 100644 index 0000000000..9d9bcbae4c --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/Gecko.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68ba19e7cea78b0523ed843f958700d4a0c55cd63adf1f04968d6d0f0015f963 +size 57760 diff --git a/assets/voxygen/voxel/npc/gecko/male/chest.vox b/assets/voxygen/voxel/npc/gecko/male/chest.vox index 5bfce4e9b0..b4dc2aa512 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:a3aa5edc7b6a6d22e4ee15f8d6f4968683d735b1317543664606bf0f5fd25d1f +size 1520 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..7c33087036 --- /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:1f3cba80c04f52cd2d80480ccf54fc8b337c9708f27829f507786c8dc38a5b85 +size 1172 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..a69038267d --- /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:557b86d32a5c7be5430ca05b2361ab4b9019e1fd299df6f77e608ca19af30306 +size 1172 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..e4cf0ff28f --- /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:4ec3ee19ab326fa7a0cd5e19ef3be23ac0237ba7c1eb7b2b16bbbdfc6ebaf840 +size 1168 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..70096b9e7e --- /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:3b88bb9fc3942cecb9618f95b77285ef802804144432f226e2834fff5c9c35d1 +size 1168 diff --git a/assets/voxygen/voxel/npc/gecko/male/head.vox b/assets/voxygen/voxel/npc/gecko/male/head.vox index 95b106dbed..c519dbc332 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:408c5c39f9bfc11b2e09aad99ef426105f238497db8dc4472c16ed8a931b9245 +size 1448 diff --git a/assets/voxygen/voxel/npc/gecko/male/tail.vox b/assets/voxygen/voxel/npc/gecko/male/tail.vox index bb8a7563f9..9d7bd7bf9b 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:31ed3ef9b5ee8d940aec71ff228a3d59282e682080cd564741bf6f839f35e9b1 +size 1244 diff --git a/assets/voxygen/voxel/npc/grolgar/male/foot_bl.vox b/assets/voxygen/voxel/npc/grolgar/male/foot_bl.vox index efb32c8183..8cd108d0ef 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/foot_bl.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/foot_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8fad3dc54937596d94d6cee4278e20f51dcc6b87b796c3079f9a599fa97aa2d -size 1316 +oid sha256:c47ae981b9ca75752b3abf681710dd73e129382848e2bce98a2f949132bdbc35 +size 1496 diff --git a/assets/voxygen/voxel/npc/grolgar/male/foot_br.vox b/assets/voxygen/voxel/npc/grolgar/male/foot_br.vox index 4b143b4a6f..c0688db076 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/foot_br.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/foot_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c2da9531c4ac3f73c7d43ec179f90fed880ac6483ffa7b2116998605bf976a4 -size 1316 +oid sha256:9ac91eecb5da372509b85e3a088dbd9b7279ec496c0249fa08bb8b9f41c62e7f +size 1496 diff --git a/assets/voxygen/voxel/npc/grolgar/male/foot_fl.vox b/assets/voxygen/voxel/npc/grolgar/male/foot_fl.vox index e956683bdf..cd907abb47 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/foot_fl.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/foot_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b59077d362cd7a213fadfb58ffcf6208f421a53da53113e703064dc94fed15c3 -size 1564 +oid sha256:caf9d5bc5a4ea243c404b0ee6a586b8f4db803b9986eea8aaa148746b923482e +size 1912 diff --git a/assets/voxygen/voxel/npc/grolgar/male/foot_fr.vox b/assets/voxygen/voxel/npc/grolgar/male/foot_fr.vox index a48a461ed6..23c93f0a9d 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/foot_fr.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/foot_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6c85c057c0ff0d303942d6c591c14fdf5b3062ffb9db05224b2b028b88c9d21 -size 1564 +oid sha256:9d989f261ac4eccd3d2010b8bb1938151c0d9e1893c10c35b3cb608ac365078e +size 1912 diff --git a/assets/voxygen/voxel/npc/grolgar/male/head_upper.vox b/assets/voxygen/voxel/npc/grolgar/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/grolgar/male/head_upper.vox rename to assets/voxygen/voxel/npc/grolgar/male/head.vox diff --git a/assets/voxygen/voxel/npc/grolgar/male/leg_bl.vox b/assets/voxygen/voxel/npc/grolgar/male/leg_bl.vox index f7d7636d4e..57f9f93b73 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/leg_bl.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/leg_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e94f1f78999e0ebffd0a2df8767353e0a4a3e4894ff130147313b9e0b63b9d67 -size 1720 +oid sha256:8d6399c3a8fa21357d18f540d8fea0b30d720efa1506afed7da7af51438e15d2 +size 1588 diff --git a/assets/voxygen/voxel/npc/grolgar/male/leg_br.vox b/assets/voxygen/voxel/npc/grolgar/male/leg_br.vox index acabb360cf..ccf2cdf362 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/leg_br.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/leg_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb1882d71d271aaa7d79a0901df40ac6bf2219902d5b21c8530c20cf5979a3ad -size 1720 +oid sha256:aa715992284eb9b9d9a49f9a453763ea6ad5e479f5d037b16f451f0d7df01177 +size 1588 diff --git a/assets/voxygen/voxel/npc/grolgar/male/leg_fl.vox b/assets/voxygen/voxel/npc/grolgar/male/leg_fl.vox index f7d2b86bd0..a43052bb31 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/leg_fl.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/leg_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d27cb3b64d87584a6187dd6d9659286b21929601f355d6d6a429beceaf90dc1 -size 2048 +oid sha256:0afaa656dc9db27231d7aa323c43cf80f097de1ba82d01c1298a20cce0429e99 +size 1872 diff --git a/assets/voxygen/voxel/npc/grolgar/male/leg_fr.vox b/assets/voxygen/voxel/npc/grolgar/male/leg_fr.vox index f785e54fb5..a4df310863 100644 --- a/assets/voxygen/voxel/npc/grolgar/male/leg_fr.vox +++ b/assets/voxygen/voxel/npc/grolgar/male/leg_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11b15296f442601a33790d750a8401d578b191666a654f055ee67aed1224706f -size 2048 +oid sha256:fb3d8a82145cea5908af15b3c95fef34941a8daa4c7c1090bc4102231e84a129 +size 1872 diff --git a/assets/voxygen/voxel/npc/grolgar/male/head_lower.vox b/assets/voxygen/voxel/npc/grolgar/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/grolgar/male/head_lower.vox rename to assets/voxygen/voxel/npc/grolgar/male/neck.vox diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/foot_bl.vox b/assets/voxygen/voxel/npc/hirdrasil/male/foot_bl.vox new file mode 100644 index 0000000000..8f3f184635 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b1a32f3449c5ccf0c6774ab7007406d1b151ee049b4358bef4a108c22071e2 +size 1304 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/foot_br.vox b/assets/voxygen/voxel/npc/hirdrasil/male/foot_br.vox new file mode 100644 index 0000000000..8f3f184635 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b1a32f3449c5ccf0c6774ab7007406d1b151ee049b4358bef4a108c22071e2 +size 1304 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/foot_fl.vox b/assets/voxygen/voxel/npc/hirdrasil/male/foot_fl.vox new file mode 100644 index 0000000000..2c4aa49d4f --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8f9cf762310517e7b0198bb4a103b38b535439840e8cddaf594958e2fca3167 +size 1428 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/foot_fr.vox b/assets/voxygen/voxel/npc/hirdrasil/male/foot_fr.vox new file mode 100644 index 0000000000..f598be9ca5 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:845e071e1821d3bb8963d9adb2b75f4208f6bace4722c1cbb7f054285cdbe9da +size 1428 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/head.vox b/assets/voxygen/voxel/npc/hirdrasil/male/head.vox new file mode 100644 index 0000000000..73e735ec91 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d73c268da0598b72676a8cd669a1b981d53c82d24c4c54fa038314526bbce18a +size 3780 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/jaw.vox b/assets/voxygen/voxel/npc/hirdrasil/male/jaw.vox new file mode 100644 index 0000000000..dae07a23b5 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfa736cd8c259ad892b57982fd4c44d50c377b82c4a30777e1bcda2fd9584668 +size 1216 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/leg_bl.vox b/assets/voxygen/voxel/npc/hirdrasil/male/leg_bl.vox new file mode 100644 index 0000000000..6b6940a91c --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/leg_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34f887f932dcdf72d3634683a707d28d63509dd5ce9be38bef8a1f701c57fe09 +size 1580 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/leg_br.vox b/assets/voxygen/voxel/npc/hirdrasil/male/leg_br.vox new file mode 100644 index 0000000000..405f1e3134 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/leg_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:776264da58fe9c9c75d818d68ae392e34dbf7ce6ca39457891644860ba8a51a8 +size 1580 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/leg_fl.vox b/assets/voxygen/voxel/npc/hirdrasil/male/leg_fl.vox new file mode 100644 index 0000000000..b99ebfcf7b --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/leg_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24c6e497990ef4c2e235e521b5b310b309617184bb6935ff936c289fb2b6e35c +size 1564 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/leg_fr.vox b/assets/voxygen/voxel/npc/hirdrasil/male/leg_fr.vox new file mode 100644 index 0000000000..6dda5d6ea7 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/leg_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6e37a1120d0332c1a8677df3efce66e2171f919a2a26f30fac8581fa84f547e +size 1548 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/neck.vox b/assets/voxygen/voxel/npc/hirdrasil/male/neck.vox new file mode 100644 index 0000000000..b113108049 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be1e7ee62a90e0afa0c74040faf999f3b8e0c894f28d99b51a21d8db6308192 +size 2800 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/tail.vox b/assets/voxygen/voxel/npc/hirdrasil/male/tail.vox new file mode 100644 index 0000000000..26b2b8898e --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:582746dd1a096d883353562483295f08c0c8d706621e1be73a3eb858e2301d08 +size 1256 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/torso_back.vox b/assets/voxygen/voxel/npc/hirdrasil/male/torso_back.vox new file mode 100644 index 0000000000..1e6e9d6ca9 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f48a952134364d846eda690a0e898e5b002aeced62e7923dcce2d28f17b7999 +size 3256 diff --git a/assets/voxygen/voxel/npc/hirdrasil/male/torso_front.vox b/assets/voxygen/voxel/npc/hirdrasil/male/torso_front.vox new file mode 100644 index 0000000000..993aa70cc0 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa52e4b08a06147895680476e6415b61bf7593576ddccff88cdac51aa4d5e15f +size 3656 diff --git a/assets/voxygen/voxel/npc/hirdrasil/torso_front.vox b/assets/voxygen/voxel/npc/hirdrasil/torso_front.vox new file mode 100644 index 0000000000..16e0e58d91 --- /dev/null +++ b/assets/voxygen/voxel/npc/hirdrasil/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d15e4ffabe5854e0508d61268290c9631a72689b32bdba7ee5472ee53b4508ba +size 3520 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_bl.vox b/assets/voxygen/voxel/npc/lion/male/foot_bl.vox index caa6986012..a5befd56c3 100644 --- a/assets/voxygen/voxel/npc/lion/male/foot_bl.vox +++ b/assets/voxygen/voxel/npc/lion/male/foot_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f52555a03158b801e0b748398de1afaae702d1f50e8680459410c8e87ad451a4 -size 1344 +oid sha256:957d4b22454283b4e99c2280119776556680b6a79dc408d432c003b6226286d9 +size 1476 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_br.vox b/assets/voxygen/voxel/npc/lion/male/foot_br.vox index 863b0ec8b6..6710c2ade2 100644 --- a/assets/voxygen/voxel/npc/lion/male/foot_br.vox +++ b/assets/voxygen/voxel/npc/lion/male/foot_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f47069ee06dc088f3386a05436373afb733ac8a2bb8db68e1503e4d638043070 -size 1344 +oid sha256:fe318c93a4744e220c37744ccadb5118f38fd52a6dfd7eec574ae4f0b20f2afd +size 1476 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_fl.vox b/assets/voxygen/voxel/npc/lion/male/foot_fl.vox index e5fdd31ddb..efc590cfac 100644 --- a/assets/voxygen/voxel/npc/lion/male/foot_fl.vox +++ b/assets/voxygen/voxel/npc/lion/male/foot_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1232a6c70aa203f517ff5c1e84272f99ec8a691d1a01fac4963cf5290396e46 -size 1308 +oid sha256:64105ef321498314896ee0a0a0c2c36ee33ee3f5078f642f626dc02dbd8023a1 +size 1428 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_fr.vox b/assets/voxygen/voxel/npc/lion/male/foot_fr.vox index b5d4ecd98f..912b8b7731 100644 --- a/assets/voxygen/voxel/npc/lion/male/foot_fr.vox +++ b/assets/voxygen/voxel/npc/lion/male/foot_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9051c63f61e9e10a3eaa6625974b02db0741237c931d2fb62dedc3a4ddd2990d -size 1308 +oid sha256:10af50be30c3f4576390b2fa02d6b76f05b20f3019fc2165ba2926ebb1251d19 +size 1428 diff --git a/assets/voxygen/voxel/npc/lion/male/head_upper.vox b/assets/voxygen/voxel/npc/lion/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/lion/male/head_upper.vox rename to assets/voxygen/voxel/npc/lion/male/head.vox diff --git a/assets/voxygen/voxel/npc/lion/male/leg_bl.vox b/assets/voxygen/voxel/npc/lion/male/leg_bl.vox index aa5bf3eede..3f2ffc03db 100644 --- a/assets/voxygen/voxel/npc/lion/male/leg_bl.vox +++ b/assets/voxygen/voxel/npc/lion/male/leg_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9bf6beb766138ad541acebef1a4c0b6a3ba3c5eb80a1ef08f0cbdf608b57b25 -size 1588 +oid sha256:dea3c84abed1ea8aab9c9b396b3be97bdf103aa74633302eeb671980b6d75728 +size 1544 diff --git a/assets/voxygen/voxel/npc/lion/male/leg_br.vox b/assets/voxygen/voxel/npc/lion/male/leg_br.vox index 1dac10f122..346b8b4f99 100644 --- a/assets/voxygen/voxel/npc/lion/male/leg_br.vox +++ b/assets/voxygen/voxel/npc/lion/male/leg_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9431feda9b80d726934e5fb0db1e9ff3f17fa146af81b13bd2b1f50ddc5e965 -size 1588 +oid sha256:6f43a264287889a95f7c8346b876c5b28e42b7eaa81c12c7e21df4c5a19237c3 +size 1544 diff --git a/assets/voxygen/voxel/npc/lion/male/leg_fl.vox b/assets/voxygen/voxel/npc/lion/male/leg_fl.vox index aba893c97e..4d43fa8b0f 100644 --- a/assets/voxygen/voxel/npc/lion/male/leg_fl.vox +++ b/assets/voxygen/voxel/npc/lion/male/leg_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e85ef52e3cced1d3a191c96f3525728f59cb22c5199a54d8c40e7b466727fb9e -size 1528 +oid sha256:0795d8d3e25c5380dcbc03d13cc6a15dbc11cc2063fd6f6c60185e4a469f68c4 +size 1440 diff --git a/assets/voxygen/voxel/npc/lion/male/leg_fr.vox b/assets/voxygen/voxel/npc/lion/male/leg_fr.vox index 7312111cb1..452a885ee4 100644 --- a/assets/voxygen/voxel/npc/lion/male/leg_fr.vox +++ b/assets/voxygen/voxel/npc/lion/male/leg_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f21165abe9e4689eb196eacbbabaea6a55168b00c3830a3bb1c44612095ba54 -size 1528 +oid sha256:c15c6afae38bb44fb5317672ebd6e85534c6b7d14bcf7dbbfe921ffb2a14f8cb +size 1440 diff --git a/assets/voxygen/voxel/npc/lion/male/head_lower.vox b/assets/voxygen/voxel/npc/lion/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/lion/male/head_lower.vox rename to assets/voxygen/voxel/npc/lion/male/neck.vox diff --git a/assets/voxygen/voxel/npc/mouflon/male/head_upper.vox b/assets/voxygen/voxel/npc/mouflon/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/mouflon/male/head_upper.vox rename to assets/voxygen/voxel/npc/mouflon/male/head.vox diff --git a/assets/voxygen/voxel/npc/mouflon/male/head_lower.vox b/assets/voxygen/voxel/npc/mouflon/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/mouflon/male/head_lower.vox rename to assets/voxygen/voxel/npc/mouflon/male/neck.vox diff --git a/assets/voxygen/voxel/npc/odonto/male/chest_back.vox b/assets/voxygen/voxel/npc/odonto/male/chest_back.vox new file mode 100644 index 0000000000..86a229eee4 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/chest_back.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/odonto/male/chest_front.vox b/assets/voxygen/voxel/npc/odonto/male/chest_front.vox new file mode 100644 index 0000000000..f284891dbd --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/chest_front.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/odonto/male/foot_l.vox b/assets/voxygen/voxel/npc/odonto/male/foot_l.vox new file mode 100644 index 0000000000..42189b7f0b --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/foot_l.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/odonto/male/foot_r.vox b/assets/voxygen/voxel/npc/odonto/male/foot_r.vox new file mode 100644 index 0000000000..e9713bb1a9 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c487e338a72e162090b7e6a0b61f2d894d2b704888040c4560307694ef0e7ebd +size 2952 diff --git a/assets/voxygen/voxel/npc/odonto/male/hand_l.vox b/assets/voxygen/voxel/npc/odonto/male/hand_l.vox new file mode 100644 index 0000000000..4f7f97380c --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/hand_l.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/odonto/male/hand_r.vox b/assets/voxygen/voxel/npc/odonto/male/hand_r.vox new file mode 100644 index 0000000000..47a9744a10 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/hand_r.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/odonto/male/head.vox b/assets/voxygen/voxel/npc/odonto/male/head.vox new file mode 100644 index 0000000000..e0159b79c2 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/head.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/odonto/male/jaw.vox b/assets/voxygen/voxel/npc/odonto/male/jaw.vox new file mode 100644 index 0000000000..40925e41d1 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/jaw.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/odonto/male/leg_l.vox b/assets/voxygen/voxel/npc/odonto/male/leg_l.vox new file mode 100644 index 0000000000..3e2578dbc3 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/leg_l.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/odonto/male/leg_r.vox b/assets/voxygen/voxel/npc/odonto/male/leg_r.vox new file mode 100644 index 0000000000..f988d02205 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c22f115019822bca948555959ce6066450fce7716ca61b96e1652e6730970fe +size 2476 diff --git a/assets/voxygen/voxel/npc/odonto/male/neck.vox b/assets/voxygen/voxel/npc/odonto/male/neck.vox new file mode 100644 index 0000000000..8d6aa069c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac66309a7940e44e4dd9c47cf982fd2b10ac0dcfad2d20a8602d2ff3b6d3cbfe +size 5624 diff --git a/assets/voxygen/voxel/npc/odonto/male/tail_back.vox b/assets/voxygen/voxel/npc/odonto/male/tail_back.vox new file mode 100644 index 0000000000..876627ff0d --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/tail_back.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/odonto/male/tail_front.vox b/assets/voxygen/voxel/npc/odonto/male/tail_front.vox new file mode 100644 index 0000000000..c4fc4fa756 --- /dev/null +++ b/assets/voxygen/voxel/npc/odonto/male/tail_front.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/porcupine/male/chest.vox b/assets/voxygen/voxel/npc/porcupine/male/chest.vox new file mode 100644 index 0000000000..e867ebb16f --- /dev/null +++ b/assets/voxygen/voxel/npc/porcupine/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1103c3ce46d02e2ec1bd1c688389574b7307c330e9eb21f510dde598edf263d +size 4572 diff --git a/assets/voxygen/voxel/npc/porcupine/male/foot_bl.vox b/assets/voxygen/voxel/npc/porcupine/male/foot_bl.vox new file mode 100644 index 0000000000..3267ff5831 --- /dev/null +++ b/assets/voxygen/voxel/npc/porcupine/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a44ef9ce3bf3d4569165abf5d4e99be8329be52cef7b199be7313cc851a3d9c2 +size 1384 diff --git a/assets/voxygen/voxel/npc/porcupine/male/foot_br.vox b/assets/voxygen/voxel/npc/porcupine/male/foot_br.vox new file mode 100644 index 0000000000..534e162332 --- /dev/null +++ b/assets/voxygen/voxel/npc/porcupine/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb61e2f3582b9942b95477445d1f6983e4715e9ed46fbd9fe95fcf145769fd12 +size 1384 diff --git a/assets/voxygen/voxel/npc/porcupine/male/foot_fl.vox b/assets/voxygen/voxel/npc/porcupine/male/foot_fl.vox new file mode 100644 index 0000000000..7d24707fc7 --- /dev/null +++ b/assets/voxygen/voxel/npc/porcupine/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22c25095db066285c8b55a0038f1e8c280df22198b6ad5577791518af4d7374a +size 1308 diff --git a/assets/voxygen/voxel/npc/porcupine/male/foot_fr.vox b/assets/voxygen/voxel/npc/porcupine/male/foot_fr.vox new file mode 100644 index 0000000000..4cff4e9128 --- /dev/null +++ b/assets/voxygen/voxel/npc/porcupine/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5af54f4cfb97b38b1f9223552d1ef91a06cd07022a4427b905be7452d52cf2f0 +size 1308 diff --git a/assets/voxygen/voxel/npc/porcupine/male/head.vox b/assets/voxygen/voxel/npc/porcupine/male/head.vox new file mode 100644 index 0000000000..7bd04c960d --- /dev/null +++ b/assets/voxygen/voxel/npc/porcupine/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75e3f034853353a85b28c1e7a297c86ce0cb3eeb0be928db3b7e607fa4f686b4 +size 1552 diff --git a/assets/voxygen/voxel/npc/rat/male/chest.vox b/assets/voxygen/voxel/npc/rat/male/chest.vox index b52ca54ea4..d8edee27a0 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:084cc64dd136be14aadda98272bb173c92aebcdb40a3f4585fffe4d04930b292 +size 2496 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..d5af76f775 --- /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:ceb18e0a3e013afe4075785a839ed914c4755e81a16bed46c01d827868ab1252 +size 1252 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..7a7ccceff5 --- /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:551f46a05076f7b3a6275022214fe065d77d237a6a18369522b466d1a4fa5640 +size 1252 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..14424ecf37 --- /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:f9e15fb7b2dc36448630f58dd4ac9b28915333c00ead3e725c96cf74c0d4ea92 +size 1212 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..53cc39f5c8 --- /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:3737a737eb014cb6827b440e67e4a52371c625a5e106614a200f22f0c8f7fe88 +size 1212 diff --git a/assets/voxygen/voxel/npc/rat/male/head.vox b/assets/voxygen/voxel/npc/rat/male/head.vox index 6e680d1028..e7ad166cd9 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:f119fe7e2ed296409067435fa265c1fa4ed72db4e19e3a071066ec05602ee92a +size 1764 diff --git a/assets/voxygen/voxel/npc/rat/male/tail.vox b/assets/voxygen/voxel/npc/rat/male/tail.vox index 43015d4188..19146aef3a 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:460873a67187d6e0a803adddf4addddf8639c80f9e3421ba986fbce2b2023a01 +size 1144 diff --git a/assets/voxygen/voxel/npc/saber/male/head_upper.vox b/assets/voxygen/voxel/npc/saber/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/saber/male/head_upper.vox rename to assets/voxygen/voxel/npc/saber/male/head.vox diff --git a/assets/voxygen/voxel/npc/saber/male/head_lower.vox b/assets/voxygen/voxel/npc/saber/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/saber/male/head_lower.vox rename to assets/voxygen/voxel/npc/saber/male/neck.vox diff --git a/assets/voxygen/voxel/npc/squirrel/male/chest.vox b/assets/voxygen/voxel/npc/squirrel/male/chest.vox index d3ef9e4e8d..4b65651486 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:b04457ba1cbf8a34261bf1f747ec60281342452842f51926888ed35569ee1625 +size 1592 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..e182b859ec --- /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:d7d463014e1c784e08624a38258cb2774fbad71eb614a68bc98b03625b06fb49 +size 1228 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..30916052e7 --- /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:5f0a23389787d24a9905624a8eafe305dd62e81812afa9111ad2ce4f1ad7aa13 +size 1228 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..525b66ba8c --- /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:c7c52ef287399626b4d05e8f87e852d6676fafb1a7b672f6b2dfcadc015f7a76 +size 1164 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..9d7daad053 --- /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:5790e56ac318979f9df0e85f35fe41c4b2afb9b20a7d1c2414fe99ebd57c1be9 +size 1164 diff --git a/assets/voxygen/voxel/npc/squirrel/male/head.vox b/assets/voxygen/voxel/npc/squirrel/male/head.vox index c0f7b856db..e0664c5963 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:e26df69715d627ff5daa924149c231fd534370ece0980ed5be8a38a896ff93af +size 1504 diff --git a/assets/voxygen/voxel/npc/squirrel/male/tail.vox b/assets/voxygen/voxel/npc/squirrel/male/tail.vox index 648f09505f..a6c8f06aaf 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:034b2a8c751c6def961922e1f55e2c00d2a8483e27e2245e3d1f387ac2515599 +size 1568 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/chest.vox b/assets/voxygen/voxel/npc/stonegolem/male/chest.vox new file mode 100644 index 0000000000..5109dd2fcd --- /dev/null +++ b/assets/voxygen/voxel/npc/stonegolem/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee1cce31c8a0d3298724cee1c1a504f1f92ba2313937aef3c102b45e0d9dcb0f +size 14332 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/chest_lower.vox b/assets/voxygen/voxel/npc/stonegolem/male/chest_lower.vox new file mode 100644 index 0000000000..2e9bfbdb62 --- /dev/null +++ b/assets/voxygen/voxel/npc/stonegolem/male/chest_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ec7224ce0376f10601fab51b1239a12a7cea53d6663f0fb641e71cba734994b +size 2612 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/chest_upper.vox b/assets/voxygen/voxel/npc/stonegolem/male/chest_upper.vox new file mode 100644 index 0000000000..52033d5b97 --- /dev/null +++ b/assets/voxygen/voxel/npc/stonegolem/male/chest_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf24e59d46be096a82934628d9e44784247d67a37bd07783b5a8908c26feb233 +size 12816 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/foot_l.vox b/assets/voxygen/voxel/npc/stonegolem/male/foot_l.vox index 700a31c805..1085b4dfb8 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/foot_l.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/foot_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10db272e5f302fd26f51139dfdacd783c150eaccf8705370bd33f0b21f14008d -size 2404 +oid sha256:148999ab67d4604610bf70175744e649d14c5602e55411448ebc2c5f5bb11f1b +size 3200 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/foot_r.vox b/assets/voxygen/voxel/npc/stonegolem/male/foot_r.vox index 5041daff8b..aea68648f7 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/foot_r.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/foot_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00e20e90eb259a284ad6bf91573028d6f8deab2dc086d38bef930117a3dc5109 -size 2404 +oid sha256:c30cd8b50d4b8d62e6e22401f568f8c3e77543adaa49b57ba2c11e8345c35dda +size 3200 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/hand_l.vox b/assets/voxygen/voxel/npc/stonegolem/male/hand_l.vox index 7cb66e7158..e73c941172 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/hand_l.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/hand_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c11a7d552ebe65c3a5d4b06d3f9cee9cbed7fdad12d82773a522878eda4df2b7 -size 2452 +oid sha256:2e409bafdd5acb62b12473363b510fdd16b6ca5ff4c23d665fb5ab5559d674d1 +size 18496 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/hand_r.vox b/assets/voxygen/voxel/npc/stonegolem/male/hand_r.vox index 10221619db..537178a75a 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/hand_r.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/hand_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dba068b223ccd71b4eb59b07febae18a20b86e134c15e952ab85018ee3ad70d3 -size 2452 +oid sha256:aa419954b20fd8258f6dee16abd1750ea8dd1fe9866c0043f99fc3d2e89619a1 +size 18496 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/head.vox b/assets/voxygen/voxel/npc/stonegolem/male/head.vox index 5da9120aae..8fc25a7217 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/head.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18a0701635787abd3772651a64a3a9d722e6697a3fbf5f448f5d115d1adbe3aa -size 4360 +oid sha256:bf455e79056b7ac04758c6a7ed396d227a0303dd623b38c06610cd8e1ab165f7 +size 2588 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/leg_l.vox b/assets/voxygen/voxel/npc/stonegolem/male/leg_l.vox index 446a1c62f6..8702ceb08e 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/leg_l.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/leg_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ff971f0aedbccabcbac6007dd9314928d73afea519733bf00adecfabba309ed -size 1680 +oid sha256:26b8a2656fb58e75468ffe673c60ce78e2c10b31190687cfcd065cc064d6a7fa +size 1788 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/leg_r.vox b/assets/voxygen/voxel/npc/stonegolem/male/leg_r.vox index 4ef5c9f6fd..8bb2d4465b 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd34a48b5d067a6d3e069ee12a75e38ab79db1a3030e2e8e3fff3732f87bbd46 -size 1680 +oid sha256:9517cc33bc4f2d9982bbb9061404ed9076bc77e6beab0b123b02f13ab944290c +size 1788 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/shoulder_l.vox b/assets/voxygen/voxel/npc/stonegolem/male/shoulder_l.vox index 0cf2050377..4632fd5ea4 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/shoulder_l.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/shoulder_l.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3e04c17d1baae98107f7bb92d9b2c1ffb384325ccabf9393571545128aa4508 -size 2344 +oid sha256:af76b0f8937ee48ff52a76ec19a27b2fdb88e5cc0785737fd1085cd381149084 +size 9736 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/shoulder_r.vox b/assets/voxygen/voxel/npc/stonegolem/male/shoulder_r.vox index 2b3ce41ea8..06f271e2dd 100644 --- a/assets/voxygen/voxel/npc/stonegolem/male/shoulder_r.vox +++ b/assets/voxygen/voxel/npc/stonegolem/male/shoulder_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d5b9f18d0e7c58f942998e6989ec933284232b90fd9a6c1ad888f1cad95c5d7 -size 2344 +oid sha256:2b3de5e6525eef09f777bf0aa6f3e2b81004c545e187b4da06eee8087684a8f7 +size 9736 diff --git a/assets/voxygen/voxel/npc/stonegolem/male/torso_upper.vox b/assets/voxygen/voxel/npc/stonegolem/male/torso_upper.vox deleted file mode 100644 index b7afe03540..0000000000 --- a/assets/voxygen/voxel/npc/stonegolem/male/torso_upper.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd21aec7c477abe485d2c7e7d598747f6222af6ead01270c239623e7c6d2a4de -size 4832 diff --git a/assets/voxygen/voxel/npc/tarasque/male/head_upper.vox b/assets/voxygen/voxel/npc/tarasque/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/tarasque/male/head_upper.vox rename to assets/voxygen/voxel/npc/tarasque/male/head.vox diff --git a/assets/voxygen/voxel/npc/tarasque/male/head_lower.vox b/assets/voxygen/voxel/npc/tarasque/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/tarasque/male/head_lower.vox rename to assets/voxygen/voxel/npc/tarasque/male/neck.vox diff --git a/assets/voxygen/voxel/npc/tiger/male/foot_bl.vox b/assets/voxygen/voxel/npc/tiger/male/foot_bl.vox index 819c7d7efb..4fbeb4ea4a 100644 --- a/assets/voxygen/voxel/npc/tiger/male/foot_bl.vox +++ b/assets/voxygen/voxel/npc/tiger/male/foot_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e19ddbda8aa47c07f5cfb65d2cb4050cb8d5f3694ab1137c76f2e1266aa8515 -size 1328 +oid sha256:5fc36f1582e07d01ab581cecd7f4d2f72313f9b49e3a7f772ac93f1e2a3dae8e +size 1512 diff --git a/assets/voxygen/voxel/npc/tiger/male/foot_br.vox b/assets/voxygen/voxel/npc/tiger/male/foot_br.vox index 4d8f111ca5..e1f36b6ce6 100644 --- a/assets/voxygen/voxel/npc/tiger/male/foot_br.vox +++ b/assets/voxygen/voxel/npc/tiger/male/foot_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2774120fa18ca3e0213560733855b914d7888997fa3f3107d3bd39854acc16a -size 1328 +oid sha256:226d129ca8a3ac22fc952b8478c0255627e4d8e67b90084e97abdce09291e488 +size 1512 diff --git a/assets/voxygen/voxel/npc/tiger/male/foot_fl.vox b/assets/voxygen/voxel/npc/tiger/male/foot_fl.vox index e4530bdae1..1f5fd1500d 100644 --- a/assets/voxygen/voxel/npc/tiger/male/foot_fl.vox +++ b/assets/voxygen/voxel/npc/tiger/male/foot_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd8df382684c91bc0708ef70f324eb8f7c83f601c182addde38840840c23f2ed -size 1372 +oid sha256:a277796105f0ce2dae26ce7ae5f620609316c3ecdb66ae1b63200453b1752099 +size 1464 diff --git a/assets/voxygen/voxel/npc/tiger/male/foot_fr.vox b/assets/voxygen/voxel/npc/tiger/male/foot_fr.vox index d546ee9768..e78de976cb 100644 --- a/assets/voxygen/voxel/npc/tiger/male/foot_fr.vox +++ b/assets/voxygen/voxel/npc/tiger/male/foot_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c16ae266a9cb0022de6d7571e3e4db5793348934df700380bbe07f25edcba32 -size 1372 +oid sha256:085458fa1a107d454855054bd2c18796522adc276f624e1a8ce794196e5030e2 +size 1464 diff --git a/assets/voxygen/voxel/npc/tiger/male/head.vox b/assets/voxygen/voxel/npc/tiger/male/head.vox new file mode 100644 index 0000000000..30e7895baa --- /dev/null +++ b/assets/voxygen/voxel/npc/tiger/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af0d5f9945faeb4f8fe71c950f55f530a493616359ed888c0c77ab3627ccdc64 +size 3220 diff --git a/assets/voxygen/voxel/npc/tiger/male/head_lower.vox b/assets/voxygen/voxel/npc/tiger/male/head_lower.vox deleted file mode 100644 index 627248724d..0000000000 --- a/assets/voxygen/voxel/npc/tiger/male/head_lower.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3f2c3ef17593009168b4f7ee6ebd5f6119a58f5a815a927383edab5d6ff4579 -size 2124 diff --git a/assets/voxygen/voxel/npc/tiger/male/head_upper.vox b/assets/voxygen/voxel/npc/tiger/male/head_upper.vox deleted file mode 100644 index b441012667..0000000000 --- a/assets/voxygen/voxel/npc/tiger/male/head_upper.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9999b37d5a531d224f292d929d7cc6a3efcd4d11d3f1851206d3bd0a3ce4bb76 -size 3220 diff --git a/assets/voxygen/voxel/npc/tiger/male/jaw.vox b/assets/voxygen/voxel/npc/tiger/male/jaw.vox index 0714f7c330..98b0567a11 100644 --- a/assets/voxygen/voxel/npc/tiger/male/jaw.vox +++ b/assets/voxygen/voxel/npc/tiger/male/jaw.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11f7aeda1a4136225b84a1caba3f7de1fcf70d30803cf3cf0eb5c28fc2f127c2 +oid sha256:b59f32209dfe283cc8a685b8b10dc8a8e2e1c9a312a42be060592d1b2b5b74f2 size 1240 diff --git a/assets/voxygen/voxel/npc/tiger/male/leg_bl.vox b/assets/voxygen/voxel/npc/tiger/male/leg_bl.vox index 13e9c41222..2ac0c5494f 100644 --- a/assets/voxygen/voxel/npc/tiger/male/leg_bl.vox +++ b/assets/voxygen/voxel/npc/tiger/male/leg_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f4fccbc3635759e620f27492eb18ff75e6e9b342d7a06ab8b3a5a5fd9cc3106 -size 1640 +oid sha256:afee004920aa78cb665e10710a92cd3133741ea648687bbf2c0f69dad17c664b +size 1512 diff --git a/assets/voxygen/voxel/npc/tiger/male/leg_br.vox b/assets/voxygen/voxel/npc/tiger/male/leg_br.vox index 8ff8305f6d..583e717d6f 100644 --- a/assets/voxygen/voxel/npc/tiger/male/leg_br.vox +++ b/assets/voxygen/voxel/npc/tiger/male/leg_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e0add5116505b375ee75a705028f800fb72e24cf1056dd40a8506954da355d3 -size 1640 +oid sha256:c445d64098d8b966db98138de3730d798834285425fd3f9cc2eb8656416b5c1b +size 1512 diff --git a/assets/voxygen/voxel/npc/tiger/male/leg_fl.vox b/assets/voxygen/voxel/npc/tiger/male/leg_fl.vox index a02904c910..b7f35b0181 100644 --- a/assets/voxygen/voxel/npc/tiger/male/leg_fl.vox +++ b/assets/voxygen/voxel/npc/tiger/male/leg_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f731c2714243a9b17c026986b22d7f913e56c5c45c32da882eee27aebc4aa929 -size 1636 +oid sha256:56987d55e8988bd14133ba78a1f7686a0e40f921c995900fa49d27f526ad9d42 +size 1580 diff --git a/assets/voxygen/voxel/npc/tiger/male/leg_fr.vox b/assets/voxygen/voxel/npc/tiger/male/leg_fr.vox index e4b0749159..74eee4b336 100644 --- a/assets/voxygen/voxel/npc/tiger/male/leg_fr.vox +++ b/assets/voxygen/voxel/npc/tiger/male/leg_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:becfa3d7edf43c34378fde2ebc9254fd99635d89ee58babf1216dce76721b8b3 -size 1636 +oid sha256:c1783a001f84ec45f16f08a525aaf42b6b88e36743fd3be06d1e8802047850c7 +size 1580 diff --git a/assets/voxygen/voxel/npc/tiger/male/neck.vox b/assets/voxygen/voxel/npc/tiger/male/neck.vox new file mode 100644 index 0000000000..56c7dbcc5d --- /dev/null +++ b/assets/voxygen/voxel/npc/tiger/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8f4594b0c96169e6cac8d9631f726e4e69cec7d3f5f33f48b328e53444b8c90 +size 2424 diff --git a/assets/voxygen/voxel/npc/tiger/male/torso_back.vox b/assets/voxygen/voxel/npc/tiger/male/torso_back.vox index 9bf1866628..3b9c285596 100644 --- a/assets/voxygen/voxel/npc/tiger/male/torso_back.vox +++ b/assets/voxygen/voxel/npc/tiger/male/torso_back.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3d36feec8d21c89f48deb58629b6518c3163cf40d7ba19a7042f36e33331133 -size 4660 +oid sha256:8666513c4f911a8da957c214b6e3e0bf84149a5f262afc41471b4f84e4e13f9c +size 5236 diff --git a/assets/voxygen/voxel/npc/tiger/male/torso_front.vox b/assets/voxygen/voxel/npc/tiger/male/torso_front.vox index 9c278ce34a..52711f8197 100644 --- a/assets/voxygen/voxel/npc/tiger/male/torso_front.vox +++ b/assets/voxygen/voxel/npc/tiger/male/torso_front.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3cd842de8a4b9831d2c1b9e12fbc7ad49ed8e6ff02fca23492b189d5f65c0354 +oid sha256:9f2348de485f1e1ab2b2bf40e10d517a54400a1ef73b2ae499f6db5ddd84e9a4 size 6196 diff --git a/assets/voxygen/voxel/npc/turtle/male/chest.vox b/assets/voxygen/voxel/npc/turtle/male/chest.vox index f69772001d..ad99eafef9 100644 --- a/assets/voxygen/voxel/npc/turtle/male/chest.vox +++ b/assets/voxygen/voxel/npc/turtle/male/chest.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 -size 3736 +oid sha256:5aa6f436cc4ffa41a2e4f88d5ec3ccaef0169d80d4c2879d49302dc70f720984 +size 4720 diff --git a/assets/voxygen/voxel/npc/turtle/male/feet_b.vox b/assets/voxygen/voxel/npc/turtle/male/feet_b.vox deleted file mode 100644 index aabf0927e7..0000000000 --- a/assets/voxygen/voxel/npc/turtle/male/feet_b.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 -size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/feet_f.vox b/assets/voxygen/voxel/npc/turtle/male/feet_f.vox deleted file mode 100644 index aabf0927e7..0000000000 --- a/assets/voxygen/voxel/npc/turtle/male/feet_f.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 -size 1128 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..696ab221ab --- /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:1aabc60fe30c1f38e89ff8cfe770444baf9a5e2bd4060b56ba46ac0835460ef6 +size 1180 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..902863660f --- /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:7ad6e9be4ddeb03f103355b46eac6ff5fd01abac012183a099b283b5cedfe659 +size 1180 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..0ef897e45b --- /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:60cde6297e3bcec71278065f8e23dbf5cb6d318d9fc1d3d0c2f261c5d3d09e2b +size 1180 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..d0171602ec --- /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:b3350eba7a511b981d049449754c43a1133911f7724d8e96aef078b833f72f92 +size 1180 diff --git a/assets/voxygen/voxel/npc/turtle/male/head.vox b/assets/voxygen/voxel/npc/turtle/male/head.vox index 9a5982b2de..fbae3fe559 100644 --- a/assets/voxygen/voxel/npc/turtle/male/head.vox +++ b/assets/voxygen/voxel/npc/turtle/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 -size 1376 +oid sha256:ea582767e58543c853ecf51543e998063aa59c79eba9f5b8a55f09bff0af4e0a +size 1524 diff --git a/assets/voxygen/voxel/npc/turtle/male/tail.vox b/assets/voxygen/voxel/npc/turtle/male/tail.vox index 20bbc2175d..0d84ef37cc 100644 --- a/assets/voxygen/voxel/npc/turtle/male/tail.vox +++ b/assets/voxygen/voxel/npc/turtle/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab -size 1116 +oid sha256:4b1160b6d35d52f78dced3f27a918bf34f9e3a5211cec6108afdced869a3352c +size 1184 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_bl.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_bl.vox index 2dee7b8a8c..cff8a41e09 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/foot_bl.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bacb74898e1424f8da52e2ed13e1b0851ef59cf7b41a300ba541538f51009136 -size 1288 +oid sha256:2e456782a34461d944feed285c31558fa4b0232b4152c90f02bcda0ad28edf73 +size 1412 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_br.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_br.vox index deec278db7..7b68f3b280 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/foot_br.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a04ae98a07ab025c19b26a0e26096593e88dabcda9ba71728ba1bc76eb90e2c5 -size 1288 +oid sha256:c47e6b396fed4b4875e11f10c00240c9e97b5e2765feca0edcaf7b6c423aa846 +size 1412 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_fl.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_fl.vox index 33575ac5c7..f0d059013b 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/foot_fl.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60f41f842b6d5a340b586fac511e3ddc441a48aca50a7b147ea9a986bfd6845b -size 1348 +oid sha256:f9ba5463684946e1a13270e079b87bd51071e20506622307c28f5f182cc88e0d +size 1500 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_fr.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_fr.vox index 78c08d2584..ce7982ae96 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/foot_fr.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b06f357f56c9e0567ed7474e4ddb4f8adfbc1bcd3d6968ae3cbd09eb3c83536 -size 1348 +oid sha256:b7b14cb13d878d073b982801179873c65d19880975f86d1734ac8729a57ea309 +size 1500 diff --git a/assets/voxygen/voxel/npc/tuskram/male/head_upper.vox b/assets/voxygen/voxel/npc/tuskram/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/tuskram/male/head_upper.vox rename to assets/voxygen/voxel/npc/tuskram/male/head.vox diff --git a/assets/voxygen/voxel/npc/tuskram/male/head_lower.vox b/assets/voxygen/voxel/npc/tuskram/male/head_lower.vox deleted file mode 100644 index a1efbe5bd4..0000000000 --- a/assets/voxygen/voxel/npc/tuskram/male/head_lower.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:232081227b38b2b480e6433a587dd75952ac043b901536b7d4fa502f22f6c05c -size 1904 diff --git a/assets/voxygen/voxel/npc/tuskram/male/leg_bl.vox b/assets/voxygen/voxel/npc/tuskram/male/leg_bl.vox index 5887cef4c9..530a5cd6a5 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/leg_bl.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/leg_bl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82bacb5173c205bdefacc3125b1626cbb91dbd205901511c4e085096a63f88f6 -size 1512 +oid sha256:9d327bf97ccd7bbe82f4d8415466b70007d4c88ec7b32fc633c2c9de10af0917 +size 1460 diff --git a/assets/voxygen/voxel/npc/tuskram/male/leg_br.vox b/assets/voxygen/voxel/npc/tuskram/male/leg_br.vox index 59a3a974b3..1afa6ac8f9 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/leg_br.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/leg_br.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e86ebe755bd518b20900d09ebd8385b0b70cbce604a9c4cbf58385ebd03a655 -size 1512 +oid sha256:3f03f866f9d6a001ac1969d6eb4883f49cb6d6e0e6a648964ca10c591ef82c91 +size 1460 diff --git a/assets/voxygen/voxel/npc/tuskram/male/leg_fl.vox b/assets/voxygen/voxel/npc/tuskram/male/leg_fl.vox index aa39e44650..b4aacb93a5 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/leg_fl.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/leg_fl.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f15a0b8d971d88ca2f718f01148c79a93765a2a3a3c77993fe22858786fc2c8c -size 1528 +oid sha256:db5d9e78e9c0d2e3af48c5961a4f0f82857cb044a109ddb9e07ffa6b81b0b7c5 +size 1432 diff --git a/assets/voxygen/voxel/npc/tuskram/male/leg_fr.vox b/assets/voxygen/voxel/npc/tuskram/male/leg_fr.vox index f213db33e3..3b7f0d803f 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/leg_fr.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/leg_fr.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45dc4382a63c33326f45b68895de3a5f8275413bf3105f5b961e538e9cae9f7e -size 1528 +oid sha256:1f4f35838fa43f23662a44c21eb2d6ef17a26e49ee76a18d187bf0b78c2d6a14 +size 1432 diff --git a/assets/voxygen/voxel/npc/tuskram/male/neck.vox b/assets/voxygen/voxel/npc/tuskram/male/neck.vox new file mode 100644 index 0000000000..860561f6ab --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e6786377fa59115afdfa3ceb5bd03842501500eb981a78afa010c59d578f4a4 +size 2072 diff --git a/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox b/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox index 7688bab3d2..ab7cd73ac8 100644 --- a/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox +++ b/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b04dd83d748675fbaee2afdca25c872c4df0b9c915b3aa7350b92d702dc44f48 -size 5452 +oid sha256:bfff23a60496a1738f161bd94c2a4b0fd3f55e8da86e49c25bee8994bbe597d6 +size 5572 diff --git a/assets/voxygen/voxel/npc/wolf/male/head_upper.vox b/assets/voxygen/voxel/npc/wolf/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/male/head_upper.vox rename to assets/voxygen/voxel/npc/wolf/male/head.vox diff --git a/assets/voxygen/voxel/npc/wolf/male/head_lower.vox b/assets/voxygen/voxel/npc/wolf/male/neck.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/male/head_lower.vox rename to assets/voxygen/voxel/npc/wolf/male/neck.vox diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron index 0a88edcb1c..5fb291e362 100644 --- a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -1,12 +1,12 @@ ({ (Grolgar, Male): ( - upper: ( + head: ( offset: (-7.0, 0.0, -9.0), - central: ("npc.grolgar.male.head_upper"), + central: ("npc.grolgar.male.head"), ), - lower: ( + neck: ( offset: (-6.0, -2.0, -8.0), - central: ("npc.grolgar.male.head_lower"), + central: ("npc.grolgar.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.5), @@ -30,13 +30,13 @@ ), ), (Grolgar, Female): ( - upper: ( + head: ( offset: (-7.0, 0.0, -9.0), - central: ("npc.grolgar.male.head_upper"), + central: ("npc.grolgar.male.head"), ), - lower: ( + neck: ( offset: (-6.0, -2.0, -8.0), - central: ("npc.grolgar.male.head_lower"), + central: ("npc.grolgar.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.5), @@ -60,13 +60,13 @@ ), ), (Saber, Male): ( - upper: ( + head: ( offset: (-5.5, 0.0, -6.5), - central: ("npc.saber.male.head_upper"), + central: ("npc.saber.male.head"), ), - lower: ( + neck: ( offset: (-4.0, -5.5, -4.0), - central: ("npc.saber.male.head_lower"), + central: ("npc.saber.male.neck"), ), jaw: ( offset: (-2.5, 0.0, -1.5), @@ -90,13 +90,13 @@ ), ), (Saber, Female): ( - upper: ( + head: ( offset: (-5.5, 0.0, -6.5), - central: ("npc.saber.male.head_upper"), + central: ("npc.saber.male.head"), ), - lower: ( + neck: ( offset: (-4.0, -5.5, -4.0), - central: ("npc.saber.male.head_lower"), + central: ("npc.saber.male.neck"), ), jaw: ( offset: (-2.5, 0.0, -1.5), @@ -120,13 +120,13 @@ ), ), (Tuskram, Male): ( - upper: ( + head: ( offset: (-10.0, -6.0, -6.5), - central: ("npc.tuskram.male.head_upper"), + central: ("npc.tuskram.male.head"), ), - lower: ( - offset: (-4.0, -4.0, -3.5), - central: ("npc.tuskram.male.head_lower"), + neck: ( + offset: (-4.0, -5.0, -3.5), + central: ("npc.tuskram.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.5), @@ -150,13 +150,13 @@ ), ), (Tuskram, Female): ( - upper: ( + head: ( offset: (-10.0, -6.0, -6.5), - central: ("npc.tuskram.male.head_upper"), + central: ("npc.tuskram.male.head"), ), - lower: ( - offset: (-4.0, -4.0, -3.5), - central: ("npc.tuskram.male.head_lower"), + neck: ( + offset: (-4.0, -5.0, -3.5), + central: ("npc.tuskram.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.5), @@ -180,13 +180,13 @@ ), ), (Lion, Male): ( - upper: ( + head: ( offset: (-4.5, 0.0, -4.5), - central: ("npc.lion.male.head_upper"), + central: ("npc.lion.male.head"), ), - lower: ( + neck: ( offset: (-7.5, -5.5, -8.5), - central: ("npc.lion.male.head_lower"), + central: ("npc.lion.male.neck"), ), jaw: ( offset: (-2.5, 0.0, -1.0), @@ -210,13 +210,13 @@ ), ), (Lion, Female): ( - upper: ( + head: ( offset: (-4.5, 0.0, -4.5), - central: ("npc.lion.male.head_upper"), + central: ("npc.lion.male.head"), ), - lower: ( + neck: ( offset: (-7.5, -5.5, -8.5), - central: ("npc.lion.male.head_lower"), + central: ("npc.lion.male.neck"), ), jaw: ( offset: (-2.5, 0.0, -1.0), @@ -240,13 +240,13 @@ ), ), (Tarasque, Male): ( - upper: ( + head: ( offset: (-10.0, 0.0, -10.0), - central: ("npc.tarasque.male.head_upper"), + central: ("npc.tarasque.male.head"), ), - lower: ( + neck: ( offset: (-5.0, -3.0, -4.5), - central: ("npc.tarasque.male.head_lower"), + central: ("npc.tarasque.male.neck"), ), jaw: ( offset: (-5.0, 0.0, -0.0), @@ -270,13 +270,13 @@ ), ), (Tarasque, Female): ( - upper: ( + head: ( offset: (-10.0, 0.0, -10.0), - central: ("npc.tarasque.male.head_upper"), + central: ("npc.tarasque.male.head"), ), - lower: ( + neck: ( offset: (-5.0, -3.0, -4.5), - central: ("npc.tarasque.male.head_lower"), + central: ("npc.tarasque.male.neck"), ), jaw: ( offset: (-5.0, 0.0, -0.0), @@ -300,13 +300,13 @@ ), ), (Tiger, Male): ( - upper: ( - offset: (-5.5, 0.0, -5.0), - central: ("npc.tiger.male.head_upper"), + head: ( + offset: (-5.5, -1.0, -5.0), + central: ("npc.tiger.male.head"), ), - lower: ( + neck: ( offset: (-4.5, -2.0, -5.0), - central: ("npc.tiger.male.head_lower"), + central: ("npc.tiger.male.neck"), ), jaw: ( offset: (-2.5, 0.0, -1.0), @@ -325,18 +325,18 @@ central: ("npc.tiger.male.ears"), ), tail: ( - offset: (-1.5, -12.0, -1.0), + offset: (-1.5, -12.0, -10.0), central: ("npc.tiger.male.tail"), ), ), (Tiger, Female): ( - upper: ( - offset: (-5.5, 0.0, -5.0), - central: ("npc.tiger.male.head_upper"), + head: ( + offset: (-5.5, -1.0, -5.0), + central: ("npc.tiger.male.head"), ), - lower: ( + neck: ( offset: (-4.5, -2.0, -5.0), - central: ("npc.tiger.male.head_lower"), + central: ("npc.tiger.male.neck"), ), jaw: ( offset: (-2.5, 0.0, -1.0), @@ -355,18 +355,18 @@ central: ("npc.tiger.male.ears"), ), tail: ( - offset: (-1.5, -12.0, -1.0), + offset: (-1.5, -12.0, -10.0), central: ("npc.tiger.male.tail"), ), ), (Wolf, Male): ( - upper: ( + head: ( offset: (-5.0, 0.0, -3.5), - central: ("npc.wolf.male.head_upper"), + central: ("npc.wolf.male.head"), ), - lower: ( + neck: ( offset: (-5.0, -4.5, -5.0), - central: ("npc.wolf.male.head_lower"), + central: ("npc.wolf.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.0), @@ -390,13 +390,13 @@ ), ), (Wolf, Female): ( - upper: ( + head: ( offset: (-5.0, 0.0, -3.5), - central: ("npc.wolf.male.head_upper"), + central: ("npc.wolf.male.head"), ), - lower: ( + neck: ( offset: (-5.0, -4.5, -5.0), - central: ("npc.wolf.male.head_lower"), + central: ("npc.wolf.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.0), @@ -420,13 +420,13 @@ ), ), (Frostfang, Male): ( - upper: ( + head: ( offset: (-4.0, 0.0, -4.5), - central: ("npc.frostfang.male.head_upper"), + central: ("npc.frostfang.male.head"), ), - lower: ( + neck: ( offset: (-3.0, -2.0, -4.0), - central: ("npc.frostfang.male.head_lower"), + central: ("npc.frostfang.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -3.5), @@ -450,13 +450,13 @@ ), ), (Frostfang, Female): ( - upper: ( + head: ( offset: (-4.0, 0.0, -4.5), - central: ("npc.frostfang.male.head_upper"), + central: ("npc.frostfang.male.head"), ), - lower: ( + neck: ( offset: (-3.0, -2.0, -4.0), - central: ("npc.frostfang.male.head_lower"), + central: ("npc.frostfang.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -3.5), @@ -480,13 +480,13 @@ ), ), (Mouflon, Male): ( - upper: ( - offset: (-7.0, 0.0, -4.5), - central: ("npc.mouflon.male.head_upper"), + head: ( + offset: (-7.0, -5.0, 0.0), + central: ("npc.mouflon.male.head"), ), - lower: ( + neck: ( offset: (-4.0, -4.0, -4.5), - central: ("npc.mouflon.male.head_lower"), + central: ("npc.mouflon.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.0), @@ -510,13 +510,13 @@ ), ), (Mouflon, Female): ( - upper: ( - offset: (-7.0, 0.0, -4.5), - central: ("npc.mouflon.male.head_upper"), + head: ( + offset: (-7.0, -5.0, 0.0), + central: ("npc.mouflon.male.head"), ), - lower: ( + neck: ( offset: (-4.0, -4.0, -4.5), - central: ("npc.mouflon.male.head_lower"), + central: ("npc.mouflon.male.neck"), ), jaw: ( offset: (-2.0, 0.0, -1.0), @@ -540,13 +540,13 @@ ), ), (Catoblepas, Male): ( - upper: ( + head: ( offset: (-13.0, 0.0, -4.5), - central: ("npc.catoblepas.male.head_upper"), + central: ("npc.catoblepas.male.head"), ), - lower: ( + neck: ( offset: (-4.0, -10.0, -12.0), - central: ("npc.catoblepas.male.head_lower"), + central: ("npc.catoblepas.male.neck"), ), jaw: ( offset: (-4.0, 0.0, -3.0), @@ -570,13 +570,13 @@ ), ), (Catoblepas, Female): ( - upper: ( + head: ( offset: (-13.0, 0.0, -4.5), - central: ("npc.catoblepas.male.head_upper"), + central: ("npc.catoblepas.male.head"), ), - lower: ( + neck: ( offset: (-4.0, -10.0, -12.0), - central: ("npc.catoblepas.male.head_lower"), + central: ("npc.catoblepas.male.neck"), ), jaw: ( offset: (-4.0, 0.0, -3.0), @@ -600,13 +600,13 @@ ), ), (Bonerattler, Male): ( - upper: ( + head: ( offset: (-4.5, 0.0, -4.5), - central: ("npc.bonerattler.male.head_upper"), + central: ("npc.bonerattler.male.head"), ), - lower: ( + neck: ( offset: (-4.5, -2.0, -5.0), - central: ("npc.bonerattler.male.head_lower"), + central: ("npc.bonerattler.male.neck"), ), jaw: ( offset: (-3.5, 0.0, -2.0), @@ -630,13 +630,13 @@ ), ), (Bonerattler, Female): ( - upper: ( + head: ( offset: (-4.5, 0.0, -4.5), - central: ("npc.bonerattler.male.head_upper"), + central: ("npc.bonerattler.male.head"), ), - lower: ( + neck: ( offset: (-4.5, -2.0, -5.0), - central: ("npc.bonerattler.male.head_lower"), + central: ("npc.bonerattler.male.neck"), ), jaw: ( offset: (-3.5, 0.0, -2.0), @@ -659,4 +659,124 @@ central: ("npc.bonerattler.male.tail"), ), ), + (Deer, Male): ( + head: ( + offset: (-6.0, -5.0, 0.0), + central: ("npc.deer.male.head"), + ), + neck: ( + offset: (-3.0, -3.5, -4.0), + central: ("npc.deer.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -0.5), + central: ("npc.deer.male.jaw"), + ), + torso_front: ( + offset: (-4.0, -9.0, -4.0), + central: ("npc.deer.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -10.0, -3.5), + central: ("npc.deer.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -2.0, 0.0), + central: ("npc.deer.male.tail"), + ), + ), + (Deer, Female): ( + head: ( + offset: (-6.0, -3.0, 0.0), + central: ("npc.deer.female.head"), + ), + neck: ( + offset: (-3.0, -3.5, -4.0), + central: ("npc.deer.female.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -0.5), + central: ("npc.deer.female.jaw"), + ), + torso_front: ( + offset: (-4.0, -9.0, -4.0), + central: ("npc.deer.female.torso_front"), + ), + torso_back: ( + offset: (-4.0, -10.0, -3.5), + central: ("npc.deer.female.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -2.0, 0.0), + central: ("npc.deer.male.tail"), + ), + ), + (Hirdrasil, Male): ( + head: ( + offset: (-9.0, -12.0, 0.0), + central: ("npc.hirdrasil.male.head"), + ), + neck: ( + offset: (-4.0, -4.0, -6.0), + central: ("npc.hirdrasil.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -7.0), + central: ("npc.hirdrasil.male.jaw"), + ), + torso_front: ( + offset: (-4.0, -10.0, -5.5), + central: ("npc.hirdrasil.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -11.0, -4.0), + central: ("npc.hirdrasil.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -2.0, 0.0), + central: ("npc.hirdrasil.male.tail"), + ), + ), + (Hirdrasil, Female): ( + head: ( + offset: (-9.0, -12.0, 0.0), + central: ("npc.hirdrasil.male.head"), + ), + neck: ( + offset: (-4.0, -4.0, -6.0), + central: ("npc.hirdrasil.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -7.0), + central: ("npc.hirdrasil.male.jaw"), + ), + torso_front: ( + offset: (-4.0, -10.0, -5.5), + central: ("npc.hirdrasil.male.torso_front"), + ), + torso_back: ( + offset: (-4.0, -11.0, -4.0), + central: ("npc.hirdrasil.male.torso_back"), + ), + ears: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -2.0, 0.0), + central: ("npc.hirdrasil.male.tail"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron index 77d283c7a6..a00fa3b1b8 100644 --- a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -1,69 +1,69 @@ ({ (Grolgar, Male): ( leg_fl: ( - offset: (-2.5, -12.0, -7.5),//these are done very case by case + offset: (-2.5, -4.5, -4.0),//these are done very case by case lateral: ("npc.grolgar.male.leg_fl"), ), leg_fr: ( - offset: (-2.5, -12.0, -7.5), + offset: (-2.5, -4.5, -4.0), lateral: ("npc.grolgar.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -3.5, -5.0), + offset: (-2.5, -3.5, -3.5), lateral: ("npc.grolgar.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -3.5, -5.0), + offset: (-2.0, -3.5, -3.5), lateral: ("npc.grolgar.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -3.0, -6.0),//y pivot should be -1/4 of the y dimension of the model + offset: (-2.5, -4.5, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -3.0, -6.0),//y pivot should be -1/4 of the y dimension of the model + offset: (-2.5, -4.5, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_fr"), ), foot_bl: ( - offset: (-2.5, -2.0, -4.0),//y pivot should be -1/4 of the y dimension of the model + offset: (-2.5, -2.0, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_bl"), ), foot_br: ( - offset: (-2.5, -2.0, -4.0),//y pivot should be -1/4 of the y dimension of the model + offset: (-2.5, -2.0, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_br"), ), ), (Grolgar, Female): ( leg_fl: ( - offset: (-2.5, -12.0, -7.5), + offset: (-2.5, -4.5, -4.0),//these are done very case by case lateral: ("npc.grolgar.male.leg_fl"), ), leg_fr: ( - offset: (-2.5, -12.0, -7.5), + offset: (-2.5, -4.5, -4.0), lateral: ("npc.grolgar.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -3.5, -5.0), + offset: (-2.5, -3.5, -3.5), lateral: ("npc.grolgar.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -3.5, -5.0), + offset: (-2.0, -3.5, -3.5), lateral: ("npc.grolgar.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -3.0, -6.0), + offset: (-2.5, -4.5, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -3.0, -6.0), + offset: (-2.5, -4.5, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_fr"), ), foot_bl: ( - offset: (-2.5, -2.0, -4.0), + offset: (-2.5, -2.0, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_bl"), ), foot_br: ( - offset: (-2.5, -2.0, -4.0), + offset: (-2.5, -2.0, -8.0),//y pivot should be -1/4 of the y dimension of the model lateral: ("npc.grolgar.male.foot_br"), ), ), @@ -137,137 +137,137 @@ ), (Tuskram, Male): ( leg_fl: ( - offset: (-2.0, -2.5, -10.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_fl"), ), leg_fr: ( - offset: (-2.0, -2.5, -10.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -2.5, -4.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -2.5, -4.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tuskram.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tuskram.male.foot_fr"), ), foot_bl: ( - offset: (-1.5, -1.5, -6.0), + offset: (-1.5, -1.5, -8.0), lateral: ("npc.tuskram.male.foot_bl"), ), foot_br: ( - offset: (-1.5, -1.5, -6.0), + offset: (-1.5, -1.5, -8.0), lateral: ("npc.tuskram.male.foot_br"), ), ), (Tuskram, Female): ( leg_fl: ( - offset: (-2.0, -2.5, -10.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_fl"), ), leg_fr: ( - offset: (-2.0, -2.5, -10.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -2.5, -4.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -2.5, -4.0), + offset: (-2.0, -2.5, -3.0), lateral: ("npc.tuskram.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tuskram.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tuskram.male.foot_fr"), ), foot_bl: ( - offset: (-1.5, -1.5, -6.0), + offset: (-1.5, -1.5, -8.0), lateral: ("npc.tuskram.male.foot_bl"), ), foot_br: ( - offset: (-1.5, -1.5, -6.0), + offset: (-1.5, -1.5, -8.0), lateral: ("npc.tuskram.male.foot_br"), ), ), (Lion, Male): ( leg_fl: ( - offset: (-2.0, -2.5, -7.5), + offset: (-2.0, -2.5, -3.5), lateral: ("npc.lion.male.leg_fl"), ), leg_fr: ( - offset: (-2.0, -2.5, -7.5), + offset: (-2.0, -2.5, -3.5), lateral: ("npc.lion.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -3.0, -6.0), + offset: (-2.0, -3.0, -3.5), lateral: ("npc.lion.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -3.0, -6.0), + offset: (-2.0, -3.0, -3.5), lateral: ("npc.lion.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_fr"), ), foot_bl: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_bl"), ), foot_br: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_br"), ), ), (Lion, Female): ( leg_fl: ( - offset: (-2.0, -2.5, -7.5), + offset: (-2.0, -2.5, -3.5), lateral: ("npc.lion.male.leg_fl"), ), leg_fr: ( - offset: (-2.0, -2.5, -7.5), + offset: (-2.0, -2.5, -3.5), lateral: ("npc.lion.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -3.0, -6.0), + offset: (-2.0, -3.0, -3.5), lateral: ("npc.lion.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -3.0, -6.0), + offset: (-2.0, -3.0, -3.5), lateral: ("npc.lion.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -2.0, -5.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_fr"), ), foot_bl: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_bl"), ), foot_br: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.lion.male.foot_br"), ), ), @@ -341,69 +341,69 @@ ), (Tiger, Male): ( leg_fl: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -4.0), lateral: ("npc.tiger.male.leg_fl"), ), leg_fr: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -4.0), lateral: ("npc.tiger.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -3.0), lateral: ("npc.tiger.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -3.0), lateral: ("npc.tiger.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -7.0), lateral: ("npc.tiger.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -7.0), lateral: ("npc.tiger.male.foot_fr"), ), foot_bl: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tiger.male.foot_bl"), ), foot_br: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tiger.male.foot_br"), ), ), (Tiger, Female): ( leg_fl: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -4.0), lateral: ("npc.tiger.male.leg_fl"), ), leg_fr: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -4.0), lateral: ("npc.tiger.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -3.0), lateral: ("npc.tiger.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -3.0, -5.0), + offset: (-2.0, -3.0, -3.0), lateral: ("npc.tiger.male.leg_br"), ), foot_fl: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -7.0), lateral: ("npc.tiger.male.foot_fl"), ), foot_fr: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -7.0), lateral: ("npc.tiger.male.foot_fr"), ), foot_bl: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tiger.male.foot_bl"), ), foot_br: ( - offset: (-2.5, -2.0, -6.0), + offset: (-2.5, -2.0, -8.0), lateral: ("npc.tiger.male.foot_br"), ), ), @@ -545,11 +545,11 @@ ), (Mouflon, Male): ( leg_fl: ( - offset: (-1.5, -2.5, -2.5), + offset: (-1.5, -2.5, -4.0), lateral: ("npc.mouflon.male.leg_fl"), ), leg_fr: ( - offset: (-1.5, -2.5, -2.5), + offset: (-1.5, -2.5, -4.0), lateral: ("npc.mouflon.male.leg_fr"), ), leg_bl: ( @@ -569,29 +569,29 @@ lateral: ("npc.mouflon.male.foot_fr"), ), foot_bl: ( - offset: (-1.0, -2.0, -6.0), + offset: (-1.0, -2.0, -10.0), lateral: ("npc.mouflon.male.foot_bl"), ), foot_br: ( - offset: (-1.0, -2.0, -6.0), + offset: (-1.0, -2.0, -10.0), lateral: ("npc.mouflon.male.foot_br"), ), ), (Mouflon, Female): ( leg_fl: ( - offset: (-1.5, -2.5, -2.5), + offset: (-1.5, -2.5, -4.0), lateral: ("npc.mouflon.male.leg_fl"), ), leg_fr: ( - offset: (-1.5, -2.5, -2.5), + offset: (-1.5, -2.5, -4.0), lateral: ("npc.mouflon.male.leg_fr"), ), leg_bl: ( - offset: (-2.0, -1.0, -2.5), + offset: (-2.0, -2.5, -4.0), lateral: ("npc.mouflon.male.leg_bl"), ), leg_br: ( - offset: (-2.0, -1.0, -2.5), + offset: (-2.0, -2.5, -4.0), lateral: ("npc.mouflon.male.leg_br"), ), foot_fl: ( @@ -603,21 +603,21 @@ lateral: ("npc.mouflon.male.foot_fr"), ), foot_bl: ( - offset: (-1.0, -2.0, -6.0), + offset: (-1.0, -2.0, -10.0), lateral: ("npc.mouflon.male.foot_bl"), ), foot_br: ( - offset: (-1.0, -2.0, -6.0), + offset: (-1.0, -2.0, -10.0), lateral: ("npc.mouflon.male.foot_br"), ), ), (Catoblepas, Male): ( leg_fl: ( - offset: (-2.5, -4.0, -4.5), + offset: (-2.5, -4.0, -5.0), lateral: ("npc.catoblepas.male.leg_fl"), ), leg_fr: ( - offset: (-2.5, -4.0, -4.5), + offset: (-2.5, -4.0, -5.0), lateral: ("npc.catoblepas.male.leg_fr"), ), leg_bl: ( @@ -629,11 +629,11 @@ lateral: ("npc.catoblepas.male.leg_br"), ), foot_fl: ( - offset: (-3.0, -7.0, -11.0), + offset: (-3.0, -3.0, -9.0), lateral: ("npc.catoblepas.male.foot_fl"), ), foot_fr: ( - offset: (-3.0, -7.0, -11.0), + offset: (-3.0, -3.0, -9.0), lateral: ("npc.catoblepas.male.foot_fr"), ), foot_bl: ( @@ -647,11 +647,11 @@ ), (Catoblepas, Female): ( leg_fl: ( - offset: (-2.5, -4.0, -4.5), + offset: (-2.5, -4.0, -5.0), lateral: ("npc.catoblepas.male.leg_fl"), ), leg_fr: ( - offset: (-2.5, -4.0, -4.5), + offset: (-2.5, -4.0, -5.0), lateral: ("npc.catoblepas.male.leg_fr"), ), leg_bl: ( @@ -663,11 +663,11 @@ lateral: ("npc.catoblepas.male.leg_br"), ), foot_fl: ( - offset: (-3.0, -7.0, -11.0), + offset: (-3.0, -3.0, -9.0), lateral: ("npc.catoblepas.male.foot_fl"), ), foot_fr: ( - offset: (-3.0, -7.0, -11.0), + offset: (-3.0, -3.0, -9.0), lateral: ("npc.catoblepas.male.foot_fr"), ), foot_bl: ( @@ -747,4 +747,140 @@ lateral: ("npc.bonerattler.male.foot_br"), ), ), + (Deer, Male): ( + leg_fl: ( + offset: (-1.5, -2.5, -3.5), + lateral: ("npc.deer.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -2.5, -3.5), + lateral: ("npc.deer.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.deer.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.deer.male.leg_br"), + ), + foot_fl: ( + offset: (-1.0, -1.0, -8.0), + lateral: ("npc.deer.male.foot_fl"), + ), + foot_fr: ( + offset: (-1.0, -1.0, -8.0), + lateral: ("npc.deer.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.0, -2.0, -9.0), + lateral: ("npc.deer.male.foot_bl"), + ), + foot_br: ( + offset: (-1.0, -2.0, -9.0), + lateral: ("npc.deer.male.foot_br"), + ), + ), + (Deer, Female): ( + leg_fl: ( + offset: (-1.5, -2.5, -3.5), + lateral: ("npc.deer.female.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -2.5, -3.5), + lateral: ("npc.deer.female.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.deer.female.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.deer.female.leg_br"), + ), + foot_fl: ( + offset: (-1.0, -1.0, -8.0), + lateral: ("npc.deer.female.foot_fl"), + ), + foot_fr: ( + offset: (-1.0, -1.0, -8.0), + lateral: ("npc.deer.female.foot_fr"), + ), + foot_bl: ( + offset: (-1.0, -2.0, -9.0), + lateral: ("npc.deer.female.foot_bl"), + ), + foot_br: ( + offset: (-1.0, -2.0, -9.0), + lateral: ("npc.deer.female.foot_br"), + ), + ), + (Hirdrasil, Male): ( + leg_fl: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.hirdrasil.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.hirdrasil.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.hirdrasil.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.hirdrasil.male.leg_br"), + ), + foot_fl: ( + offset: (-2.0, -1.0, -9.0), + lateral: ("npc.hirdrasil.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.0, -1.0, -9.0), + lateral: ("npc.hirdrasil.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.0, -2.5, -7.0), + lateral: ("npc.hirdrasil.male.foot_bl"), + ), + foot_br: ( + offset: (-2.0, -2.5, -7.0), + lateral: ("npc.hirdrasil.male.foot_br"), + ), + ), + (Hirdrasil, Female): ( + leg_fl: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.hirdrasil.male.leg_fl"), + ), + leg_fr: ( + offset: (-1.5, -3.0, -4.0), + lateral: ("npc.hirdrasil.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.hirdrasil.male.leg_bl"), + ), + leg_br: ( + offset: (-2.0, -2.5, -5.0), + lateral: ("npc.hirdrasil.male.leg_br"), + ), + foot_fl: ( + offset: (-2.0, -1.0, -9.0), + lateral: ("npc.hirdrasil.male.foot_fl"), + ), + foot_fr: ( + offset: (-2.0, -1.0, -9.0), + lateral: ("npc.hirdrasil.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.0, -2.5, -7.0), + lateral: ("npc.hirdrasil.male.foot_bl"), + ), + foot_br: ( + offset: (-2.0, -2.5, -7.0), + lateral: ("npc.hirdrasil.male.foot_br"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron index d1d5628738..66e16a7231 100644 --- a/assets/voxygen/voxel/quadruped_small_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -462,4 +462,228 @@ central: ("armor.empty"), ), ), + (Rat, Male):( + head: ( + offset: (-4.5, 0.0, -3.0), + central: ("npc.rat.male.head"), + ), + chest: ( + offset: (-3.5, -5.5, -3.5), + central: ("npc.rat.male.chest"), + ), + tail: ( + offset: (-0.5, -12.0, -3.0), + central: ("npc.rat.male.tail"), + ), + ), + (Rat, Female):( + head: ( + offset: (-4.5, 0.0, -3.0), + central: ("npc.rat.male.head"), + ), + chest: ( + offset: (-3.5, -5.5, -3.5), + central: ("npc.rat.male.chest"), + ), + tail: ( + offset: (-0.5, -12.0, -3.0), + central: ("npc.rat.male.tail"), + ), + ), + (Axolotl, Male):( + head: ( + offset: (-5.5, 0.0, -3.0), + central: ("npc.axolotl.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -2.5), + central: ("npc.axolotl.male.chest"), + ), + tail: ( + offset: (-1.5, -10.0, -2.5), + central: ("npc.axolotl.male.tail"), + ), + ), + (Axolotl, Female):( + head: ( + offset: (-5.5, 0.0, -3.0), + central: ("npc.axolotl.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -3.5), + central: ("npc.axolotl.male.chest"), + ), + tail: ( + offset: (-1.5, -10.0, -2.5), + central: ("npc.axolotl.male.tail"), + ), + ), + (Gecko, Male):( + head: ( + offset: (-2.5, 0.0, -2.0), + central: ("npc.gecko.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -1.5), + central: ("npc.gecko.male.chest"), + ), + tail: ( + offset: (-1.5, -12.0, -1.5), + central: ("npc.gecko.male.tail"), + ), + ), + (Gecko, Female):( + head: ( + offset: (-2.5, 0.0, -2.0), + central: ("npc.gecko.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -1.5), + central: ("npc.gecko.male.chest"), + ), + tail: ( + offset: (-1.5, -12.0, -1.5), + central: ("npc.gecko.male.tail"), + ), + ), + (Turtle, Male):( + head: ( + offset: (-2.5, 0.0, -1.5), + central: ("npc.turtle.male.head"), + ), + chest: ( + offset: (-6.5, -7.0, -4.0), + central: ("npc.turtle.male.chest"), + ), + tail: ( + offset: (-1.5, -6.0, -1.0), + central: ("npc.turtle.male.tail"), + ), + ), + (Turtle, Female):( + head: ( + offset: (-2.5, 0.0, -1.5), + central: ("npc.turtle.male.head"), + ), + chest: ( + offset: (-6.5, -7.0, -4.0), + central: ("npc.turtle.male.chest"), + ), + tail: ( + offset: (-1.5, -6.0, -1.0), + central: ("npc.turtle.male.tail"), + ), + ), + (Squirrel, Male):( + head: ( + offset: (-2.5, 0.0, -2.5), + central: ("npc.squirrel.male.head"), + ), + chest: ( + offset: (-2.5, -4.0, -2.5), + central: ("npc.squirrel.male.chest"), + ), + tail: ( + offset: (-2.5, -8.0, -2.0), + central: ("npc.squirrel.male.tail"), + ), + ), + (Squirrel, Female):( + head: ( + offset: (-2.5, 0.0, -2.5), + central: ("npc.squirrel.male.head"), + ), + chest: ( + offset: (-2.5, -4.0, -2.5), + central: ("npc.squirrel.male.chest"), + ), + tail: ( + offset: (-2.5, -8.0, -2.0), + central: ("npc.squirrel.male.tail"), + ), + ), + (Fungome, Male):( + head: ( + offset: (-3.0, 0.0, -2.0), + central: ("npc.fungome.male.head"), + ), + chest: ( + offset: (-7.0, -7.0, -4.0), + central: ("npc.fungome.male.chest"), + ), + tail: ( + offset: (-1.0, -5.0, -1.0), + central: ("npc.fungome.male.tail"), + ), + ), + (Fungome, Female):( + head: ( + offset: (-3.0, 0.0, -2.0), + central: ("npc.fungome.male.head"), + ), + chest: ( + offset: (-7.0, -7.0, -4.0), + central: ("npc.fungome.male.chest"), + ), + tail: ( + offset: (-1.0, -5.0, -1.0), + central: ("npc.fungome.male.tail"), + ), + ), + (Porcupine, Male):( + head: ( + offset: (-2.5, 0.0, -7.0), + central: ("npc.porcupine.male.head"), + ), + chest: ( + offset: (-7.5, -10.0, -8.0), + central: ("npc.porcupine.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Porcupine, Female):( + head: ( + offset: (-2.5, 0.0, -7.0), + central: ("npc.porcupine.male.head"), + ), + chest: ( + offset: (-7.5, -10.0, -8.0), + central: ("npc.porcupine.male.chest"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + ), + (Beaver, Male):( + head: ( + offset: (-4.0, 0.0, -3.0), + central: ("npc.beaver.male.head"), + ), + chest: ( + offset: (-4.0, -6.0, -4.0), + central: ("npc.beaver.male.chest"), + ), + tail: ( + offset: (-3.0, -9.0, -2.0), + central: ("npc.beaver.male.tail"), + ), + ), + (Beaver, Female):( + head: ( + offset: (-4.0, 0.0, -3.0), + central: ("npc.beaver.male.head"), + ), + chest: ( + offset: (-4.0, -6.0, -4.0), + central: ("npc.beaver.male.chest"), + ), + tail: ( + offset: (-3.0, -9.0, -2.0), + central: ("npc.beaver.male.tail"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron index d89037e22b..1c91b5b8d1 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,292 @@ lateral: ("npc.frog.male.foot_br"), ), ), + (Rat, Male): ( + left_front: ( + offset: (-1.5, -2.0, -4.0), + lateral: ("npc.rat.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.0, -4.0), + lateral: ("npc.rat.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.rat.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.rat.male.foot_br"), + ), + ), + (Rat, Female): ( + left_front: ( + offset: (-1.5, -2.0, -4.0), + lateral: ("npc.rat.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.0, -4.0), + lateral: ("npc.rat.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.rat.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.rat.male.foot_br"), + ), + ), + (Axolotl, Male): ( + left_front: ( + offset: (-5.5, -0.5, -3.0), + lateral: ("npc.axolotl.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.5, -3.0), + lateral: ("npc.axolotl.male.foot_fr"), + ), + left_back: ( + offset: (-5.5, -3.5, -3.0), + lateral: ("npc.axolotl.male.foot_bl"), + ), + right_back: ( + offset: (-0.5, -3.5, -3.0), + lateral: ("npc.axolotl.male.foot_br"), + ), + ), + (Axolotl, Female): ( + left_front: ( + offset: (-5.5, -0.5, -3.0), + lateral: ("npc.axolotl.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.5, -3.0), + lateral: ("npc.axolotl.male.foot_fr"), + ), + left_back: ( + offset: (-5.5, -3.5, -3.0), + lateral: ("npc.axolotl.male.foot_bl"), + ), + right_back: ( + offset: (-0.5, -3.5, -3.0), + lateral: ("npc.axolotl.male.foot_br"), + ), + ), + (Gecko, Male): ( + left_front: ( + offset: (-5.5, -1.0, -3.5), + lateral: ("npc.gecko.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -1.0, -3.5), + lateral: ("npc.gecko.male.foot_fr"), + ), + left_back: ( + offset: (-5.5, -4.0, -3.5), + lateral: ("npc.gecko.male.foot_bl"), + ), + right_back: ( + offset: (-0.5, -4.0, -3.5), + lateral: ("npc.gecko.male.foot_br"), + ), + ), + (Gecko, Female): ( + left_front: ( + offset: (-5.5, -1.0, -3.5), + lateral: ("npc.gecko.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -1.0, -3.5), + lateral: ("npc.gecko.male.foot_fr"), + ), + left_back: ( + offset: (-5.5, -4.0, -3.5), + lateral: ("npc.gecko.male.foot_bl"), + ), + right_back: ( + offset: (-0.5, -4.0, -3.5), + lateral: ("npc.gecko.male.foot_br"), + ), + ), + (Turtle, Male): ( + left_front: ( + offset: (-1.5, -0.5, -4.0), + lateral: ("npc.turtle.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -0.5, -4.0), + lateral: ("npc.turtle.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_bl"), + ), + right_back: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_br"), + ), + ), + (Turtle, Female): ( + left_front: ( + offset: (-1.5, -0.5, -4.0), + lateral: ("npc.turtle.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -0.5, -4.0), + lateral: ("npc.turtle.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_bl"), + ), + right_back: ( + offset: (-2.0, -2.5, -4.0), + lateral: ("npc.turtle.male.foot_br"), + ), + ), + (Squirrel, Male): ( + left_front: ( + offset: (-1.5, -1.5, -4.0), + lateral: ("npc.squirrel.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -1.5, -4.0), + lateral: ("npc.squirrel.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.0, -5.0), + lateral: ("npc.squirrel.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.0, -5.0), + lateral: ("npc.squirrel.male.foot_br"), + ), + ), + (Squirrel, Female): ( + left_front: ( + offset: (-1.5, -1.5, -4.0), + lateral: ("npc.squirrel.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -1.5, -4.0), + lateral: ("npc.squirrel.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.0, -5.0), + lateral: ("npc.squirrel.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.0, -5.0), + lateral: ("npc.squirrel.male.foot_br"), + ), + ), + (Fungome, Male): ( + left_front: ( + offset: (-2.5, -0.5, -3.0), + lateral: ("npc.fungome.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.5, -3.0), + lateral: ("npc.fungome.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -1.0, -3.0), + lateral: ("npc.fungome.male.foot_bl"), + ), + right_back: ( + offset: (-0.5, -1.0, -3.0), + lateral: ("npc.fungome.male.foot_br"), + ), + ), + (Fungome, Female): ( + left_front: ( + offset: (-2.5, -0.5, -3.0), + lateral: ("npc.fungome.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.5, -3.0), + lateral: ("npc.fungome.male.foot_fr"), + ), + left_back: ( + offset: (-2.5, -1.0, -3.0), + lateral: ("npc.fungome.male.foot_bl"), + ), + right_back: ( + offset: (-0.5, -1.0, -3.0), + lateral: ("npc.fungome.male.foot_br"), + ), + ), + (Porcupine, Male): ( + left_front: ( + offset: (-1.5, -2.5, -2.0), + lateral: ("npc.porcupine.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -2.0), + lateral: ("npc.porcupine.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -3.0, -3.0), + lateral: ("npc.porcupine.male.foot_bl"), + ), + right_back: ( + offset: (-2.0, -3.0, -3.0), + lateral: ("npc.porcupine.male.foot_br"), + ), + ), + (Porcupine, Female): ( + left_front: ( + offset: (-1.5, -2.5, -2.0), + lateral: ("npc.porcupine.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -2.0), + lateral: ("npc.porcupine.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -3.0, -3.0), + lateral: ("npc.porcupine.male.foot_bl"), + ), + right_back: ( + offset: (-2.0, -3.0, -3.0), + lateral: ("npc.porcupine.male.foot_br"), + ), + ), + (Beaver, Male): ( + left_front: ( + offset: (-1.5, -2.0, -2.0), + lateral: ("npc.beaver.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -2.0), + lateral: ("npc.beaver.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -2.5, -3.0), + lateral: ("npc.beaver.male.foot_bl"), + ), + right_back: ( + offset: (-2.0, -2.5, -3.0), + lateral: ("npc.beaver.male.foot_br"), + ), + ), + (Beaver, Female): ( + left_front: ( + offset: (-1.5, -2.0, -2.0), + lateral: ("npc.beaver.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -2.0), + lateral: ("npc.beaver.male.foot_fr"), + ), + left_back: ( + offset: (-2.0, -2.5, -3.0), + lateral: ("npc.beaver.male.foot_bl"), + ), + right_back: ( + offset: (-2.0, -2.5, -3.0), + lateral: ("npc.beaver.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..07f30ec257 --- /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: (-5.5, 0.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, -23.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: (-5.5, 0.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, -23.0, -3.0), + central: ("npc.archaeos.male.tail_back"), + ), + ), + (Odonto, Male): ( + head: ( + offset: (-10.5, 0.0, -8.0), + central: ("npc.odonto.male.head"), + ), + jaw: ( + offset: (-6.5, 0.0, -3.0), + central: ("npc.odonto.male.jaw"), + ), + neck: ( + offset: (-5.5, 0.0, -6.5), + central: ("npc.odonto.male.neck"), + ), + chest_front: ( + offset: (-5.5, -5.0, -6.0), + central: ("npc.odonto.male.chest_front"), + ), + chest_back: ( + offset: (-6.5, -8.0, -8.5), + central: ("npc.odonto.male.chest_back"), + ), + tail_front: ( + offset: (-3.5, -8.0, -5.5), + central: ("npc.odonto.male.tail_front"), + ), + tail_back: ( + offset: (-2.5, -19.0, -5.0), + central: ("npc.odonto.male.tail_back"), + ), + ), + (Odonto, Female): ( + head: ( + offset: (-10.5, 0.0, -8.0), + central: ("npc.odonto.male.head"), + ), + jaw: ( + offset: (-6.5, 0.0, -3.0), + central: ("npc.odonto.male.jaw"), + ), + neck: ( + offset: (-5.5, 0.0, -6.5), + central: ("npc.odonto.male.neck"), + ), + chest_front: ( + offset: (-5.5, -5.0, -6.0), + central: ("npc.odonto.male.chest_front"), + ), + chest_back: ( + offset: (-6.5, -8.0, -8.5), + central: ("npc.odonto.male.chest_back"), + ), + tail_front: ( + offset: (-3.5, -8.0, -5.5), + central: ("npc.odonto.male.tail_front"), + ), + tail_back: ( + offset: (-2.5, -19.0, -5.0), + central: ("npc.odonto.male.tail_back"), + ), + ), +}) diff --git a/assets/voxygen/voxel/theropod_lateral_manifest.ron b/assets/voxygen/voxel/theropod_lateral_manifest.ron new file mode 100644 index 0000000000..39603e4a41 --- /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, -9.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, -9.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"), + ), + ), + (Odonto, Male): ( + hand_l: ( + offset: (-3.0, -3.0, -7.0), + lateral: ("npc.odonto.male.hand_l"), + ), + hand_r: ( + offset: (0.0, -3.0, -7.0), + lateral: ("npc.odonto.male.hand_r"), + ), + leg_l: ( + offset: (-7.0, -4.5, -4.0), + lateral: ("npc.odonto.male.leg_l"), + ), + leg_r: ( + offset: (0.0, -4.5, -4.0), + lateral: ("npc.odonto.male.leg_r"), + ), + foot_l: ( + offset: (-8.0, -1.0, -8.0), + lateral: ("npc.odonto.male.foot_l"), + ), + foot_r: ( + offset: (-6.0, -1.0, -8.0), + lateral: ("npc.odonto.male.foot_r"), + ), + ), + (Odonto, Female): ( + hand_l: ( + offset: (-3.0, -3.0, -7.0), + lateral: ("npc.odonto.male.hand_l"), + ), + hand_r: ( + offset: (0.0, -3.0, -7.0), + lateral: ("npc.odonto.male.hand_r"), + ), + leg_l: ( + offset: (-7.0, -4.5, -4.0), + lateral: ("npc.odonto.male.leg_l"), + ), + leg_r: ( + offset: (0.0, -4.5, -4.0), + lateral: ("npc.odonto.male.leg_r"), + ), + foot_l: ( + offset: (-8.0, -1.0, -8.0), + lateral: ("npc.odonto.male.foot_l"), + ), + foot_r: ( + offset: (-6.0, -1.0, -8.0), + lateral: ("npc.odonto.male.foot_r"), + ), + ), +}) diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs index 8505ef2797..3f4931de89 100644 --- a/common/src/comp/ability.rs +++ b/common/src/comp/ability.rs @@ -192,6 +192,7 @@ pub struct Loadout { pub second_item: Option, pub lantern: Option, + pub glider: Option, #[in_array(get_armor)] pub shoulder: Option, diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index 218d12240d..8deb64be8a 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, 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,12 +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, - _ => 0.4, - }, + Body::Theropod(_) => 1.0, 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/critter.rs b/common/src/comp/body/critter.rs deleted file mode 100644 index c3d0115693..0000000000 --- a/common/src/comp/body/critter.rs +++ /dev/null @@ -1,99 +0,0 @@ -use crate::{make_case_elim, make_proj_elim}; -use rand::{seq::SliceRandom, thread_rng}; -use serde::{Deserialize, Serialize}; - -make_proj_elim!( - body, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] - pub struct Body { - pub species: Species, - pub body_type: BodyType, - } -); - -impl Body { - pub fn random() -> Self { - let mut rng = thread_rng(); - let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); - Self::random_with(&mut rng, &species) - } - - #[inline] - pub fn random_with(rng: &mut impl rand::Rng, &species: &Species) -> Self { - let body_type = *(&ALL_BODY_TYPES).choose(rng).unwrap(); - Self { species, body_type } - } -} - -impl From for super::Body { - fn from(body: Body) -> Self { super::Body::Critter(body) } -} - -make_case_elim!( - species, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] - #[repr(u32)] - pub enum Species { - Rat = 0, - Axolotl = 1, - Gecko = 2, - Turtle = 3, - Squirrel = 4, - Fungome = 5, - } -); - -/// Data representing per-species generic data. -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct AllSpecies { - 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 { - type Output = SpeciesMeta; - - #[inline] - fn index(&self, &index: &'a Species) -> &Self::Output { - match index { - 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; 6] = [ - Species::Rat, - Species::Axolotl, - Species::Gecko, - Species::Turtle, - Species::Squirrel, - Species::Fungome, -]; - -impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { - type IntoIter = std::iter::Copied>; - type Item = Species; - - fn into_iter(self) -> Self::IntoIter { ALL_SPECIES.iter().copied() } -} - -make_case_elim!( - body_type, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] - #[repr(u32)] - pub enum BodyType { - Female = 0, - Male = 1, - } -); - -pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs index 191c36fb02..17c662e239 100644 --- a/common/src/comp/body/quadruped_medium.rs +++ b/common/src/comp/body/quadruped_medium.rs @@ -29,24 +29,23 @@ impl From for super::Body { fn from(body: Body) -> Self { super::Body::QuadrupedMedium(body) } } -make_case_elim!( - species, - #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] - #[repr(u32)] - pub enum Species { - Grolgar = 0, - Saber = 1, - Tiger = 2, - Tuskram = 3, - Lion = 6, - Tarasque = 7, - Wolf = 8, - Frostfang = 9, - Mouflon = 10, - Catoblepas = 11, - Bonerattler = 12, - } -); +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Species { + Grolgar = 0, + Saber = 1, + Tiger = 2, + Tuskram = 3, + Lion = 6, + Tarasque = 7, + Wolf = 8, + Frostfang = 9, + Mouflon = 10, + Catoblepas = 11, + Bonerattler = 12, + Deer = 13, + Hirdrasil = 14, +} /// Data representing per-species generic data. /// @@ -64,6 +63,8 @@ pub struct AllSpecies { pub mouflon: SpeciesMeta, pub catoblepas: SpeciesMeta, pub bonerattler: SpeciesMeta, + pub deer: SpeciesMeta, + pub hirdrasil: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -83,11 +84,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Mouflon => &self.mouflon, Species::Catoblepas => &self.catoblepas, Species::Bonerattler => &self.bonerattler, + Species::Deer => &self.deer, + Species::Hirdrasil => &self.hirdrasil, } } } -pub const ALL_SPECIES: [Species; 11] = [ +pub const ALL_SPECIES: [Species; 13] = [ Species::Grolgar, Species::Saber, Species::Tiger, @@ -99,6 +102,8 @@ pub const ALL_SPECIES: [Species; 11] = [ Species::Mouflon, Species::Catoblepas, Species::Bonerattler, + Species::Deer, + Species::Hirdrasil, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index b0829352f6..50cb6ae531 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -29,29 +29,34 @@ 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, + Porcupine = 22, + Beaver = 23, +} /// Data representing per-species generic data. /// @@ -74,6 +79,14 @@ 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, + pub porcupine: SpeciesMeta, + pub beaver: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -98,11 +111,19 @@ 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, + Species::Porcupine => &self.porcupine, + Species::Beaver => &self.beaver, } } } -pub const ALL_SPECIES: [Species; 16] = [ +pub const ALL_SPECIES: [Species; 24] = [ Species::Pig, Species::Fox, Species::Sheep, @@ -119,6 +140,14 @@ pub const ALL_SPECIES: [Species; 16] = [ Species::Rabbit, Species::Truffler, Species::Frog, + Species::Rat, + Species::Axolotl, + Species::Gecko, + Species::Turtle, + Species::Squirrel, + Species::Fungome, + Species::Porcupine, + Species::Beaver, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/theropod.rs b/common/src/comp/body/theropod.rs new file mode 100644 index 0000000000..e7d2ac75f6 --- /dev/null +++ b/common/src/comp/body/theropod.rs @@ -0,0 +1,69 @@ +use rand::{seq::SliceRandom, thread_rng}; +use serde::{Deserialize, Serialize}; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub struct Body { + pub species: Species, + pub body_type: BodyType, +} + +impl Body { + pub fn random() -> Self { + let mut rng = thread_rng(); + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + Self::random_with(&mut rng, &species) + } + + #[inline] + pub fn random_with(rng: &mut impl rand::Rng, &species: &Species) -> Self { + let body_type = *(&ALL_BODY_TYPES).choose(rng).unwrap(); + Self { species, body_type } + } +} + +impl From for super::Body { + fn from(body: Body) -> Self { super::Body::Theropod(body) } +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Species { + Archaeos = 0, + Odonto = 1, +} + +/// Data representing per-species generic data. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct AllSpecies { + pub archaeos: SpeciesMeta, + pub odonto: SpeciesMeta, +} + +impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { + type Output = SpeciesMeta; + + #[inline] + fn index(&self, &index: &'a Species) -> &Self::Output { + match index { + Species::Archaeos => &self.archaeos, + Species::Odonto => &self.odonto, + } + } +} + +pub const ALL_SPECIES: [Species; 2] = [Species::Archaeos, Species::Odonto]; + +impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { + type IntoIter = std::iter::Copied>; + type Item = Species; + + fn into_iter(self) -> Self::IntoIter { ALL_SPECIES.iter().copied() } +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum BodyType { + Female = 0, + Male = 1, +} +pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs index 448be8e1f6..5bf5f8cdba 100644 --- a/common/src/comp/inventory/item/mod.rs +++ b/common/src/comp/inventory/item/mod.rs @@ -58,12 +58,18 @@ impl Lantern { pub fn color(&self) -> Rgb { self.color.map(|c| c as f32 / 255.0) } } +#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +pub struct Glider { + pub kind: String, +} + #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub enum ItemKind { /// Something wieldable Tool(tool::Tool), Lantern(Lantern), Armor(armor::Armor), + Glider(Glider), Consumable { kind: String, effect: Effect, @@ -317,6 +323,7 @@ impl Item { (ItemKind::Tool(a), ItemKind::Tool(b)) => a.superficially_eq(b), // TODO: Differentiate between lantern colors? (ItemKind::Lantern(_), ItemKind::Lantern(_)) => true, + (ItemKind::Glider(_), ItemKind::Glider(_)) => true, (ItemKind::Armor(a), ItemKind::Armor(b)) => a.superficially_eq(b), (ItemKind::Consumable { kind: a, .. }, ItemKind::Consumable { kind: b, .. }) => a == b, (ItemKind::Throwable { kind: a, .. }, ItemKind::Throwable { kind: b, .. }) => a == b, diff --git a/common/src/comp/inventory/slot.rs b/common/src/comp/inventory/slot.rs index 02de138f85..b199c7417e 100644 --- a/common/src/comp/inventory/slot.rs +++ b/common/src/comp/inventory/slot.rs @@ -18,6 +18,7 @@ pub enum EquipSlot { Mainhand, Offhand, Lantern, + Glider, } #[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)] @@ -57,6 +58,7 @@ impl EquipSlot { (Self::Mainhand, ItemKind::Tool(_)) => true, (Self::Offhand, ItemKind::Tool(_)) => true, (Self::Lantern, ItemKind::Lantern(_)) => true, + (Self::Glider, ItemKind::Glider(_)) => true, _ => false, } } @@ -103,6 +105,7 @@ fn loadout_replace( EquipSlot::Armor(ArmorSlot::Feet) => replace(&mut loadout.foot, item), EquipSlot::Armor(ArmorSlot::Tabard) => replace(&mut loadout.tabard, item), EquipSlot::Lantern => replace(&mut loadout.lantern, item), + EquipSlot::Glider => replace(&mut loadout.glider, item), EquipSlot::Mainhand => { replace(&mut loadout.active_item, item.map(ItemConfig::from)).map(|i| i.item) }, @@ -278,6 +281,7 @@ pub fn equip(slot: usize, inventory: &mut Inventory, loadout: &mut Loadout) { ArmorKind::Tabard(_) => ArmorSlot::Tabard, })), ItemKind::Lantern(_) => Some(EquipSlot::Lantern), + ItemKind::Glider(_) => Some(EquipSlot::Glider), _ => None, }); 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 eb4dd66d37..24d41c39ab 100644 --- a/common/src/loadout_builder.rs +++ b/common/src/loadout_builder.rs @@ -34,6 +34,7 @@ impl LoadoutBuilder { ring: None, neck: None, lantern: None, + glider: None, head: None, tabard: None, }) @@ -54,6 +55,9 @@ impl LoadoutBuilder { .lantern(Some(Item::new_from_asset_expect( "common.items.armor.starter.lantern", ))) + .glider(Some(Item::new_from_asset_expect( + "common.items.armor.starter.glider", + ))) } /// Default animal configuration @@ -85,6 +89,7 @@ impl LoadoutBuilder { ring: None, neck: None, lantern: None, + glider: None, head: None, tabard: None, }) @@ -170,6 +175,11 @@ impl LoadoutBuilder { self } + pub fn glider(mut self, item: Option) -> Self { + self.0.glider = item; + self + } + pub fn head(mut self, item: Option) -> Self { self.0.head = item; self 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 aaa583f374..1b50424c2e 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(_) => 135.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, } } @@ -91,7 +91,7 @@ fn basic_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) { pub fn handle_orientation(data: &JoinData, update: &mut StateUpdate, rate: f32) { // Set direction based on move direction - let ori_dir = if update.character.is_attack() || update.character.is_block() { + let ori_dir = if update.character.is_attack() | update.character.is_block() { data.inputs.look_dir.xy() } else if !data.inputs.move_dir.is_approx_zero() { data.inputs.move_dir @@ -176,6 +176,11 @@ pub fn handle_climb(data: &JoinData, update: &mut StateUpdate) { if data.inputs.climb.is_some() && data.physics.on_wall.is_some() && !data.physics.on_ground + && !data + .physics + .in_fluid + .map(|depth| depth > 1.0) + .unwrap_or(false) //&& update.vel.0.z < 0.0 && data.body.is_humanoid() && update.energy.current() > 100 diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index b499b3dd6f..88428fc3d7 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -317,7 +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(_)) => { + Some(common::comp::Body::Theropod(_)) => { "common.loot_tables.loot_table_animal_parts" }, Some(common::comp::Body::Dragon(_)) => "common.loot_tables.loot_table_weapon_rare", diff --git a/server/src/persistence/character/conversions.rs b/server/src/persistence/character/conversions.rs index 310a3a79b6..fea9f8af05 100644 --- a/server/src/persistence/character/conversions.rs +++ b/server/src/persistence/character/conversions.rs @@ -43,6 +43,7 @@ pub fn convert_items_to_database_items( ("neck", loadout.neck.as_ref()), ("head", loadout.head.as_ref()), ("tabard", loadout.tabard.as_ref()), + ("glider", loadout.glider.as_ref()), ]; let loadout = loadout @@ -254,6 +255,7 @@ pub fn convert_loadout_from_database_items(database_items: &[Item]) -> Result loadout = loadout.neck(Some(item)), "head" => loadout = loadout.head(Some(item)), "tabard" => loadout = loadout.tabard(Some(item)), + "glider" => loadout = loadout.glider(Some(item)), _ => { return Err(Error::ConversionError(format!( "Unknown loadout position on item: {}", diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 8cec2c23cd..6ba5401ac7 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -193,6 +193,7 @@ impl<'a> System<'a> for Sys { ring: None, neck: None, lantern: None, + glider: None, head: None, tabard: None, }, @@ -225,6 +226,7 @@ impl<'a> System<'a> for Sys { lantern: Some(comp::Item::new_from_asset_expect( "common.items.lantern.black_0", )), + glider: None, head: None, tabard: None, }, @@ -306,6 +308,7 @@ impl<'a> System<'a> for Sys { ring: None, neck: None, lantern: None, + glider: None, head: None, tabard: None, }; diff --git a/voxygen/src/anim/src/character/alpha.rs b/voxygen/src/anim/src/character/alpha.rs index 697c369581..f9cd1a33c5 100644 --- a/voxygen/src/anim/src/character/alpha.rs +++ b/voxygen/src/anim/src/character/alpha.rs @@ -48,14 +48,18 @@ impl Animation for AlphaAnimation { / (0.4 + 4.6 * ((anim_time as f32 * lab as f32 * 18.0).sin()).powf(2.0 as f32))) .sqrt()) * ((anim_time as f32 * lab as f32 * 18.0).sin()); + let axe = (((1.0) + / (0.05 + 0.95 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 8.0).sin()); + let staff = (((1.0) + / (0.05 + 0.95 * ((anim_time as f32 * lab as f32 * 10.0).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 10.0).sin()); let slower = (((1.0) / (0.0001 + 0.999 * ((anim_time as f32 * lab as f32 * 4.0).sin()).powf(2.0 as f32))) .sqrt()) * ((anim_time as f32 * lab as f32 * 4.0).sin()); - let slowax = (((5.0) - / (0.1 + 4.9 * ((anim_time as f32 * lab as f32 * 4.0 + 1.9).cos()).powf(2.0 as f32))) - .sqrt()) - * ((anim_time as f32 * lab as f32 * 4.0 + 1.9).cos()); match active_tool_kind { //TODO: Inventory @@ -216,51 +220,45 @@ impl Animation for AlphaAnimation { next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; }, Some(ToolKind::Axe(_)) => { - next.head.position = Vec3::new( - 0.0 + slowax * 2.0, - 0.0 + skeleton_attr.head.0 + slowax * -2.0, - skeleton_attr.head.1, - ); - next.head.orientation = Quaternion::rotation_z(slowax * 0.25) - * Quaternion::rotation_x(0.0 + slowax * 0.2) - * Quaternion::rotation_y(slowax * 0.2); + next.head.position = + Vec3::new(0.0, 0.0 + skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_z(0.1 + axe * 0.2) + * Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.2); next.head.scale = Vec3::one() * skeleton_attr.head_scale; next.chest.position = Vec3::new(0.0, 0.0, 7.0); - next.chest.orientation = Quaternion::rotation_z(slowax * 0.2) - * Quaternion::rotation_x(0.0 + slowax * 0.2) - * Quaternion::rotation_y(slowax * 0.2); + next.chest.orientation = Quaternion::rotation_z(0.2 + axe * 0.2); next.chest.scale = Vec3::one(); next.belt.position = Vec3::new(0.0, 0.0, -2.0); - next.belt.orientation = next.chest.orientation * -0.2; + next.belt.orientation = Quaternion::rotation_z(0.2 + axe * -0.1); next.shorts.position = Vec3::new(0.0, 0.0, -5.0); - next.shorts.orientation = next.chest.orientation * -0.15; + next.shorts.orientation = Quaternion::rotation_z(0.2 + axe * -0.2); - next.l_hand.position = Vec3::new(-4.0, 3.0, 2.0); - next.l_hand.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_z(3.14 - 0.3) - * Quaternion::rotation_y(-0.8); + next.l_hand.position = Vec3::new(-0.5, 0.0, 4.0); + next.l_hand.orientation = Quaternion::rotation_x(PI / 2.0) + * Quaternion::rotation_z(0.0) + * Quaternion::rotation_y(0.0); next.l_hand.scale = Vec3::one() * 1.08; - next.r_hand.position = Vec3::new(-2.5, 9.0, 0.0); - next.r_hand.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_z(3.14 - 0.3) - * Quaternion::rotation_y(-0.8); + next.r_hand.position = Vec3::new(0.5, 0.0, -2.5); + next.r_hand.orientation = Quaternion::rotation_x(PI / 2.0) + * Quaternion::rotation_z(0.0) + * Quaternion::rotation_y(0.0); next.r_hand.scale = Vec3::one() * 1.06; - next.main.position = Vec3::new(-6.0, 10.0, -5.0); - next.main.orientation = Quaternion::rotation_x(1.27) - * Quaternion::rotation_y(-0.3) - * Quaternion::rotation_z(-0.8); + next.main.position = Vec3::new(-0.0, -2.0, -1.0); + next.main.orientation = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); - next.lantern.orientation = Quaternion::rotation_x(slowax * -0.7 + 0.4) - * Quaternion::rotation_y(slowax * 0.4); + next.control.position = Vec3::new(2.0 + axe * -7.0, 11.0, 3.0); + next.control.orientation = Quaternion::rotation_x(1.6) + * Quaternion::rotation_y(-2.0 + axe * 0.5) + * Quaternion::rotation_z(PI * 0.4); + next.lantern.orientation = + Quaternion::rotation_x(0.4) * Quaternion::rotation_y(0.0); - next.control.position = Vec3::new(0.0, 0.0 + slowax * 8.2, 6.0); - next.control.orientation = Quaternion::rotation_x(0.8) - * Quaternion::rotation_y(-0.3) - * Quaternion::rotation_z(-0.7 + slowax * -1.9); - next.control.scale = Vec3::one(); next.torso.position = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0) @@ -352,10 +350,6 @@ impl Animation for AlphaAnimation { next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; } - //next.control.position = Vec3::new(-4.0, 3.0 + slower * 2.0, 5.0 + slower * - // 5.0); next.control.orientation = Quaternion::rotation_x() - // * Quaternion::rotation_y(0.0) - // * Quaternion::rotation_z(1.4); next.control.scale = Vec3::one(); next.control.position = Vec3::new(-8.0, 7.0, 1.0); next.control.orientation = Quaternion::rotation_x(-1.5 + slower * 1.5) @@ -368,44 +362,29 @@ impl Animation for AlphaAnimation { next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; }, Some(ToolKind::Staff(_)) => { - next.head.position = Vec3::new( - 0.0, - 0.0 + skeleton_attr.head.0, /* + decel * 0.8 */ - // Had some clipping issues - skeleton_attr.head.1, - ); - next.head.orientation = Quaternion::rotation_z(decel * 0.25) - * Quaternion::rotation_x(0.0 + decel * 0.1) - * Quaternion::rotation_y(decel * -0.1); - - next.chest.orientation = Quaternion::rotation_z(decel * -0.2) - * Quaternion::rotation_x(0.0 + decel * -0.2) - * Quaternion::rotation_y(decel * 0.2); - - next.belt.orientation = Quaternion::rotation_z(decel * -0.1) - * Quaternion::rotation_x(0.0 + decel * -0.1) - * Quaternion::rotation_y(decel * 0.1); - - next.shorts.position = Vec3::new(0.0, 0.0, -5.0); - next.shorts.orientation = Quaternion::rotation_z(decel * -0.08) - * Quaternion::rotation_x(0.0 + decel * -0.08) - * Quaternion::rotation_y(decel * 0.08); - next.l_hand.position = Vec3::new(0.0, 1.0, 0.0); - next.l_hand.orientation = Quaternion::rotation_x(1.27); + next.head.orientation = + Quaternion::rotation_x(staff * 0.2) * Quaternion::rotation_z(staff * 0.2); + next.l_hand.position = Vec3::new(11.0, 5.0, -4.0); + next.l_hand.orientation = + Quaternion::rotation_x(1.27) * Quaternion::rotation_y(0.0); next.l_hand.scale = Vec3::one() * 1.05; - next.r_hand.position = Vec3::new(0.0, 0.0, 10.0); - next.r_hand.orientation = Quaternion::rotation_x(1.27); + next.r_hand.position = Vec3::new(12.0, 5.5, 2.0); + next.r_hand.orientation = + Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.2); next.r_hand.scale = Vec3::one() * 1.05; - next.main.position = Vec3::new(0.0, 6.0, -4.0); - next.main.orientation = Quaternion::rotation_x(-0.3); + next.main.position = Vec3::new(12.0, 8.5, 13.2); + next.main.orientation = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(3.14) + * Quaternion::rotation_z(0.0); + next.chest.orientation = Quaternion::rotation_z(staff * 0.3); + next.belt.orientation = Quaternion::rotation_z(staff * 0.2); + next.shorts.orientation = Quaternion::rotation_z(staff * 0.4); - next.control.position = Vec3::new(-8.0 - slow * 1.0, 3.0 - slow * 5.0, 0.0); - next.control.orientation = Quaternion::rotation_x(-1.2) - * Quaternion::rotation_y(slow * 1.5) - * Quaternion::rotation_z(1.4 + slow * 0.5); + next.control.position = Vec3::new(-20.0, 5.0 + staff * 3.0, 1.0); + next.control.orientation = Quaternion::rotation_x(staff * 1.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); next.control.scale = Vec3::one(); - next.torso.position = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; - next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; }, Some(ToolKind::Shield(_)) => { next.head.position = Vec3::new( @@ -460,38 +439,15 @@ impl Animation for AlphaAnimation { next.second.orientation = Quaternion::rotation_x(0.0); }, Some(ToolKind::Debug(_)) => { - next.head.position = Vec3::new( - 0.0, - -2.0 + skeleton_attr.head.0 + decel * 0.8, - skeleton_attr.head.1, - ); - next.head.orientation = Quaternion::rotation_x(0.0); - next.head.scale = Vec3::one() * skeleton_attr.head_scale; - - next.chest.position = Vec3::new(0.0, 0.0, 7.0); - next.chest.orientation = Quaternion::rotation_z(decel * -0.2) - * Quaternion::rotation_x(0.0 + decel * -0.2) - * Quaternion::rotation_y(decel * 0.2); - - next.l_hand.position = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.l_hand.orientation = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(accel_med * -0.8) - * Quaternion::rotation_y(accel_med * -0.4); + next.l_hand.position = Vec3::new(-7.0, 4.0, 3.0); + next.l_hand.orientation = Quaternion::rotation_x(1.27) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); next.l_hand.scale = Vec3::one() * 1.01; - - next.r_hand.position = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, -2.0); - next.r_hand.orientation = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(accel_med * -0.8) - * Quaternion::rotation_y(accel_med * -0.4); - next.r_hand.scale = Vec3::one() * 1.01; - - next.main.position = - Vec3::new(-8.0 + accel_slow * 10.0, 8.0 + accel_fast * 3.0, 0.0); - next.main.orientation = Quaternion::rotation_z(-0.8) - * Quaternion::rotation_x(0.0 + accel_med * -0.8) - * Quaternion::rotation_y(0.0 + accel_med * -0.4); + next.main.position = Vec3::new(-5.0, 5.0, 23.0); + next.main.orientation = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(PI) + * Quaternion::rotation_y(0.0); next.main.scale = Vec3::one(); next.torso.position = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; next.torso.orientation = Quaternion::rotation_x(0.0); diff --git a/voxygen/src/anim/src/character/charge.rs b/voxygen/src/anim/src/character/charge.rs index 5589299236..3e8ec67db1 100644 --- a/voxygen/src/anim/src/character/charge.rs +++ b/voxygen/src/anim/src/character/charge.rs @@ -98,19 +98,17 @@ impl Animation for ChargeAnimation { match active_tool_kind { //TODO: Inventory Some(ToolKind::Staff(_)) => { - next.l_hand.position = Vec3::new(1.0, -2.0, -5.0); - next.l_hand.orientation = - Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + next.l_hand.position = Vec3::new(11.0, 5.0, -4.0); + next.l_hand.orientation = Quaternion::rotation_x(1.27); next.l_hand.scale = Vec3::one() * 1.05; - next.r_hand.position = Vec3::new(9.0, 1.0, 0.0); - next.r_hand.orientation = Quaternion::rotation_x(1.8) - * Quaternion::rotation_y(0.5) - * Quaternion::rotation_z(-0.27); + next.r_hand.position = Vec3::new(12.0, 5.5, 2.0); + next.r_hand.orientation = + Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.2); next.r_hand.scale = Vec3::one() * 1.05; - next.main.position = Vec3::new(9.2, 8.4, 13.2); - next.main.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(3.14 + 0.3) - * Quaternion::rotation_z(0.9); + next.main.position = Vec3::new(12.0, 8.5, 13.2); + next.main.orientation = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(3.14) + * Quaternion::rotation_z(0.0); next.control.position = Vec3::new( -7.0 + quick * 3.5 * (1.0 / (stopa + 0.1)), diff --git a/voxygen/src/anim/src/character/glidewield.rs b/voxygen/src/anim/src/character/glidewield.rs index c9e5bc36b1..70052d6647 100644 --- a/voxygen/src/anim/src/character/glidewield.rs +++ b/voxygen/src/anim/src/character/glidewield.rs @@ -370,6 +370,7 @@ impl Animation for GlideWieldAnimation { ); next.lantern.orientation = Quaternion::rotation_x(0.1) * Quaternion::rotation_y(0.1); next.lantern.scale = Vec3::one() * 0.65; + next.hold.scale = Vec3::one() * 0.0; next.torso.position = Vec3::new(0.0, 0.0, 0.0) * skeleton_attr.scaler; next.torso.orientation = Quaternion::rotation_x(0.0); diff --git a/voxygen/src/anim/src/character/shoot.rs b/voxygen/src/anim/src/character/shoot.rs index 1fe4dfc856..508d7cb367 100644 --- a/voxygen/src/anim/src/character/shoot.rs +++ b/voxygen/src/anim/src/character/shoot.rs @@ -66,19 +66,18 @@ impl Animation for ShootAnimation { match active_tool_kind { //TODO: Inventory Some(ToolKind::Staff(_)) => { - next.l_hand.position = Vec3::new(1.5, 0.5, -4.0); + next.l_hand.position = Vec3::new(11.0, 5.0, -4.0); next.l_hand.orientation = - Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + Quaternion::rotation_x(1.27) * Quaternion::rotation_y(0.0); next.l_hand.scale = Vec3::one() * 1.05; - next.r_hand.position = Vec3::new(8.0, 4.0, 2.0); - next.r_hand.orientation = Quaternion::rotation_x(1.8) - * Quaternion::rotation_y(0.5) - * Quaternion::rotation_z(-0.27); + next.r_hand.position = Vec3::new(12.0, 5.5, 2.0); + next.r_hand.orientation = + Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.2); next.r_hand.scale = Vec3::one() * 1.05; - next.main.position = Vec3::new(9.2, 8.4, 13.2); - next.main.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(3.14 + 0.3) - * Quaternion::rotation_z(0.9); + next.main.position = Vec3::new(12.0, 8.5, 13.2); + next.main.orientation = Quaternion::rotation_x(0.0) + * Quaternion::rotation_y(3.14) + * Quaternion::rotation_z(0.0); next.control.position = Vec3::new(-7.0, 6.0, 6.0 - exp * 5.0); next.control.orientation = Quaternion::rotation_x(exp * 1.3) diff --git a/voxygen/src/anim/src/character/wield.rs b/voxygen/src/anim/src/character/wield.rs index 375ce073b7..8ba6f64531 100644 --- a/voxygen/src/anim/src/character/wield.rs +++ b/voxygen/src/anim/src/character/wield.rs @@ -120,13 +120,10 @@ impl Animation for WieldAnimation { Quaternion::rotation_x(1.47) * Quaternion::rotation_y(0.3); next.r_hand.scale = Vec3::one() * 1.05; next.main.position = Vec3::new(0.0, 0.0, -3.0); - next.main.orientation = Quaternion::rotation_x(-0.1) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); + next.main.orientation = Quaternion::rotation_x(-0.1); next.control.position = Vec3::new(-7.0, 6.0, 6.0); next.control.orientation = Quaternion::rotation_x(u_slow * 0.15) - * Quaternion::rotation_y(0.0) * Quaternion::rotation_z(u_slowalt * 0.08); next.control.scale = Vec3::one(); }, @@ -136,10 +133,6 @@ impl Animation for WieldAnimation { let hand_scale = 1.12; next.control.position = Vec3::new(0.0, 0.0, 0.0); - //next.control.orientation = Quaternion::rotation_x(slow * 1.0); - // * Quaternion::rotation_y(0.0) - // * Quaternion::rotation_z(u_slowalt * 0.08); - // next.control.scale = Vec3::one(); next.l_hand.position = Vec3::new(0.0, 0.0, 0.0); next.l_hand.orientation = Quaternion::rotation_x(0.0 * PI) @@ -153,10 +146,6 @@ impl Animation for WieldAnimation { * Quaternion::rotation_z(0.0 * PI); next.l_control.position = Vec3::new(-7.0, 0.0, 0.0); - // next.l_control.orientation = Quaternion::rotation_x(u_slow * 0.15 + 1.0) - // * Quaternion::rotation_y(0.0) - // * Quaternion::rotation_z(u_slowalt * 0.08); - // next.l_control.scale = Vec3::one(); next.r_hand.position = Vec3::new(0.0, 0.0, 0.0); next.r_hand.orientation = Quaternion::rotation_x(0.0 * PI) @@ -171,10 +160,6 @@ impl Animation for WieldAnimation { next.second.scale = Vec3::one(); next.r_control.position = Vec3::new(7.0, 0.0, 0.0); - // next.r_control.orientation = Quaternion::rotation_x(0.0 * PI) - // * Quaternion::rotation_y(0.0 * PI) - // * Quaternion::rotation_z(0.0 * PI); - // next.r_control.scale = Vec3::one(); }, Some(ToolKind::Axe(_)) => { if velocity < 0.5 { @@ -234,9 +219,8 @@ impl Animation for WieldAnimation { next.r_hand.orientation = Quaternion::rotation_x(0.0) * Quaternion::rotation_y(0.0); next.r_hand.scale = Vec3::one() * 1.06; next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(-1.57) - * Quaternion::rotation_z(1.57); + next.main.orientation = + Quaternion::rotation_y(-1.57) * Quaternion::rotation_z(1.57); next.control.position = Vec3::new(6.0, 7.0, 1.0); next.control.orientation = Quaternion::rotation_x(0.3 + u_slow * 0.15) @@ -245,24 +229,21 @@ impl Animation for WieldAnimation { next.control.scale = Vec3::one(); }, Some(ToolKind::Staff(_)) => { - next.l_hand.position = Vec3::new(1.5, 0.5, -4.0); + next.l_hand.position = Vec3::new(11.0, 5.0, -4.0); next.l_hand.orientation = - Quaternion::rotation_x(1.47) * Quaternion::rotation_y(-0.3); + Quaternion::rotation_x(1.27) * Quaternion::rotation_y(0.0); next.l_hand.scale = Vec3::one() * 1.05; - next.r_hand.position = Vec3::new(8.0, 4.0, 2.0); - next.r_hand.orientation = Quaternion::rotation_x(1.8) - * Quaternion::rotation_y(0.5) - * Quaternion::rotation_z(-0.27); + next.r_hand.position = Vec3::new(12.0, 5.5, 2.0); + next.r_hand.orientation = + Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.2); next.r_hand.scale = Vec3::one() * 1.05; - next.main.position = Vec3::new(12.0, 8.4, 13.2); - next.main.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(3.14 + 0.3) - * Quaternion::rotation_z(0.9); + next.main.position = Vec3::new(12.0, 8.5, 13.2); + next.main.orientation = Quaternion::rotation_y(3.14); - next.control.position = Vec3::new(-14.0, 1.8, 3.0); - next.control.orientation = Quaternion::rotation_x(u_slow * 0.2) - * Quaternion::rotation_y(-0.2) - * Quaternion::rotation_z(u_slowalt * 0.1); + next.control.position = Vec3::new(-18.0, 1.0, 6.0); + next.control.orientation = Quaternion::rotation_x(-0.3 + u_slow * 0.1) + * Quaternion::rotation_y(0.15) + * Quaternion::rotation_z(u_slowalt * 0.08); next.control.scale = Vec3::one(); }, Some(ToolKind::Shield(_)) => { @@ -271,27 +252,15 @@ impl Animation for WieldAnimation { let hand_scale = 1.12; next.control.position = Vec3::new(0.0, 0.0, 0.0); - // next.control.orientation = Quaternion::rotation_x(u_slow * 0.15 + 1.0) - // * Quaternion::rotation_y(0.0) - // * Quaternion::rotation_z(u_slowalt * 0.08); - // next.control.scale = Vec3::one(); next.l_hand.position = Vec3::new(0.0, 0.0, 0.0); - next.l_hand.orientation = Quaternion::rotation_x(0.0 * PI) - * Quaternion::rotation_y(0.0 * PI) - * Quaternion::rotation_z(0.0 * PI); + next.l_hand.orientation = Quaternion::rotation_x(0.0 * PI); next.l_hand.scale = Vec3::one() * hand_scale; next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_x(0.0 * PI) - * Quaternion::rotation_y(0.0 * PI) - * Quaternion::rotation_z(0.0 * PI); + next.main.orientation = Quaternion::rotation_x(0.0 * PI); next.l_control.position = Vec3::new(-7.0, 0.0, 0.0); - // next.l_control.orientation = Quaternion::rotation_x(u_slow * 0.15 + 1.0) - // * Quaternion::rotation_y(0.0) - // * Quaternion::rotation_z(u_slowalt * 0.08); - // next.l_control.scale = Vec3::one(); next.r_hand.position = Vec3::new(0.0, 0.0, 0.0); next.r_hand.orientation = Quaternion::rotation_x(0.0 * PI) @@ -300,16 +269,10 @@ impl Animation for WieldAnimation { next.r_hand.scale = Vec3::one() * hand_scale; next.second.position = Vec3::new(0.0, 0.0, 0.0); - next.second.orientation = Quaternion::rotation_x(0.0 * PI) - * Quaternion::rotation_y(0.0 * PI) - * Quaternion::rotation_z(0.0 * PI); + next.second.orientation = Quaternion::rotation_x(0.0 * PI); next.second.scale = Vec3::one(); next.r_control.position = Vec3::new(7.0, 0.0, 0.0); - // next.r_control.orientation = Quaternion::rotation_x(0.0 * PI) - // * Quaternion::rotation_y(0.0 * PI) - // * Quaternion::rotation_z(0.0 * PI); - // next.r_control.scale = Vec3::one(); }, Some(ToolKind::Bow(_)) => { next.l_hand.position = Vec3::new(2.0, 1.5, 0.0); @@ -344,20 +307,14 @@ impl Animation for WieldAnimation { * Quaternion::rotation_y(0.0) * Quaternion::rotation_z(0.0); next.l_hand.scale = Vec3::one() * 1.01; - next.r_hand.position = Vec3::new(7.0, 2.5, -1.25); - next.r_hand.orientation = Quaternion::rotation_x(1.27) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(-0.3); - next.r_hand.scale = Vec3::one() * 1.01; - next.main.position = Vec3::new(5.0, 8.75, -2.0); - next.main.orientation = Quaternion::rotation_x(-0.3) - * Quaternion::rotation_y(-1.27) - * Quaternion::rotation_z(0.0); + next.main.position = Vec3::new(-5.0, 5.0, 23.0); + next.main.orientation = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(PI) + * Quaternion::rotation_y(0.0); next.main.scale = Vec3::one(); - next.control.position = Vec3::new(0.0, 6.0, 6.0); - next.control.orientation = - Quaternion::rotation_x(u_slow * 0.2) * Quaternion::rotation_z(u_slowalt * 0.1); - next.control.scale = Vec3::one(); + next.torso.position = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; + next.torso.orientation = Quaternion::rotation_x(0.0); + next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; }, Some(ToolKind::Farming(_)) => { if velocity < 0.5 { @@ -370,14 +327,10 @@ impl Animation for WieldAnimation { Quaternion::rotation_x(1.57) * Quaternion::rotation_y(0.0); next.l_hand.scale = Vec3::one() * 1.05; next.r_hand.position = Vec3::new(9.0, 1.0, 11.0); - next.r_hand.orientation = Quaternion::rotation_x(1.57) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(0.0); + next.r_hand.orientation = Quaternion::rotation_x(1.57); next.r_hand.scale = Vec3::one() * 1.05; next.main.position = Vec3::new(7.5, 7.5, 13.2); - next.main.orientation = Quaternion::rotation_x(0.0) - * Quaternion::rotation_y(3.14) - * Quaternion::rotation_z(0.0); + next.main.orientation = Quaternion::rotation_y(3.14); next.control.position = Vec3::new(-11.0 + slow * 2.0, 1.8, 4.0); next.control.orientation = Quaternion::rotation_x(u_slow * 0.1) 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/golem/alpha.rs b/voxygen/src/anim/src/golem/alpha.rs new file mode 100644 index 0000000000..b20487e2d7 --- /dev/null +++ b/voxygen/src/anim/src/golem/alpha.rs @@ -0,0 +1,199 @@ +use super::{ + super::{vek::*, Animation}, + GolemSkeleton, SkeletonAttr, +}; +use std::f32::consts::PI; + +pub struct AlphaAnimation; + +impl Animation for AlphaAnimation { + type Dependency = (f32, f64); + type Skeleton = GolemSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"golem_alpha\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "golem_alpha")] + + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (_velocity, global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let lab = 1.0; + + let slower = (((1.0) + / (0.05 + + 0.95 + * ((anim_time as f32 * lab as f32 * 8.0 - 0.5 * PI).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 8.0 - 0.5 * PI).sin()) + + 1.0; + let twist = (anim_time as f32 * lab as f32 * 4.0).sin() + 0.5; + + let random = ((((2.0 + * (((global_time as f32 - anim_time as f32) * 10.0) + - (((global_time as f32 - anim_time as f32) * 10.0).round()))) + .abs()) + * 10.0) + .round()) + / 10.0; + + let switch = if random > 0.5 { 1.0 } else { -1.0 }; + println!("{:?}", random); + if switch > 0.0 { + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) * 1.02; + next.head.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.2); + next.head.scale = Vec3::one() * 1.02; + + next.upper_torso.position = Vec3::new( + 0.0, + skeleton_attr.upper_torso.0, + skeleton_attr.upper_torso.1, + ) / 8.0; + next.upper_torso.orientation = + Quaternion::rotation_z(twist * 1.1) * Quaternion::rotation_x(0.0); + next.upper_torso.scale = Vec3::one() / 8.0; + + next.lower_torso.position = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1, + ); + next.lower_torso.orientation = + Quaternion::rotation_z(twist * -1.1) * Quaternion::rotation_x(0.0); + next.lower_torso.scale = Vec3::one(); + + next.shoulder_l.position = Vec3::new( + -skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2, + ); + next.shoulder_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.shoulder_l.scale = Vec3::one(); + + next.shoulder_r.position = Vec3::new( + skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2, + ); + next.shoulder_r.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(slower * 0.4); + next.shoulder_r.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + -skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.hand_l.scale = Vec3::one() * 1.02; + + next.hand_r.position = Vec3::new( + skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_r.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(slower * 0.35); + next.hand_r.scale = Vec3::one() * 1.02; + } else { + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) * 1.02; + next.head.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.2); + next.head.scale = Vec3::one() * 1.02; + + next.upper_torso.position = Vec3::new( + 0.0, + skeleton_attr.upper_torso.0, + skeleton_attr.upper_torso.1, + ) / 8.0; + next.upper_torso.orientation = + Quaternion::rotation_z(twist * -1.1) * Quaternion::rotation_x(0.0); + next.upper_torso.scale = Vec3::one() / 8.0; + + next.lower_torso.position = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1, + ); + next.lower_torso.orientation = + Quaternion::rotation_z(twist * 1.1) * Quaternion::rotation_x(0.0); + next.lower_torso.scale = Vec3::one(); + + next.shoulder_l.position = Vec3::new( + -skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2, + ); + next.shoulder_l.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(slower * 0.4); + next.shoulder_l.scale = Vec3::one(); + + next.shoulder_r.position = Vec3::new( + skeleton_attr.shoulder.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2, + ); + next.shoulder_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.shoulder_r.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + -skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_l.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_x(slower * 0.35); + next.hand_l.scale = Vec3::one() * 1.02; + + next.hand_r.position = Vec3::new( + skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.hand_r.scale = Vec3::one() * 1.02; + }; + /* + next.leg_l.position = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2, + ) * 1.02; + next.leg_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.leg_l.scale = Vec3::one() * 1.02; + + next.leg_r.position = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2, + ) * 1.02; + next.leg_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.leg_r.scale = Vec3::one() * 1.02; + + next.foot_l.position = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.foot_l.scale = Vec3::one(); + + next.foot_r.position = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.foot_r.scale = Vec3::one(); + */ + next.torso.position = Vec3::new(0.0, 0.0, 0.0); + next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.torso.scale = Vec3::one(); + next + } +} diff --git a/voxygen/src/anim/src/golem/idle.rs b/voxygen/src/anim/src/golem/idle.rs index da453d4629..c6c2d485b5 100644 --- a/voxygen/src/anim/src/golem/idle.rs +++ b/voxygen/src/anim/src/golem/idle.rs @@ -25,7 +25,7 @@ impl Animation for IdleAnimation { let mut next = (*skeleton).clone(); let lab = 1.0; - let torso = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); + let breathe = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); let look = Vec2::new( ((global_time + anim_time) as f32 / 8.0) @@ -43,7 +43,7 @@ impl Animation for IdleAnimation { next.head.position = Vec3::new( 0.0, skeleton_attr.head.0, - skeleton_attr.head.1 + torso * 0.2, + skeleton_attr.head.1 + breathe * 0.2, ) * 1.02; next.head.orientation = Quaternion::rotation_z(look.x * 0.6) * Quaternion::rotation_x(look.y * 0.6); @@ -52,17 +52,25 @@ impl Animation for IdleAnimation { next.upper_torso.position = Vec3::new( 0.0, skeleton_attr.upper_torso.0, - skeleton_attr.upper_torso.1 + torso * 0.5, + skeleton_attr.upper_torso.1 + breathe * 0.5, ) / 8.0; next.upper_torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); next.upper_torso.scale = Vec3::one() / 8.0; + next.lower_torso.position = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1 + breathe * -0.2, + ); + next.lower_torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.lower_torso.scale = Vec3::one(); + next.shoulder_l.position = Vec3::new( -skeleton_attr.shoulder.0, skeleton_attr.shoulder.1, skeleton_attr.shoulder.2, ); - next.shoulder_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.shoulder_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.2); next.shoulder_l.scale = Vec3::one(); next.shoulder_r.position = Vec3::new( @@ -70,29 +78,29 @@ impl Animation for IdleAnimation { skeleton_attr.shoulder.1, skeleton_attr.shoulder.2, ); - next.shoulder_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.shoulder_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.2); next.shoulder_r.scale = Vec3::one(); next.hand_l.position = Vec3::new( -skeleton_attr.hand.0, skeleton_attr.hand.1, - skeleton_attr.hand.2 + torso * 0.6, + skeleton_attr.hand.2 + breathe * 0.6, ); - next.hand_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.hand_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.2); next.hand_l.scale = Vec3::one() * 1.02; next.hand_r.position = Vec3::new( skeleton_attr.hand.0, skeleton_attr.hand.1, - skeleton_attr.hand.2 + torso * 0.6, + skeleton_attr.hand.2 + breathe * 0.6, ); - next.hand_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.2); next.hand_r.scale = Vec3::one() * 1.02; next.leg_l.position = Vec3::new( -skeleton_attr.leg.0, skeleton_attr.leg.1, - skeleton_attr.leg.2, + skeleton_attr.leg.2 + breathe * -0.2, ) * 1.02; next.leg_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); next.leg_l.scale = Vec3::one() * 1.02; @@ -100,7 +108,7 @@ impl Animation for IdleAnimation { next.leg_r.position = Vec3::new( skeleton_attr.leg.0, skeleton_attr.leg.1, - skeleton_attr.leg.2, + skeleton_attr.leg.2 + breathe * -0.2, ) * 1.02; next.leg_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); next.leg_r.scale = Vec3::one() * 1.02; @@ -108,18 +116,18 @@ impl Animation for IdleAnimation { next.foot_l.position = Vec3::new( -skeleton_attr.foot.0, skeleton_attr.foot.1, - skeleton_attr.foot.2, - ) / 8.0; + skeleton_attr.foot.2 + breathe * -0.2, + ); next.foot_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.foot_l.scale = Vec3::one() / 8.0; + next.foot_l.scale = Vec3::one(); next.foot_r.position = Vec3::new( skeleton_attr.foot.0, skeleton_attr.foot.1, - skeleton_attr.foot.2, - ) / 8.0; + skeleton_attr.foot.2 + breathe * -0.2, + ); next.foot_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.foot_r.scale = Vec3::one() / 8.0; + next.foot_r.scale = Vec3::one(); next.torso.position = Vec3::new(0.0, 0.0, 0.0); next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); diff --git a/voxygen/src/anim/src/golem/mod.rs b/voxygen/src/anim/src/golem/mod.rs index 8a39b74dec..75fb864941 100644 --- a/voxygen/src/anim/src/golem/mod.rs +++ b/voxygen/src/anim/src/golem/mod.rs @@ -1,9 +1,14 @@ +pub mod alpha; pub mod idle; pub mod jump; pub mod run; +pub mod shockwave; // Reexports -pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation}; +pub use self::{ + alpha::AlphaAnimation, idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation, + shockwave::ShockwaveAnimation, +}; use super::{make_bone, vek::*, FigureBoneData, Skeleton}; use common::comp::{self}; @@ -14,6 +19,7 @@ pub type Body = comp::golem::Body; skeleton_impls!(struct GolemSkeleton { + head, + upper_torso, + + lower_torso, + shoulder_l, + shoulder_r, + hand_l, @@ -29,7 +35,7 @@ impl Skeleton for GolemSkeleton { type Attr = SkeletonAttr; type Body = Body; - const BONE_COUNT: usize = 10; + const BONE_COUNT: usize = 11; #[cfg(feature = "use-dyn-lib")] const COMPUTE_FN: &'static [u8] = b"golem_compute_mats\0"; @@ -40,21 +46,25 @@ impl Skeleton for GolemSkeleton { buf: &mut [FigureBoneData; super::MAX_BONE_COUNT], ) -> Vec3 { let torso_mat = base_mat * Mat4::::from(self.torso); - let foot_l_mat = base_mat * Mat4::::from(self.foot_l); - let foot_r_mat = base_mat * Mat4::::from(self.foot_r); let upper_torso_mat = torso_mat * Mat4::::from(self.upper_torso); + let lower_torso_mat = upper_torso_mat * Mat4::::from(self.lower_torso); + let leg_l_mat = lower_torso_mat * Mat4::::from(self.leg_l); + let leg_r_mat = lower_torso_mat * Mat4::::from(self.leg_r); + let shoulder_l_mat = upper_torso_mat * Mat4::::from(self.shoulder_l); + let shoulder_r_mat = upper_torso_mat * Mat4::::from(self.shoulder_r); *(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [ make_bone(upper_torso_mat * Mat4::::from(self.head)), make_bone(upper_torso_mat), + make_bone(lower_torso_mat), make_bone(upper_torso_mat * Mat4::::from(self.shoulder_l)), make_bone(upper_torso_mat * Mat4::::from(self.shoulder_r)), - make_bone(upper_torso_mat * Mat4::::from(self.hand_l)), - make_bone(upper_torso_mat * Mat4::::from(self.hand_r)), - make_bone(foot_l_mat * Mat4::::from(self.leg_l)), - make_bone(foot_r_mat * Mat4::::from(self.leg_r)), - make_bone(foot_l_mat), - make_bone(foot_r_mat), + make_bone(shoulder_l_mat * Mat4::::from(self.hand_l)), + make_bone(shoulder_r_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() } @@ -63,6 +73,7 @@ impl Skeleton for GolemSkeleton { pub struct SkeletonAttr { head: (f32, f32), upper_torso: (f32, f32), + lower_torso: (f32, f32), shoulder: (f32, f32, f32), hand: (f32, f32, f32), leg: (f32, f32, f32), @@ -85,6 +96,7 @@ impl Default for SkeletonAttr { Self { head: (0.0, 0.0), upper_torso: (0.0, 0.0), + lower_torso: (0.0, 0.0), shoulder: (0.0, 0.0, 0.0), hand: (0.0, 0.0, 0.0), leg: (0.0, 0.0, 0.0), @@ -98,22 +110,25 @@ impl<'a> From<&'a Body> for SkeletonAttr { use comp::golem::Species::*; Self { head: match (body.species, body.body_type) { - (StoneGolem, _) => (0.0, 16.0), + (StoneGolem, _) => (0.0, 2.0), }, upper_torso: match (body.species, body.body_type) { - (StoneGolem, _) => (0.0, 33.0), + (StoneGolem, _) => (0.0, 34.5), + }, + lower_torso: match (body.species, body.body_type) { + (StoneGolem, _) => (0.0, -10.5), }, shoulder: match (body.species, body.body_type) { - (StoneGolem, _) => (8.0, -0.5, 7.5), + (StoneGolem, _) => (8.0, -1.5, 4.0), }, hand: match (body.species, body.body_type) { - (StoneGolem, _) => (9.5, -1.0, 4.5), + (StoneGolem, _) => (12.5, -1.0, -7.0), }, leg: match (body.species, body.body_type) { - (StoneGolem, _) => (-1.0, 0.0, 9.0), + (StoneGolem, _) => (4.0, 0.0, -3.5), }, foot: match (body.species, body.body_type) { - (StoneGolem, _) => (4.0, 0.5, 11.0), + (StoneGolem, _) => (3.5, 0.5, -9.5), }, } } diff --git a/voxygen/src/anim/src/golem/run.rs b/voxygen/src/anim/src/golem/run.rs index 63761bb1a2..2a9797dc7c 100644 --- a/voxygen/src/anim/src/golem/run.rs +++ b/voxygen/src/anim/src/golem/run.rs @@ -7,7 +7,7 @@ use std::f32::consts::PI; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (f32, f64); + type Dependency = (f32, Vec3, Vec3, f64); type Skeleton = GolemSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -17,53 +17,87 @@ impl Animation for RunAnimation { fn update_skeleton_inner( skeleton: &Self::Skeleton, - (_velocity, _global_time): Self::Dependency, + (_velocity, orientation, last_ori, _global_time): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let lab = 10.0; - - let belt = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); - - let foothoril = (anim_time as f32 * lab as f32 + PI * 1.4).sin(); - let foothorir = (anim_time as f32 * lab as f32 + PI * 0.4).sin(); - - let footvertl = (anim_time as f32 * lab as f32).sin().max(0.1); - let footvertr = (anim_time as f32 * lab as f32 + PI).sin().max(0.1); + let lab = 0.45; //.65 + let foothoril = (((1.0) + / (0.4 + + (0.6) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); + let foothorir = (((1.0) + / (0.4 + + (0.6) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + let footvertl = (anim_time as f32 * 16.0 * lab as f32).sin(); + let footvertr = (anim_time as f32 * 16.0 * lab as f32 + PI).sin(); let footrotl = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) + / (2.5 + + (2.5) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 + PI * 1.4).sin()); + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); let footrotr = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) + / (1.0 + + (4.0) + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * lab as f32 + PI * 0.4).sin()); + * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + let short = (anim_time as f32 * lab as f32 * 16.0).sin(); + let shortalt = (anim_time as f32 * lab as f32 * 16.0 + PI / 2.0).sin(); + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if ::vek::Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) * 1.02; - next.head.orientation = Quaternion::rotation_z(belt * -0.3) * Quaternion::rotation_x(0.3); + next.head.orientation = Quaternion::rotation_z(short * -0.3) * Quaternion::rotation_x(-0.2); next.head.scale = Vec3::one() * 1.02; next.upper_torso.position = Vec3::new( 0.0, skeleton_attr.upper_torso.0, - skeleton_attr.upper_torso.1 + belt * 1.0, + skeleton_attr.upper_torso.1 + short * 1.0, ) / 8.0; next.upper_torso.orientation = - Quaternion::rotation_z(belt * 0.40) * Quaternion::rotation_x(0.0); + Quaternion::rotation_z(tilt * -4.0 + short * 0.40) * Quaternion::rotation_x(0.0); next.upper_torso.scale = Vec3::one() / 8.0; + next.lower_torso.position = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1, + ); + next.lower_torso.orientation = Quaternion::rotation_z(tilt * 4.0 + shortalt * 0.2); + next.lower_torso.scale = Vec3::one(); + next.shoulder_l.position = Vec3::new( -skeleton_attr.shoulder.0, skeleton_attr.shoulder.1, skeleton_attr.shoulder.2, ); - next.shoulder_l.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(footrotl * -0.15); + next.shoulder_l.orientation = Quaternion::rotation_z(footrotl * 0.07) + * Quaternion::rotation_y(0.15) + * Quaternion::rotation_x(footrotl * -0.25); next.shoulder_l.scale = Vec3::one(); next.shoulder_r.position = Vec3::new( @@ -71,8 +105,9 @@ impl Animation for RunAnimation { skeleton_attr.shoulder.1, skeleton_attr.shoulder.2, ); - next.shoulder_r.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(footrotr * -0.15); + next.shoulder_r.orientation = Quaternion::rotation_z(footrotr * -0.07) + * Quaternion::rotation_y(-0.15) + * Quaternion::rotation_x(footrotr * -0.25); next.shoulder_r.scale = Vec3::one(); next.hand_l.position = Vec3::new( @@ -80,8 +115,9 @@ impl Animation for RunAnimation { skeleton_attr.hand.1, skeleton_attr.hand.2, ); - next.hand_l.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.3 + footrotl * -0.8); + next.hand_l.orientation = Quaternion::rotation_x(0.3 + footrotl * -0.06) + * Quaternion::rotation_y(0.1) + * Quaternion::rotation_z(-0.35 + footrotl * -0.1); next.hand_l.scale = Vec3::one() * 1.02; next.hand_r.position = Vec3::new( @@ -89,8 +125,9 @@ impl Animation for RunAnimation { skeleton_attr.hand.1, skeleton_attr.hand.2, ); - next.hand_r.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.3 + footrotr * -0.8); + next.hand_r.orientation = Quaternion::rotation_x(0.3 + footrotr * -0.06) + * Quaternion::rotation_y(-0.1) + * Quaternion::rotation_z(0.35 + footrotr * 0.1); next.hand_r.scale = Vec3::one() * 1.02; next.leg_l.position = Vec3::new( @@ -98,7 +135,9 @@ impl Animation for RunAnimation { skeleton_attr.leg.1, skeleton_attr.leg.2, ) * 1.02; - next.leg_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.leg_l.orientation = Quaternion::rotation_x(footrotl * 0.3) + * Quaternion::rotation_y(0.1) + * Quaternion::rotation_z(footrotl * -0.2); next.leg_l.scale = Vec3::one() * 1.02; next.leg_r.position = Vec3::new( @@ -107,27 +146,31 @@ impl Animation for RunAnimation { skeleton_attr.leg.2, ) * 1.02; - next.leg_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.leg_r.orientation = Quaternion::rotation_x(footrotr * 0.3) + * Quaternion::rotation_y(-0.1) + * Quaternion::rotation_z(footrotr * 0.2); next.leg_r.scale = Vec3::one() * 1.02; next.foot_l.position = Vec3::new( -skeleton_attr.foot.0, - skeleton_attr.foot.1 + foothoril * 8.0 + 3.0, - skeleton_attr.foot.2 + footvertl * 4.0, - ) / 8.0; - next.foot_l.orientation = Quaternion::rotation_x(footrotl * 0.7); - next.foot_l.scale = Vec3::one() / 8.0 * 0.98; + skeleton_attr.foot.1 + foothoril * 2.0, + skeleton_attr.foot.2 + (footvertl * 3.0).max(0.0), + ); + next.foot_l.orientation = + Quaternion::rotation_x(footrotl * 0.2) * Quaternion::rotation_y(-0.08); + next.foot_l.scale = Vec3::one() * 0.98; next.foot_r.position = Vec3::new( skeleton_attr.foot.0, - skeleton_attr.foot.1 + foothorir * 8.0 + 3.0, - skeleton_attr.foot.2 + footvertr * 4.0, - ) / 8.0; - next.foot_r.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(footrotr * 0.7); - next.foot_r.scale = Vec3::one() / 8.0 * 0.98; + skeleton_attr.foot.1 + foothorir * 2.0, + skeleton_attr.foot.2 + (footvertr * 3.0).max(0.0), + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(footrotr * 0.2) + * Quaternion::rotation_y(0.08); + next.foot_r.scale = Vec3::one() * 0.98; - next.torso.position = Vec3::new(0.0, 0.0, belt * 0.15); + next.torso.position = Vec3::new(0.0, 0.0, 0.0); next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.2); next.torso.scale = Vec3::one(); next diff --git a/voxygen/src/anim/src/golem/shockwave.rs b/voxygen/src/anim/src/golem/shockwave.rs new file mode 100644 index 0000000000..4268214e01 --- /dev/null +++ b/voxygen/src/anim/src/golem/shockwave.rs @@ -0,0 +1,136 @@ +use super::{ + super::{vek::*, Animation}, + GolemSkeleton, SkeletonAttr, +}; +use std::f32::consts::PI; + +pub struct ShockwaveAnimation; + +impl Animation for ShockwaveAnimation { + type Dependency = (f32, f64); + type Skeleton = GolemSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"golem_shockwave\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "golem_shockwave")] + + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (velocity, _global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let lab = 1.0; + let breathe = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); + let twist = anim_time as f32 * lab as f32 * 2.5; + + let slower = (((1.0) + / (0.00001 + + 0.9999 + * ((anim_time as f32 * lab as f32 * 2.0 - 0.5 * PI).sin()).powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * lab as f32 * 2.0 - 0.5 * PI).sin()) + + 1.0; + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) * 1.02; + next.head.orientation = + Quaternion::rotation_z((-twist * 2.0).max(-PI)) * Quaternion::rotation_x(0.0); + next.head.scale = Vec3::one() * 1.02; + + next.upper_torso.position = Vec3::new( + 0.0, + skeleton_attr.upper_torso.0, + skeleton_attr.upper_torso.1 + slower * -3.0 + breathe * 1.0, + ) / 8.0; + next.upper_torso.orientation = + Quaternion::rotation_z((twist * 2.0).min(PI)) * Quaternion::rotation_x(0.0); + next.upper_torso.scale = Vec3::one() / 8.0; + + next.lower_torso.position = Vec3::new( + 0.0, + skeleton_attr.lower_torso.0, + skeleton_attr.lower_torso.1 + slower * 1.0, + ); + next.lower_torso.orientation = + Quaternion::rotation_z((-twist * 2.0).max(-PI)) * Quaternion::rotation_x(0.0); + next.lower_torso.scale = Vec3::one(); + + next.shoulder_l.position = Vec3::new( + -skeleton_attr.shoulder.0 - 2.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2 - slower * 1.0, + ); + next.shoulder_l.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_y(0.6 + slower * -0.3); + next.shoulder_l.scale = Vec3::one(); + + next.shoulder_r.position = Vec3::new( + skeleton_attr.shoulder.0 + 2.0, + skeleton_attr.shoulder.1, + skeleton_attr.shoulder.2 - slower * 1.0, + ); + next.shoulder_r.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_y(-0.6 + slower * 0.3); + next.shoulder_r.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + -skeleton_attr.hand.0 - 1.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2 - slower * 0.5 + breathe * -1.0, + ); + next.hand_l.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_y(-0.6 + slower * 0.3); + next.hand_l.scale = Vec3::one() * 1.02; + + next.hand_r.position = Vec3::new( + skeleton_attr.hand.0 + 1.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2 - slower * 0.5 + breathe * -1.0, + ); + next.hand_r.orientation = + Quaternion::rotation_z(0.0) * Quaternion::rotation_y(0.6 + slower * -0.3); + next.hand_r.scale = Vec3::one() * 1.02; + if velocity < 0.5 { + next.leg_l.position = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + slower * -0.5, + ) * 1.02; + next.leg_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.leg_l.scale = Vec3::one() * 1.02; + + next.leg_r.position = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + slower * -0.5, + ) * 1.02; + next.leg_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.leg_r.scale = Vec3::one() * 1.02; + + next.foot_l.position = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2 + slower * 2.5 + breathe * -1.0, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.foot_l.scale = Vec3::one(); + + next.foot_r.position = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2 + slower * 2.5 + breathe * -1.0, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.foot_r.scale = Vec3::one(); + + next.torso.position = Vec3::new(0.0, 0.0, 0.0); + next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.torso.scale = Vec3::one(); + } else { + } + 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_low/alpha.rs b/voxygen/src/anim/src/quadruped_low/alpha.rs index 87eedd579b..49ecfe54c6 100644 --- a/voxygen/src/anim/src/quadruped_low/alpha.rs +++ b/voxygen/src/anim/src/quadruped_low/alpha.rs @@ -7,7 +7,7 @@ use std::f32::consts::PI; pub struct AlphaAnimation; impl Animation for AlphaAnimation { - type Dependency = f64; + type Dependency = (f32, f64); type Skeleton = QuadrupedLowSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -16,7 +16,7 @@ impl Animation for AlphaAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_low_alpha")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - _global_time: Self::Dependency, + (velocity, _global_time): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, @@ -66,39 +66,40 @@ impl Animation for AlphaAnimation { * Quaternion::rotation_x(-0.12) * Quaternion::rotation_z(short * 0.3); next.tail_rear.scale = Vec3::one() * 0.98; + if velocity < 1.0 { + next.foot_fl.position = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ); + next.foot_fl.orientation = Quaternion::rotation_y(short * 0.12); + next.foot_fl.scale = Vec3::one(); - next.foot_fl.position = Vec3::new( - -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2, - ); - next.foot_fl.orientation = Quaternion::rotation_y(short * 0.12); - next.foot_fl.scale = Vec3::one(); + next.foot_fr.position = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ); + next.foot_fr.orientation = Quaternion::rotation_y(short * 0.12); + next.foot_fr.scale = Vec3::one(); - next.foot_fr.position = Vec3::new( - skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2, - ); - next.foot_fr.orientation = Quaternion::rotation_y(short * 0.12); - next.foot_fr.scale = Vec3::one(); - - next.foot_bl.position = Vec3::new( - -skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2, - ); - next.foot_bl.orientation = Quaternion::rotation_y(short * 0.12); - next.foot_bl.scale = Vec3::one(); - - next.foot_br.position = Vec3::new( - skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2, - ); - next.foot_br.orientation = Quaternion::rotation_y(short * 0.12); - next.foot_br.scale = Vec3::one(); + next.foot_bl.position = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ); + next.foot_bl.orientation = Quaternion::rotation_y(short * 0.12); + next.foot_bl.scale = Vec3::one(); + next.foot_br.position = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ); + next.foot_br.orientation = Quaternion::rotation_y(short * 0.12); + next.foot_br.scale = Vec3::one(); + } else { + }; next } } diff --git a/voxygen/src/anim/src/quadruped_medium/alpha.rs b/voxygen/src/anim/src/quadruped_medium/alpha.rs index ae84f5f8ce..2a4f29261f 100644 --- a/voxygen/src/anim/src/quadruped_medium/alpha.rs +++ b/voxygen/src/anim/src/quadruped_medium/alpha.rs @@ -7,7 +7,7 @@ use std::f32::consts::PI; pub struct AlphaAnimation; impl Animation for AlphaAnimation { - type Dependency = f64; + type Dependency = (f32, f64); type Skeleton = QuadrupedMediumSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -16,7 +16,7 @@ impl Animation for AlphaAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_alpha")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - _global_time: Self::Dependency, + (velocity, _global_time): Self::Dependency, anim_time: f64, _rate: &mut f32, skeleton_attr: &SkeletonAttr, @@ -32,16 +32,14 @@ impl Animation for AlphaAnimation { .sqrt()) * ((anim_time as f32 * 4.0 + PI * 0.5).sin()); - next.head_upper.position = - Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); - next.head_upper.orientation = + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_y(short * -0.2) * Quaternion::rotation_x(0.1 + short * 0.2); - next.head_upper.scale = Vec3::one(); + next.head.scale = Vec3::one(); - next.head_lower.position = - Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); - next.head_lower.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.head_lower.scale = Vec3::one() * 1.02; + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.neck.scale = Vec3::one() * 1.02; next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); next.jaw.orientation = Quaternion::rotation_x(-0.3 + quick * 0.4); @@ -70,78 +68,80 @@ impl Animation for AlphaAnimation { next.ears.position = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); next.ears.orientation = Quaternion::rotation_x(0.0); next.ears.scale = Vec3::one() * 1.02; + if velocity < 1.0 { + next.leg_fl.position = Vec3::new( + -skeleton_attr.leg_f.0, + skeleton_attr.leg_f.1, + skeleton_attr.leg_f.2, + ); - next.leg_fl.position = Vec3::new( - -skeleton_attr.leg_f.0, - skeleton_attr.leg_f.1, - skeleton_attr.leg_f.2, - ); + next.leg_fl.orientation = + Quaternion::rotation_x(short * -0.1) * Quaternion::rotation_y(short * 0.15); + next.leg_fl.scale = Vec3::one(); - next.leg_fl.orientation = - Quaternion::rotation_x(short * -0.1) * Quaternion::rotation_y(short * 0.15); - next.leg_fl.scale = Vec3::one(); + next.leg_fr.position = Vec3::new( + skeleton_attr.leg_f.0, + skeleton_attr.leg_f.1, + skeleton_attr.leg_f.2, + ); + next.leg_fr.orientation = + Quaternion::rotation_x(short * 0.3) * Quaternion::rotation_y(short * -0.2); + next.leg_fr.scale = Vec3::one(); - next.leg_fr.position = Vec3::new( - skeleton_attr.leg_f.0, - skeleton_attr.leg_f.1, - skeleton_attr.leg_f.2, - ); - next.leg_fr.orientation = - Quaternion::rotation_x(short * 0.3) * Quaternion::rotation_y(short * -0.2); - next.leg_fr.scale = Vec3::one(); + next.leg_bl.position = Vec3::new( + -skeleton_attr.leg_b.0, + skeleton_attr.leg_b.1, + skeleton_attr.leg_b.2 + 1.0, + ); + next.leg_bl.orientation = + Quaternion::rotation_x(-0.1 + short * -0.2) * Quaternion::rotation_y(short * 0.2); + next.leg_bl.scale = Vec3::one(); - next.leg_bl.position = Vec3::new( - -skeleton_attr.leg_b.0, - skeleton_attr.leg_b.1, - skeleton_attr.leg_b.2 + 1.0, - ); - next.leg_bl.orientation = - Quaternion::rotation_x(-0.1 + short * -0.2) * Quaternion::rotation_y(short * 0.2); - next.leg_bl.scale = Vec3::one(); + next.leg_br.position = Vec3::new( + skeleton_attr.leg_b.0, + skeleton_attr.leg_b.1, + skeleton_attr.leg_b.2 + 1.0, + ); + next.leg_br.orientation = Quaternion::rotation_x(-0.1 + short * -0.2) + * Quaternion::rotation_y(0.1 + short * 0.2); + next.leg_br.scale = Vec3::one(); - next.leg_br.position = Vec3::new( - skeleton_attr.leg_b.0, - skeleton_attr.leg_b.1, - skeleton_attr.leg_b.2 + 1.0, - ); - next.leg_br.orientation = - Quaternion::rotation_x(-0.1 + short * -0.2) * Quaternion::rotation_y(0.1 + short * 0.2); - next.leg_br.scale = Vec3::one(); + next.foot_fl.position = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + short * -0.2, + ); + next.foot_fl.orientation = Quaternion::rotation_x(short * -0.05); + next.foot_fl.scale = Vec3::one(); - next.foot_fl.position = Vec3::new( - -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2 + short * -0.2, - ); - next.foot_fl.orientation = Quaternion::rotation_x(short * -0.05); - next.foot_fl.scale = Vec3::one(); + next.foot_fr.position = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ); + next.foot_fr.orientation = + Quaternion::rotation_x(short * -0.4) * Quaternion::rotation_y(short * 0.15); + next.foot_fr.scale = Vec3::one(); - next.foot_fr.position = Vec3::new( - skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2, - ); - next.foot_fr.orientation = - Quaternion::rotation_x(short * -0.4) * Quaternion::rotation_y(short * 0.15); - next.foot_fr.scale = Vec3::one(); + next.foot_bl.position = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2 + short * -0.8, + ); + next.foot_bl.orientation = + Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(short * 0.15); + next.foot_bl.scale = Vec3::one(); - next.foot_bl.position = Vec3::new( - -skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2 + short * -0.8, - ); - next.foot_bl.orientation = - Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(short * 0.15); - next.foot_bl.scale = Vec3::one(); - - next.foot_br.position = Vec3::new( - skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2, - ); - next.foot_br.orientation = - Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(short * 0.15); - next.foot_br.scale = Vec3::one(); + next.foot_br.position = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ); + next.foot_br.orientation = + Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(short * 0.15); + next.foot_br.scale = Vec3::one(); + } else { + }; next } } diff --git a/voxygen/src/anim/src/quadruped_medium/feed.rs b/voxygen/src/anim/src/quadruped_medium/feed.rs new file mode 100644 index 0000000000..4788b37b62 --- /dev/null +++ b/voxygen/src/anim/src/quadruped_medium/feed.rs @@ -0,0 +1,207 @@ +use super::{ + super::{vek::*, Animation}, + QuadrupedMediumSkeleton, SkeletonAttr, +}; +use std::{f32::consts::PI, ops::Mul}; + +pub struct FeedAnimation; + +impl Animation for FeedAnimation { + type Dependency = f64; + type Skeleton = QuadrupedMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"quadruped_medium_feed\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_feed")] + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + global_time: Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let slower = (anim_time as f32 * 1.0 + PI).sin(); + let slow = (anim_time as f32 * 3.5 + PI).sin(); + let fast = (anim_time as f32 * 5.0).sin(); + let faster = (anim_time as f32 * 14.0).sin(); + + let transition = (anim_time as f32).min(0.4) / 0.4; + + let look = Vec2::new( + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + let tailmove = Vec2::new( + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(7331.0) + .sin() + * 0.25, + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(1337.0) + .sin() + * 0.125, + ); + + if skeleton_attr.feed.0 { + next.head.position = Vec3::new( + 0.0, + skeleton_attr.head.0, + skeleton_attr.head.1 + slower * 0.2, + ); + next.head.orientation = Quaternion::rotation_z(0.3 * look.x) + * Quaternion::rotation_x( + fast * 0.05 + faster * 0.08 + 0.8 * skeleton_attr.feed.1 * transition, + ); + next.head.scale = Vec3::one(); + + next.neck.position = Vec3::new( + 0.0, + skeleton_attr.neck.0, + skeleton_attr.neck.1 + slower * 0.1 - 4.0 * transition, + ); + next.neck.orientation = + Quaternion::rotation_x(-2.5 * skeleton_attr.feed.1 * transition); + next.neck.scale = Vec3::one() * 1.02; + + next.jaw.position = Vec3::new( + 0.0, + skeleton_attr.jaw.0 - slower * 0.12, + skeleton_attr.jaw.1 + slow * 0.2 + 0.5, + ); + next.jaw.orientation = Quaternion::rotation_x((fast * 0.18 + faster * 0.26).min(0.0)); + next.jaw.scale = Vec3::one() * 1.02; + } else { + next.head.position = Vec3::new( + 0.0, + skeleton_attr.head.0, + skeleton_attr.head.1 + slower * 0.2, + ); + next.head.orientation = + Quaternion::rotation_z(0.3 * look.x) * Quaternion::rotation_x(0.3 * look.y); + next.head.scale = Vec3::one(); + + next.neck.position = Vec3::new( + 0.0, + skeleton_attr.neck.0, + skeleton_attr.neck.1 + slower * 0.1, + ); + next.neck.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.neck.scale = Vec3::one() * 1.02; + + next.jaw.position = Vec3::new( + 0.0, + skeleton_attr.jaw.0 - slower * 0.12, + skeleton_attr.jaw.1 + slow * 0.2 + 0.5, + ); + next.jaw.orientation = Quaternion::rotation_x(slow * 0.05 - 0.08); + next.jaw.scale = Vec3::one() * 1.02; + } + + next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); + next.tail.orientation = + Quaternion::rotation_z(0.0 + slow * 0.2 + tailmove.x) * Quaternion::rotation_x(0.0); + next.tail.scale = Vec3::one(); + + next.torso_front.position = Vec3::new( + 0.0, + skeleton_attr.torso_front.0, + skeleton_attr.torso_front.1 + slower * 0.3, + ) * skeleton_attr.scaler + / 11.0; + next.torso_front.orientation = Quaternion::rotation_y(slow * 0.02); + next.torso_front.scale = Vec3::one() * skeleton_attr.scaler / 11.0; + + next.torso_back.position = Vec3::new( + 0.0, + skeleton_attr.torso_back.0, + skeleton_attr.torso_back.1 + slower * 0.2, + ); + next.torso_back.orientation = Quaternion::rotation_y(-slow * 0.005) + * Quaternion::rotation_z(0.0) + * Quaternion::rotation_x(0.0); + next.torso_back.scale = Vec3::one() * 0.99; + + next.ears.position = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); + next.ears.orientation = Quaternion::rotation_x(0.0 + slower * 0.03); + next.ears.scale = Vec3::one() * 1.02; + + next.leg_fl.position = Vec3::new( + -skeleton_attr.leg_f.0, + skeleton_attr.leg_f.1, + skeleton_attr.leg_f.2 + slow * -0.15 + slower * -0.15, + ); + next.leg_fl.orientation = Quaternion::rotation_y(slow * -0.02); + next.leg_fl.scale = Vec3::one() * 1.02; + + next.leg_fr.position = Vec3::new( + skeleton_attr.leg_f.0, + skeleton_attr.leg_f.1, + skeleton_attr.leg_f.2 + slow * 0.15 + slower * -0.15, + ); + next.leg_fr.orientation = Quaternion::rotation_y(slow * -0.02); + next.leg_fr.scale = Vec3::one() * 1.02; + + next.leg_bl.position = Vec3::new( + -skeleton_attr.leg_b.0, + skeleton_attr.leg_b.1, + skeleton_attr.leg_b.2 + slower * -0.3, + ); + next.leg_bl.orientation = Quaternion::rotation_y(slow * -0.02); + next.leg_bl.scale = Vec3::one() * 1.02; + + next.leg_br.position = Vec3::new( + skeleton_attr.leg_b.0, + skeleton_attr.leg_b.1, + skeleton_attr.leg_b.2 + slower * -0.3, + ); + next.leg_br.orientation = Quaternion::rotation_y(slow * -0.02); + next.leg_br.scale = Vec3::one() * 1.02; + + next.foot_fl.position = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + slower * -0.2, + ); + next.foot_fl.orientation = Quaternion::rotation_x(0.0); + next.foot_fl.scale = Vec3::one() * 0.94; + + next.foot_fr.position = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + slower * -0.2, + ); + next.foot_fr.orientation = Quaternion::rotation_x(0.0); + next.foot_fr.scale = Vec3::one() * 0.94; + + next.foot_bl.position = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2 + slower * -0.2, + ); + next.foot_bl.orientation = Quaternion::rotation_x(0.0); + next.foot_bl.scale = Vec3::one() * 0.94; + + next.foot_br.position = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2 + slower * -0.2, + ); + next.foot_br.orientation = Quaternion::rotation_x(0.0); + next.foot_br.scale = Vec3::one() * 0.94; + + next + } +} diff --git a/voxygen/src/anim/src/quadruped_medium/idle.rs b/voxygen/src/anim/src/quadruped_medium/idle.rs index 193bb3aa6e..3285ba2bcb 100644 --- a/voxygen/src/anim/src/quadruped_medium/idle.rs +++ b/voxygen/src/anim/src/quadruped_medium/idle.rs @@ -51,29 +51,29 @@ impl Animation for IdleAnimation { * 0.125, ); - next.head_upper.position = Vec3::new( + next.head.position = Vec3::new( 0.0, - skeleton_attr.head_upper.0, - skeleton_attr.head_upper.1 + slower * 0.2, + skeleton_attr.head.0, + skeleton_attr.head.1 + slower * 0.2, ); - next.head_upper.orientation = + next.head.orientation = Quaternion::rotation_z(0.3 * look.x) * Quaternion::rotation_x(0.3 * look.y); - next.head_upper.scale = Vec3::one(); + next.head.scale = Vec3::one(); - next.head_lower.position = Vec3::new( + next.neck.position = Vec3::new( 0.0, - skeleton_attr.head_lower.0, - skeleton_attr.head_lower.1 + slower * 0.1, + skeleton_attr.neck.0, + skeleton_attr.neck.1 + slower * 0.1, ); - next.head_lower.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.head_lower.scale = Vec3::one() * 1.02; + next.neck.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + next.neck.scale = Vec3::one() * 1.02; next.jaw.position = Vec3::new( 0.0, skeleton_attr.jaw.0 - slower * 0.12, - skeleton_attr.jaw.1 + slow * 0.2, + skeleton_attr.jaw.1 + slow * 0.2 + 0.5, ); - next.jaw.orientation = Quaternion::rotation_x(slow * 0.05); + next.jaw.orientation = Quaternion::rotation_x(slow * 0.05 - 0.08); next.jaw.scale = Vec3::one() * 1.02; next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); diff --git a/voxygen/src/anim/src/quadruped_medium/jump.rs b/voxygen/src/anim/src/quadruped_medium/jump.rs index 5d70d11b3c..35640b8097 100644 --- a/voxygen/src/anim/src/quadruped_medium/jump.rs +++ b/voxygen/src/anim/src/quadruped_medium/jump.rs @@ -22,15 +22,13 @@ impl Animation for JumpAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.head_upper.position = - Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); - next.head_upper.orientation = Quaternion::rotation_z(0.4) * Quaternion::rotation_x(0.3); - next.head_upper.scale = Vec3::one(); + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_z(0.4) * Quaternion::rotation_x(0.3); + next.head.scale = Vec3::one(); - next.head_lower.position = - Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); - next.head_lower.orientation = Quaternion::rotation_z(0.2) * Quaternion::rotation_x(0.3); - next.head_lower.scale = Vec3::one() * 1.02; + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = Quaternion::rotation_z(0.2) * Quaternion::rotation_x(0.3); + next.neck.scale = Vec3::one() * 1.02; next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); next.jaw.orientation = Quaternion::rotation_x(-0.4); diff --git a/voxygen/src/anim/src/quadruped_medium/mod.rs b/voxygen/src/anim/src/quadruped_medium/mod.rs index 78311579d3..5212b1377a 100644 --- a/voxygen/src/anim/src/quadruped_medium/mod.rs +++ b/voxygen/src/anim/src/quadruped_medium/mod.rs @@ -1,11 +1,13 @@ pub mod alpha; +pub mod feed; pub mod idle; pub mod jump; pub mod run; // Reexports pub use self::{ - alpha::AlphaAnimation, idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation, + alpha::AlphaAnimation, feed::FeedAnimation, idle::IdleAnimation, jump::JumpAnimation, + run::RunAnimation, }; use super::{make_bone, vek::*, FigureBoneData, Skeleton}; @@ -15,8 +17,8 @@ use core::convert::TryFrom; pub type Body = comp::quadruped_medium::Body; skeleton_impls!(struct QuadrupedMediumSkeleton { - + head_upper, - + head_lower, + + head, + + neck, + jaw, + tail, + torso_front, @@ -48,21 +50,21 @@ impl Skeleton for QuadrupedMediumSkeleton { ) -> Vec3 { let torso_front_mat = base_mat * Mat4::::from(self.torso_front); let torso_back_mat = torso_front_mat * Mat4::::from(self.torso_back); - let head_lower_mat = torso_front_mat * Mat4::::from(self.head_lower); + let neck_mat = torso_front_mat * Mat4::::from(self.neck); let leg_fl_mat = torso_front_mat * Mat4::::from(self.leg_fl); let leg_fr_mat = torso_front_mat * Mat4::::from(self.leg_fr); let leg_bl_mat = torso_back_mat * Mat4::::from(self.leg_bl); let leg_br_mat = torso_back_mat * Mat4::::from(self.leg_br); - let head_upper_mat = head_lower_mat * Mat4::::from(self.head_upper); + let head_mat = neck_mat * Mat4::::from(self.head); *(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [ - make_bone(head_upper_mat), - make_bone(head_lower_mat), - make_bone(head_upper_mat * Mat4::::from(self.jaw)), + make_bone(head_mat), + make_bone(neck_mat), + make_bone(head_mat * Mat4::::from(self.jaw)), make_bone(torso_back_mat * Mat4::::from(self.tail)), make_bone(torso_front_mat), make_bone(torso_back_mat), - make_bone(head_upper_mat * Mat4::::from(self.ears)), + make_bone(head_mat * Mat4::::from(self.ears)), make_bone(leg_fl_mat), make_bone(leg_fr_mat), make_bone(leg_bl_mat), @@ -77,8 +79,8 @@ impl Skeleton for QuadrupedMediumSkeleton { } pub struct SkeletonAttr { - head_upper: (f32, f32), - head_lower: (f32, f32), + head: (f32, f32), + neck: (f32, f32), jaw: (f32, f32), tail: (f32, f32), torso_back: (f32, f32), @@ -89,9 +91,10 @@ pub struct SkeletonAttr { feet_f: (f32, f32, f32), feet_b: (f32, f32, f32), scaler: f32, - dampen: f32, - maximize: f32, + startangle: f32, tempo: f32, + spring: f32, + feed: (bool, f32), } impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { @@ -108,8 +111,8 @@ impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { impl Default for SkeletonAttr { fn default() -> Self { Self { - head_upper: (0.0, 0.0), - head_lower: (0.0, 0.0), + head: (0.0, 0.0), + neck: (0.0, 0.0), jaw: (0.0, 0.0), tail: (0.0, 0.0), torso_back: (0.0, 0.0), @@ -120,18 +123,19 @@ impl Default for SkeletonAttr { feet_f: (0.0, 0.0, 0.0), feet_b: (0.0, 0.0, 0.0), scaler: 0.0, - dampen: 0.0, - maximize: 0.0, + startangle: 0.0, tempo: 0.0, + spring: 0.0, + feed: (false, 0.0), } } } impl<'a> From<&'a Body> for SkeletonAttr { fn from(body: &'a Body) -> Self { - use comp::quadruped_medium::Species::*; + use comp::quadruped_medium::{BodyType::*, Species::*}; Self { - head_upper: match (body.species, body.body_type) { + head: match (body.species, body.body_type) { (Grolgar, _) => (0.0, -1.0), (Saber, _) => (0.0, -3.0), (Tuskram, _) => (0.0, 1.0), @@ -140,11 +144,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Tiger, _) => (2.0, 1.0), (Wolf, _) => (-0.5, 3.0), (Frostfang, _) => (1.0, -2.0), - (Mouflon, _) => (-2.5, 6.0), + (Mouflon, _) => (0.5, 1.5), (Catoblepas, _) => (-1.0, -6.5), (Bonerattler, _) => (-1.0, 2.5), + (Deer, Male) => (0.5, 3.5), + (Deer, Female) => (0.5, 3.5), + (Hirdrasil, _) => (0.0, 5.0), }, - head_lower: match (body.species, body.body_type) { + neck: match (body.species, body.body_type) { (Grolgar, _) => (1.0, -1.0), (Saber, _) => (1.0, 0.0), (Tuskram, _) => (1.0, 1.0), @@ -153,9 +160,11 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Tiger, _) => (0.0, 0.0), (Wolf, _) => (-4.5, 2.0), (Frostfang, _) => (2.0, 1.5), - (Mouflon, _) => (-1.0, 0.5), + (Mouflon, _) => (-1.0, 1.0), (Catoblepas, _) => (19.5, -2.0), (Bonerattler, _) => (7.0, -1.5), + (Deer, _) => (-0.5, 1.0), + (Hirdrasil, _) => (-1.0, 0.5), }, jaw: match (body.species, body.body_type) { (Grolgar, _) => (7.0, 1.5), @@ -166,9 +175,11 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Tiger, _) => (3.5, -4.0), (Wolf, _) => (5.0, -3.0), (Frostfang, _) => (4.0, -3.0), - (Mouflon, _) => (10.5, -4.0), + (Mouflon, _) => (6.0, 0.5), (Catoblepas, _) => (1.0, -4.0), (Bonerattler, _) => (3.0, -3.0), + (Deer, _) => (3.5, 2.0), + (Hirdrasil, _) => (2.5, 2.5), }, tail: match (body.species, body.body_type) { (Grolgar, _) => (-11.5, -0.5), @@ -176,25 +187,29 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Tuskram, _) => (-9.0, 2.0), (Lion, _) => (-11.0, 1.0), (Tarasque, _) => (-11.0, 0.0), - (Tiger, _) => (-13.5, -7.0), + (Tiger, _) => (-13.5, 3.0), (Wolf, _) => (-11.0, 0.0), (Frostfang, _) => (-7.0, -3.5), (Mouflon, _) => (-10.5, 3.0), (Catoblepas, _) => (-8.5, -2.0), (Bonerattler, _) => (-10.0, 1.5), + (Deer, _) => (-8.5, 0.5), + (Hirdrasil, _) => (-11.0, 2.0), }, torso_front: match (body.species, body.body_type) { (Grolgar, _) => (10.0, 13.0), (Saber, _) => (14.0, 14.0), (Tuskram, _) => (10.0, 14.5), - (Lion, _) => (10.0, 14.0), + (Lion, _) => (10.0, 12.5), (Tarasque, _) => (11.5, 18.5), - (Tiger, _) => (10.0, 14.0), + (Tiger, _) => (10.0, 13.0), (Wolf, _) => (12.0, 13.0), (Frostfang, _) => (9.0, 11.5), (Mouflon, _) => (11.0, 13.5), (Catoblepas, _) => (7.5, 19.5), (Bonerattler, _) => (6.0, 12.5), + (Deer, _) => (11.0, 13.5), + (Hirdrasil, _) => (11.0, 14.5), }, torso_back: match (body.species, body.body_type) { (Grolgar, _) => (-10.0, 1.5), @@ -202,12 +217,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Tuskram, _) => (-12.5, -2.0), (Lion, _) => (-12.0, -0.5), (Tarasque, _) => (-14.0, -1.0), - (Tiger, _) => (-13.0, 0.0), + (Tiger, _) => (-13.0, -0.5), (Wolf, _) => (-12.5, 1.0), (Frostfang, _) => (-10.5, 0.0), (Mouflon, _) => (-8.5, -0.5), (Catoblepas, _) => (-8.5, -4.5), (Bonerattler, _) => (-5.0, 0.0), + (Deer, _) => (-9.0, 0.5), + (Hirdrasil, _) => (-9.0, -0.5), }, ears: match (body.species, body.body_type) { (Grolgar, _) => (5.0, 8.0), @@ -221,62 +238,72 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mouflon, _) => (2.5, 5.0), (Catoblepas, _) => (11.0, -3.0), (Bonerattler, _) => (2.0, 3.5), + (Deer, _) => (2.5, 5.0), + (Hirdrasil, _) => (2.5, 5.0), }, leg_f: match (body.species, body.body_type) { - (Grolgar, _) => (-7.0, 4.0, 0.0), + (Grolgar, _) => (7.5, -5.5, -1.0), (Saber, _) => (7.0, -4.0, -3.5), - (Tuskram, _) => (6.0, -6.5, -0.5), - (Lion, _) => (6.5, -6.5, -2.0), + (Tuskram, _) => (6.0, -6.5, -4.0), + (Lion, _) => (6.5, -6.5, -1.5), (Tarasque, _) => (7.0, -8.0, -6.0), - (Tiger, _) => (6.0, -5.0, -3.0), - (Wolf, _) => (4.5, -6.5, -1.0), + (Tiger, _) => (6.0, -6.0, -1.5), + (Wolf, _) => (4.5, -6.5, -1.5), (Frostfang, _) => (5.5, -5.5, -2.0), - (Mouflon, _) => (4.0, -5.0, -5.0), - (Catoblepas, _) => (7.0, 2.0, -6.0), + (Mouflon, _) => (4.0, -5.0, -4.0), + (Catoblepas, _) => (7.0, 2.0, -5.0), (Bonerattler, _) => (5.5, 5.0, -4.0), + (Deer, _) => (3.5, -4.5, -3.5), + (Hirdrasil, _) => (4.5, -5.0, -2.5), }, leg_b: match (body.species, body.body_type) { - (Grolgar, _) => (6.0, -6.5, -5.5), + (Grolgar, _) => (6.0, -6.5, -4.0), (Saber, _) => (6.0, -7.0, -3.5), - (Tuskram, _) => (5.0, -5.5, -3.5), - (Lion, _) => (6.0, -6.0, -2.0), + (Tuskram, _) => (5.0, -4.5, -2.5), + (Lion, _) => (6.0, -5.0, -1.5), (Tarasque, _) => (6.0, -6.5, -6.5), - (Tiger, _) => (6.0, -7.5, -3.0), - (Wolf, _) => (5.0, -6.5, -2.5), + (Tiger, _) => (6.0, -7.0, -1.0), + (Wolf, _) => (5.0, -6.5, -3.0), (Frostfang, _) => (3.5, -4.5, -2.0), - (Mouflon, _) => (3.5, -8.0, -4.5), + (Mouflon, _) => (3.5, -8.0, -3.5), (Catoblepas, _) => (6.0, -2.5, -2.5), (Bonerattler, _) => (6.0, -8.0, -4.0), + (Deer, _) => (3.0, -6.5, -3.5), + (Hirdrasil, _) => (4.0, -6.5, -3.0), }, feet_f: match (body.species, body.body_type) { - (Grolgar, _) => (0.0, -9.0, -7.0), + (Grolgar, _) => (0.0, 0.0, -4.0), (Saber, _) => (1.0, -3.5, -2.5), - (Tuskram, _) => (0.5, 0.5, -9.0), - (Lion, _) => (0.0, 0.0, -7.0), + (Tuskram, _) => (0.5, 0.5, -3.0), + (Lion, _) => (0.5, 0.5, -3.5), (Tarasque, _) => (1.0, 0.0, -3.0), - (Tiger, _) => (0.5, 0.0, -5.0), + (Tiger, _) => (0.5, 0.0, -4.5), (Wolf, _) => (0.5, 0.0, -2.0), (Frostfang, _) => (0.5, 1.5, -3.5), - (Mouflon, _) => (-0.5, -0.5, -1.5), - (Catoblepas, _) => (1.0, 4.0, -3.0), + (Mouflon, _) => (-0.5, -0.5, -3.0), + (Catoblepas, _) => (1.0, 0.0, -6.0), (Bonerattler, _) => (-0.5, -3.0, -2.5), + (Deer, _) => (-0.5, -0.5, -2.5), + (Hirdrasil, _) => (-0.5, -3.0, -3.5), }, feet_b: match (body.species, body.body_type) { - (Grolgar, _) => (0.0, 0.0, -5.0), + (Grolgar, _) => (0.5, -1.5, -3.0), (Saber, _) => (1.0, -1.0, -1.0), - (Tuskram, _) => (0.5, 0.0, -3.0), - (Lion, _) => (0.5, 0.5, -5.5), + (Tuskram, _) => (0.5, -1.0, -2.5), + (Lion, _) => (0.5, -1.0, -3.0), (Tarasque, _) => (1.5, -1.0, -2.5), - (Tiger, _) => (1.0, 0.5, -4.0), + (Tiger, _) => (0.5, -1.0, -4.0), (Wolf, _) => (0.0, -1.0, -1.5), (Frostfang, _) => (0.0, -1.5, -3.5), - (Mouflon, _) => (-1.0, 0.0, -2.5), - (Catoblepas, _) => (0.5, 0.5, -3.0), + (Mouflon, _) => (-1.0, 0.0, -0.5), + (Catoblepas, _) => (0.5, 0.5, -4.0), (Bonerattler, _) => (0.0, 3.0, -2.5), + (Deer, _) => (-1.0, -0.5, -2.0), + (Hirdrasil, _) => (-1.0, -2.0, -4.5), }, scaler: match (body.species, body.body_type) { (Grolgar, _) => (1.3), - (Saber, _) => (0.9), + (Saber, _) => (1.1), (Tuskram, _) => (1.2), (Lion, _) => (1.3), (Tarasque, _) => (1.3), @@ -286,32 +313,24 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mouflon, _) => (1.0), (Catoblepas, _) => (1.3), (Bonerattler, _) => (1.0), + (Deer, _) => (1.0), + (Hirdrasil, _) => (1.0), }, - dampen: match (body.species, body.body_type) { - (Grolgar, _) => (0.5), - (Saber, _) => (0.5), - (Tuskram, _) => (0.6), - (Lion, _) => (0.8), - (Tarasque, _) => (0.6), - (Tiger, _) => (0.6), - (Wolf, _) => (1.0), - (Frostfang, _) => (1.0), - (Mouflon, _) => (1.0), - (Catoblepas, _) => (0.6), - (Bonerattler, _) => (0.6), - }, - maximize: match (body.species, body.body_type) { - (Grolgar, _) => (2.0), - (Saber, _) => (1.5), - (Tuskram, _) => (1.0), - (Lion, _) => (1.1), - (Tarasque, _) => (1.8), - (Tiger, _) => (1.8), - (Wolf, _) => (1.0), - (Frostfang, _) => (1.2), - (Mouflon, _) => (1.1), - (Catoblepas, _) => (0.9), - (Bonerattler, _) => (0.8), + startangle: match (body.species, body.body_type) { + //changes the default angle of front feet + (Grolgar, _) => (-0.3), + (Saber, _) => (-0.2), + (Tuskram, _) => (0.3), + (Lion, _) => (0.2), + (Tarasque, _) => (-0.5), + (Tiger, _) => (0.0), + (Wolf, _) => (0.0), + (Frostfang, _) => (0.0), + (Mouflon, _) => (0.0), + (Catoblepas, _) => (-0.5), + (Bonerattler, _) => (-0.7), + (Deer, _) => (0.0), + (Hirdrasil, _) => (0.0), }, tempo: match (body.species, body.body_type) { (Grolgar, _) => (0.95), @@ -325,6 +344,30 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Mouflon, _) => (0.85), (Catoblepas, _) => (0.8), (Bonerattler, _) => (1.0), + (Deer, _) => (0.85), + (Hirdrasil, _) => (0.85), + }, + spring: match (body.species, body.body_type) { + (Grolgar, _) => (1.0), + (Saber, _) => (0.9), + (Tuskram, _) => (0.9), + (Lion, _) => (1.0), + (Tarasque, _) => (1.0), + (Tiger, _) => (1.0), + (Wolf, _) => (1.2), + (Frostfang, _) => (1.0), + (Mouflon, _) => (0.9), + (Catoblepas, _) => (0.7), + (Bonerattler, _) => (1.1), + (Deer, _) => (0.9), + (Hirdrasil, _) => (1.1), + }, + feed: match (body.species, body.body_type) { + (Tuskram, _) => (true, 0.5), + (Mouflon, _) => (true, 1.0), + (Deer, _) => (true, 1.0), + (Hirdrasil, _) => (true, 0.9), + (_, _) => (false, 0.0), }, } } diff --git a/voxygen/src/anim/src/quadruped_medium/run.rs b/voxygen/src/anim/src/quadruped_medium/run.rs index 8e12e0ee01..e4e4d2ca4a 100644 --- a/voxygen/src/anim/src/quadruped_medium/run.rs +++ b/voxygen/src/anim/src/quadruped_medium/run.rs @@ -2,7 +2,7 @@ use super::{ super::{vek::*, Animation}, QuadrupedMediumSkeleton, SkeletonAttr, }; -use std::f32::consts::PI; +use std::{f32::consts::PI, ops::Mul}; pub struct RunAnimation; @@ -16,7 +16,7 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_medium_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, + (velocity, orientation, last_ori, global_time, avg_vel): Self::Dependency, anim_time: f64, rate: &mut f32, skeleton_attr: &SkeletonAttr, @@ -24,40 +24,64 @@ impl Animation for RunAnimation { let mut next = (*skeleton).clone(); let speed = Vec2::::from(velocity).magnitude(); *rate = 1.0; - let lab = 0.6; //6 - - let speedmult = if speed > 8.0 { - 1.2 * (1.0 * skeleton_attr.tempo) - } else { - 0.9 * (1.0 * skeleton_attr.tempo) - }; - + //let increasefreqtest = (((1.0/speed)*3.0).round()).min(5.0); + let lab = 0.72; //0.72 + let amplitude = (speed / 24.0).max(0.25); + let amplitude2 = (speed * 1.4 / 24.0).max(0.6); + let amplitude3 = (speed / 24.0).max(0.35); + let speedmult = skeleton_attr.tempo; + let canceler = speed / 24.0; let short = (((1.0) / (0.72 + 0.28 - * ((anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.0).sin()) - .powf(2.0 as f32))) + * ((anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15 - 0.5) + .sin()) + .powf(2.0 as f32))) .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.0).sin()); + * ((anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15 - 0.5).sin()); // + let shortalt = + (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * 3.0 / 8.0 - 0.5).sin(); + let look = Vec2::new( + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); - let shortalt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.5).sin(); + let speedadjust = if speed < 5.0 { 0.0 } else { speed / 24.0 }; + let shift1 = speedadjust - PI / 2.0 - speedadjust * PI * 3.0 / 4.0; + let shift2 = speedadjust + PI / 2.0 + speedadjust * PI / 2.0; + let shift3 = speedadjust + PI / 4.0 - speedadjust * PI / 4.0; + let shift4 = speedadjust - PI * 3.0 / 4.0 + speedadjust * PI / 2.0; - let footvert = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.0).sin(); - let footvertt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.4).sin(); - let footvertalt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.2).sin(); - let footverttalt = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.6).sin(); - - let footvertf = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.3).sin(); - let footverttf = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.7).sin(); - let footvertaltf = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.5).sin(); - let footverttaltf = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.9).sin(); - - let footvertfslow = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 0.6).sin(); - let footverttfslow = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.0).sin(); - let footvertaltfslow = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 1.8).sin(); - let footverttaltfslow = (anim_time as f32 * 16.0 * lab as f32 * speedmult + PI * 2.2).sin(); + //FL + let foot1a = + (anim_time as f32 * (16.0) * lab as f32 * speedmult + 0.0 + canceler * 0.05 + shift1) + .sin(); //1.5 + let foot1b = + (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.1 + canceler * 0.05 + shift1) + .sin(); //1.9 + //FR + let foot2a = (anim_time as f32 * (16.0) * lab as f32 * speedmult + shift2).sin(); //1.2 + let foot2b = (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.1 + shift2).sin(); //1.6 + //BL + let foot3a = (anim_time as f32 * (16.0) * lab as f32 * speedmult + shift3).sin(); //0.0 + let foot3b = (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.57 + shift3).sin(); //0.4 + //BR + let foot4a = + (anim_time as f32 * (16.0) * lab as f32 * speedmult + 0.0 + canceler * 0.05 + shift4) + .sin(); //0.3 + let foot4b = + (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.57 + canceler * 0.05 + shift4) + .sin(); //0.7 // let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -73,253 +97,144 @@ impl Animation for RunAnimation { 0.0 } * 1.3; let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); - if speed < 8.0 { - //Trot - next.head_upper.position = - Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); - next.head_upper.orientation = - Quaternion::rotation_x(short * -0.03 - 0.1 + x_tilt * -0.5) - * Quaternion::rotation_z(tilt * -1.2); - next.head_upper.scale = Vec3::one(); - next.head_lower.position = - Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); - next.head_lower.orientation = Quaternion::rotation_z(tilt * -0.8) - * Quaternion::rotation_x(short * -0.05 + x_tilt * -0.5); - next.head_lower.scale = Vec3::one() * 1.02; + //Gallop + next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1); + next.head.orientation = Quaternion::rotation_x( + look.y * 0.3 / ((canceler).max(0.5)) + amplitude * short * -0.03 - 0.1, + ) * Quaternion::rotation_z( + look.x * 0.3 / ((canceler).max(0.5)) + tilt * -1.2, + ) * Quaternion::rotation_y(tilt * 0.8); + 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_x(0.0); - next.jaw.scale = Vec3::one() * 1.02; + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = Quaternion::rotation_z(tilt * -0.8) + * Quaternion::rotation_x(amplitude * short * -0.05) + * Quaternion::rotation_y(tilt * 0.3); + next.neck.scale = Vec3::one() * 1.02; - next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); - next.tail.orientation = - Quaternion::rotation_x(shortalt * 0.3) * Quaternion::rotation_z(tilt * 1.5); - next.tail.scale = Vec3::one(); + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(0.0); + next.jaw.scale = Vec3::one() * 1.02; - next.torso_front.position = Vec3::new( - 0.0, - skeleton_attr.torso_front.0, - skeleton_attr.torso_front.1 + shortalt * 1.0 + x_tilt, - ) * skeleton_attr.scaler - / 11.0; - next.torso_front.orientation = Quaternion::rotation_x(short * 0.03 + x_tilt) - * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z(tilt * -1.5); - next.torso_front.scale = Vec3::one() * skeleton_attr.scaler / 11.0; + next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); + next.tail.orientation = + Quaternion::rotation_x(amplitude * shortalt * 0.3) * Quaternion::rotation_z(tilt * 1.5); + next.tail.scale = Vec3::one(); - next.torso_back.position = Vec3::new( - 0.0, - skeleton_attr.torso_back.0, - skeleton_attr.torso_back.1 + shortalt * 0.04 - 0.2, - ); - next.torso_back.orientation = - Quaternion::rotation_x(short * 0.06) * Quaternion::rotation_z(tilt * 1.8); - next.torso_back.scale = Vec3::one(); + next.torso_front.position = Vec3::new( + 0.0, + skeleton_attr.torso_front.0, + skeleton_attr.torso_front.1 + + canceler * 1.0 + + canceler * shortalt * 2.5 * skeleton_attr.spring + + x_tilt * 10.0 * canceler, + ) * skeleton_attr.scaler + / 11.0; + next.torso_front.orientation = Quaternion::rotation_x( + (amplitude * (short * -0.13).max(-0.2)) * skeleton_attr.spring + + x_tilt * (canceler * 6.0).min(1.0), + ) * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(tilt * -1.5); + next.torso_front.scale = Vec3::one() * skeleton_attr.scaler / 11.0; - next.ears.position = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); - next.ears.orientation = Quaternion::rotation_x(shortalt * 0.04 + 0.2); - next.ears.scale = Vec3::one() * 1.02; + next.torso_back.position = Vec3::new( + 0.0, + skeleton_attr.torso_back.0, + skeleton_attr.torso_back.1 + amplitude * shortalt * 0.2 - 0.2, + ); + next.torso_back.orientation = Quaternion::rotation_x(amplitude * short * -0.1) + * Quaternion::rotation_z(tilt * 1.8) + * Quaternion::rotation_y(tilt * 0.6); + next.torso_back.scale = Vec3::one(); - next.leg_fl.position = Vec3::new( - -skeleton_attr.leg_f.0, - skeleton_attr.leg_f.1 + footvertaltfslow * -1.4, - skeleton_attr.leg_f.2 + 1.0 + footverttaltfslow * -0.3, - ); - next.leg_fl.orientation = Quaternion::rotation_x(footverttaltfslow * -0.35) - * Quaternion::rotation_z(tilt * -0.5); - next.leg_fl.scale = Vec3::one() * 1.02; + next.ears.position = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); + next.ears.orientation = Quaternion::rotation_x(amplitude * shortalt * 0.2 + 0.2); + next.ears.scale = Vec3::one() * 1.02; - next.leg_fr.position = Vec3::new( - skeleton_attr.leg_f.0, - skeleton_attr.leg_f.1 + footvertalt * -1.4, - skeleton_attr.leg_f.2 + 1.0 + footverttalt * -0.3, - ); - next.leg_fr.orientation = - Quaternion::rotation_x(footverttalt * -0.35) * Quaternion::rotation_z(tilt * -0.5); - next.leg_fr.scale = Vec3::one() * 1.02; - - next.leg_bl.position = Vec3::new( - -skeleton_attr.leg_b.0, - skeleton_attr.leg_b.1 + footvertalt * -1.0, - skeleton_attr.leg_b.2 + 1.0 + footverttalt * -0.3, - ); - next.leg_bl.orientation = - Quaternion::rotation_x(footverttalt * -0.2) * Quaternion::rotation_z(tilt * -1.5); - next.leg_bl.scale = Vec3::one() * 1.02; - - next.leg_br.position = Vec3::new( - skeleton_attr.leg_b.0, - skeleton_attr.leg_b.1 + footvertaltfslow * -1.0, - skeleton_attr.leg_b.2 + 1.0 + footverttaltfslow * -0.3, - ); - next.leg_br.orientation = Quaternion::rotation_x(footverttaltfslow * -0.2) - * Quaternion::rotation_z(tilt * -1.5); - next.leg_br.scale = Vec3::one() * 1.02; - - next.foot_fl.position = Vec3::new( - -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2 + ((footvertfslow * -1.0 * skeleton_attr.maximize).max(0.0)), - ); - next.foot_fl.orientation = - Quaternion::rotation_x((1.0 - skeleton_attr.dampen) * -1.0 + footverttfslow * 0.5); - next.foot_fl.scale = Vec3::one() * 0.96; - - next.foot_fr.position = Vec3::new( - skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2 + ((footvert * -1.0 * skeleton_attr.maximize).max(0.0)), - ); - next.foot_fr.orientation = - Quaternion::rotation_x((1.0 - skeleton_attr.dampen) * -1.0 + footvertt * 0.5); - next.foot_fr.scale = Vec3::one() * 0.96; - - next.foot_bl.position = Vec3::new( - -skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2 + ((footvert * -1.8).max(0.0)), - ); - next.foot_bl.orientation = Quaternion::rotation_x(footvertt * 0.5 - 0.2); - next.foot_bl.scale = Vec3::one() * 0.96; - - next.foot_br.position = Vec3::new( - skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2 + ((footvertfslow * -0.8).max(-0.0)), - ); - next.foot_br.orientation = Quaternion::rotation_x(footverttfslow * 0.5 - 0.2); - next.foot_br.scale = Vec3::one() * 0.96; - } else { - let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); - - //Gallop - next.head_upper.position = - Vec3::new(0.0, skeleton_attr.head_upper.0, skeleton_attr.head_upper.1); - next.head_upper.orientation = Quaternion::rotation_x(short * -0.03 - 0.1) - * Quaternion::rotation_z(tilt * -1.2) - * Quaternion::rotation_y(tilt * 0.8); - next.head_upper.scale = Vec3::one(); - - next.head_lower.position = - Vec3::new(0.0, skeleton_attr.head_lower.0, skeleton_attr.head_lower.1); - next.head_lower.orientation = Quaternion::rotation_z(tilt * -0.8) - * Quaternion::rotation_x(short * -0.05) - * Quaternion::rotation_y(tilt * 0.3); - next.head_lower.scale = Vec3::one() * 1.02; - - next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); - next.jaw.orientation = Quaternion::rotation_x(0.0); - next.jaw.scale = Vec3::one() * 1.02; - - next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); - next.tail.orientation = - Quaternion::rotation_x(shortalt * 0.3) * Quaternion::rotation_z(tilt * 1.5); - next.tail.scale = Vec3::one(); - - next.torso_front.position = Vec3::new( - 0.0, - skeleton_attr.torso_front.0, - skeleton_attr.torso_front.1 + shortalt * 2.5 + x_tilt * 10.0, - ) * skeleton_attr.scaler - / 11.0; - next.torso_front.orientation = Quaternion::rotation_x(short * 0.13 + x_tilt) - * Quaternion::rotation_y(tilt * 0.8) - * Quaternion::rotation_z(tilt * -1.5); - next.torso_front.scale = Vec3::one() * skeleton_attr.scaler / 11.0; - - next.torso_back.position = Vec3::new( - 0.0, - skeleton_attr.torso_back.0, - skeleton_attr.torso_back.1 + shortalt * 0.2 - 0.2, - ); - next.torso_back.orientation = Quaternion::rotation_x(short * 0.1) - * Quaternion::rotation_z(tilt * 1.8) - * Quaternion::rotation_y(tilt * 0.6); - next.torso_back.scale = Vec3::one(); - - next.ears.position = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); - next.ears.orientation = Quaternion::rotation_x(shortalt * 0.2 + 0.2); - next.ears.scale = Vec3::one() * 1.02; - - next.leg_fl.position = Vec3::new( - -skeleton_attr.leg_f.0, - skeleton_attr.leg_f.1 + footvertaltf * -1.3, - skeleton_attr.leg_f.2 + 1.0 + footverttaltf * -1.9, - ); - next.leg_fl.orientation = Quaternion::rotation_x(footverttaltf * -0.65) + next.leg_fl.position = Vec3::new( + -skeleton_attr.leg_f.0, + skeleton_attr.leg_f.1 + amplitude3 * foot1b * -1.6, + skeleton_attr.leg_f.2 + amplitude3 * foot1a * 2.3, + ); + next.leg_fl.orientation = + Quaternion::rotation_x(0.2 * canceler + amplitude3 * foot1a * 0.85) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); - next.leg_fl.scale = Vec3::one() * 1.02; + next.leg_fl.scale = Vec3::one() * 1.02; - next.leg_fr.position = Vec3::new( - skeleton_attr.leg_f.0, - skeleton_attr.leg_f.1 + footvertalt * -1.3, - skeleton_attr.leg_f.2 + 1.0 + footverttalt * -1.9, - ); - next.leg_fr.orientation = Quaternion::rotation_x(footverttalt * -0.65) + next.leg_fr.position = Vec3::new( + skeleton_attr.leg_f.0, + skeleton_attr.leg_f.1 + amplitude3 * foot2b * -1.6, + skeleton_attr.leg_f.2 + amplitude3 * foot2a * 2.3, + ); + next.leg_fr.orientation = + Quaternion::rotation_x(0.2 * canceler + amplitude3 * foot2a * 0.85) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); - next.leg_fr.scale = Vec3::one() * 1.02; + next.leg_fr.scale = Vec3::one() * 1.02; - next.leg_bl.position = Vec3::new( - -skeleton_attr.leg_b.0, - skeleton_attr.leg_b.1 + footvert * -1.7, - skeleton_attr.leg_b.2 + 1.0 + footvertt * -1.5, - ); - next.leg_bl.orientation = Quaternion::rotation_x(footvertt * -0.45 - 0.2) + next.leg_bl.position = Vec3::new( + -skeleton_attr.leg_b.0, + skeleton_attr.leg_b.1 + amplitude3 * foot3b * -1.1, + skeleton_attr.leg_b.2 + amplitude3 * foot3a * 1.1, + ); + next.leg_bl.orientation = + Quaternion::rotation_x(canceler * -0.2 + amplitude3 * foot3b * -0.55) * Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_z(tilt * -1.5); - next.leg_bl.scale = Vec3::one() * 1.02; + next.leg_bl.scale = Vec3::one() * 1.02; - next.leg_br.position = Vec3::new( - skeleton_attr.leg_b.0, - skeleton_attr.leg_b.1 + footvertf * -1.7, - skeleton_attr.leg_b.2 + 1.0 + footverttf * -1.5, - ); - next.leg_br.orientation = Quaternion::rotation_x(footverttf * -0.45 - 0.2) + next.leg_br.position = Vec3::new( + skeleton_attr.leg_b.0, + skeleton_attr.leg_b.1 + amplitude3 * foot4b * -1.1, + skeleton_attr.leg_b.2 + amplitude3 * foot4a * 1.1, + ); + next.leg_br.orientation = + Quaternion::rotation_x(canceler * -0.2 + amplitude3 * foot4b * -0.55) * Quaternion::rotation_y(tilt * 1.5) * Quaternion::rotation_z(tilt * -1.5); - next.leg_br.scale = Vec3::one() * 1.02; + next.leg_br.scale = Vec3::one() * 1.02; - next.foot_fl.position = Vec3::new( - -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2 + ((footvertf * -2.7 * skeleton_attr.maximize).max(0.0)), - ); - next.foot_fl.orientation = - Quaternion::rotation_x((1.0 - skeleton_attr.dampen) * -1.0 + footverttf * 0.9) - * Quaternion::rotation_y(tilt * -1.0); - next.foot_fl.scale = Vec3::one() * 0.96; + next.foot_fl.position = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + (foot1a * 2.0).max(-1.0) * amplitude2 + 1.0 * canceler, + ); + next.foot_fl.orientation = Quaternion::rotation_x( + skeleton_attr.startangle * canceler + amplitude2 * foot1b * -0.7, + ) * Quaternion::rotation_y(tilt * -1.0); + next.foot_fl.scale = Vec3::one() * 0.96; - next.foot_fr.position = Vec3::new( - skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1, - skeleton_attr.feet_f.2 + ((footvert * -2.7 * skeleton_attr.maximize).max(0.0)), - ); - next.foot_fr.orientation = - Quaternion::rotation_x((1.0 - skeleton_attr.dampen) * -1.0 + footvertt * 0.9) - * Quaternion::rotation_y(tilt * -1.0); - next.foot_fr.scale = Vec3::one() * 0.96; + next.foot_fr.position = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2 + (foot2a * 2.0).max(-1.0) * amplitude2 + 1.0 * canceler, + ); + next.foot_fr.orientation = Quaternion::rotation_x( + skeleton_attr.startangle * canceler + amplitude2 * foot2b * -0.7, + ) * Quaternion::rotation_y(tilt * -1.0); + next.foot_fr.scale = Vec3::one() * 0.96; - next.foot_bl.position = Vec3::new( - -skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2 + ((footvert * 1.3).max(0.0)), - ); - next.foot_bl.orientation = Quaternion::rotation_x(footvertt * -0.9 - 0.2) + next.foot_bl.position = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2 + (foot3a * 0.8).max(0.0) * amplitude2 + 1.0 * canceler, + ); + next.foot_bl.orientation = + Quaternion::rotation_x(amplitude2 * foot3b * -0.7 - 0.2 * canceler) * Quaternion::rotation_y(tilt * -1.0); - next.foot_bl.scale = Vec3::one() * 0.96; + next.foot_bl.scale = Vec3::one() * 0.96; - next.foot_br.position = Vec3::new( - skeleton_attr.feet_b.0, - skeleton_attr.feet_b.1, - skeleton_attr.feet_b.2 + ((footvertf * 1.3).max(-0.0)), - ); - next.foot_br.orientation = Quaternion::rotation_x(footverttf * -0.9 - 0.2) + next.foot_br.position = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2 + (foot4a * 0.8).max(0.0) * amplitude2 + 1.0 * canceler, + ); + next.foot_br.orientation = + Quaternion::rotation_x(amplitude2 * foot4b * -0.7 - 0.2 * canceler) * Quaternion::rotation_y(tilt * -1.0); - next.foot_br.scale = Vec3::one() * 0.96; - } + next.foot_br.scale = Vec3::one() * 0.96; next } } diff --git a/voxygen/src/anim/src/quadruped_small/idle.rs b/voxygen/src/anim/src/quadruped_small/idle.rs index 9209704c2d..932107540b 100644 --- a/voxygen/src/anim/src/quadruped_small/idle.rs +++ b/voxygen/src/anim/src/quadruped_small/idle.rs @@ -25,7 +25,7 @@ impl Animation for IdleAnimation { let slow = (anim_time as f32 * 3.5).sin(); - let slow_alt = (anim_time as f32 * 3.5 + PI).sin(); + let slow_alt = (anim_time as f32 * 3.5 + PI / 2.0).sin(); let head_look = Vec2::new( ((global_time + anim_time) as f32 / 8.0) diff --git a/voxygen/src/anim/src/quadruped_small/mod.rs b/voxygen/src/anim/src/quadruped_small/mod.rs index 5d5de9e931..ed9e73cef4 100644 --- a/voxygen/src/anim/src/quadruped_small/mod.rs +++ b/voxygen/src/anim/src/quadruped_small/mod.rs @@ -114,6 +114,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (4.0, 3.0), (Truffler, _) => (7.5, -9.0), (Frog, _) => (4.0, 2.0), + (Rat, _) => (5.0, -1.0), + (Axolotl, _) => (3.0, 2.0), + (Gecko, _) => (4.0, 2.0), + (Turtle, _) => (5.0, -2.0), + (Squirrel, _) => (3.5, 1.0), + (Fungome, _) => (1.5, -1.5), + (Porcupine, _) => (6.0, 1.0), + (Beaver, _) => (5.5, 0.0), }, chest: match (body.species, body.body_type) { (Pig, _) => (0.0, 6.0), @@ -132,6 +140,14 @@ 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, 5.0), + (Axolotl, _) => (3.0, 5.0), + (Gecko, _) => (7.5, 3.0), + (Turtle, _) => (1.0, 6.0), + (Squirrel, _) => (4.0, 5.0), + (Fungome, _) => (4.0, 4.0), + (Porcupine, _) => (2.0, 11.0), + (Beaver, _) => (2.0, 6.0), }, feet_f: match (body.species, body.body_type) { (Pig, _) => (4.5, 3.5, -1.0), @@ -150,6 +166,14 @@ 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, _) => (5.0, 2.5, -1.0), + (Axolotl, _) => (2.0, 2.0, -2.0), + (Gecko, _) => (2.0, 4.0, 0.0), + (Turtle, _) => (5.0, 4.0, -2.0), + (Squirrel, _) => (3.5, 3.0, -1.0), + (Fungome, _) => (3.0, 2.0, -1.0), + (Porcupine, _) => (4.0, 6.5, -9.0), + (Beaver, _) => (4.5, 4.5, -4.0), }, feet_b: match (body.species, body.body_type) { (Pig, _) => (3.5, -2.0, 0.0), @@ -168,6 +192,14 @@ 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, _) => (5.0, -2.0, 1.0), + (Axolotl, _) => (2.0, -3.0, -2.0), + (Gecko, _) => (1.5, -1.0, 0.0), + (Turtle, _) => (5.5, -2.5, -2.0), + (Squirrel, _) => (3.5, -3.0, 0.0), + (Fungome, _) => (3.0, -3.5, -1.0), + (Porcupine, _) => (4.5, -1.0, -8.0), + (Beaver, _) => (4.0, -2.5, -3.0), }, tail: match (body.species, body.body_type) { (Pig, _) => (-4.5, 2.5), @@ -186,6 +218,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (-4.0, -0.0), (Truffler, _) => (0.0, 0.0), (Frog, _) => (0.0, -0.0), + (Rat, _) => (-1.0, 2.0), + (Axolotl, _) => (-4.0, -1.0), + (Gecko, _) => (-4.0, 0.0), + (Turtle, _) => (-6.0, -2.0), + (Squirrel, _) => (-5.0, 0.0), + (Fungome, _) => (-4.0, -2.0), + (Porcupine, _) => (-6.0, 1.0), + (Beaver, _) => (-6.5, -1.0), }, scaler: match (body.species, body.body_type) { (Pig, _) => (0.9), @@ -204,6 +244,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (0.7), (Truffler, _) => (1.0), (Frog, _) => (0.7), + (Rat, _) => (0.65), + (Axolotl, _) => (0.65), + (Gecko, _) => (0.7), + (Turtle, _) => (0.9), + (Squirrel, _) => (0.7), + (Fungome, _) => (0.9), + (Porcupine, _) => (1.0), + (Beaver, _) => (1.0), }, tempo: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -222,6 +270,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (1.15), (Truffler, _) => (1.0), (Frog, _) => (1.15), + (Rat, _) => (1.0), + (Axolotl, _) => (1.2), + (Gecko, _) => (1.1), + (Turtle, _) => (0.9), + (Squirrel, _) => (1.15), + (Fungome, _) => (1.0), + (Porcupine, _) => (1.2), + (Beaver, _) => (1.2), }, maximize: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -240,6 +296,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (1.3), (Truffler, _) => (1.0), (Frog, _) => (1.3), + (Rat, _) => (1.0), + (Axolotl, _) => (0.9), + (Gecko, _) => (1.0), + (Turtle, _) => (0.8), + (Squirrel, _) => (1.0), + (Fungome, _) => (0.7), + (Porcupine, _) => (1.0), + (Beaver, _) => (1.0), }, minimize: match (body.species, body.body_type) { (Pig, _) => (0.6), @@ -258,6 +322,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (0.8), (Truffler, _) => (1.0), (Frog, _) => (0.8), + (Rat, _) => (1.0), + (Axolotl, _) => (1.0), + (Gecko, _) => (1.0), + (Turtle, _) => (0.8), + (Squirrel, _) => (1.0), + (Fungome, _) => (0.4), + (Porcupine, _) => (0.9), + (Beaver, _) => (0.9), }, spring: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -276,6 +348,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (2.5), (Truffler, _) => (0.8), (Frog, _) => (2.5), + (Rat, _) => (1.0), + (Axolotl, _) => (0.8), + (Gecko, _) => (1.0), + (Turtle, _) => (0.7), + (Squirrel, _) => (1.0), + (Fungome, _) => (0.8), + (Porcupine, _) => (1.3), + (Beaver, _) => (1.3), }, feed: match (body.species, body.body_type) { (Pig, _) => (1.0), @@ -294,6 +374,14 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Rabbit, _) => (1.2), (Truffler, _) => (0.6), (Frog, _) => (0.7), + (Rat, _) => (1.0), + (Axolotl, _) => (0.8), + (Gecko, _) => (1.0), + (Turtle, _) => (0.7), + (Squirrel, _) => (1.0), + (Fungome, _) => (0.7), + (Porcupine, _) => (1.0), + (Beaver, _) => (1.0), }, } } diff --git a/voxygen/src/anim/src/quadruped_small/run.rs b/voxygen/src/anim/src/quadruped_small/run.rs index cbf1092460..a88a6369f0 100644 --- a/voxygen/src/anim/src/quadruped_small/run.rs +++ b/voxygen/src/anim/src/quadruped_small/run.rs @@ -72,11 +72,11 @@ impl Animation for RunAnimation { next.leg_fl.position = Vec3::new( -skeleton_attr.feet_f.0, - skeleton_attr.feet_f.1 + footverttf * 3.0 * skeleton_attr.maximize, + skeleton_attr.feet_f.1 + footverttf * 3.0 * skeleton_attr.minimize, skeleton_attr.feet_f.2 + ((footvertf * -1.5).max(-1.0)), ); next.leg_fl.orientation = - Quaternion::rotation_x(0.2 + skeleton_attr.minimize * footverttf * 0.65) + Quaternion::rotation_x(0.2 + skeleton_attr.maximize * footverttf * 0.65) * Quaternion::rotation_z(tilt * -0.5) * Quaternion::rotation_y(tilt * 1.5); next.leg_fl.scale = Vec3::one() * 1.02; diff --git a/voxygen/src/anim/src/theropod/idle.rs b/voxygen/src/anim/src/theropod/idle.rs new file mode 100644 index 0000000000..cce7b1bbf4 --- /dev/null +++ b/voxygen/src/anim/src/theropod/idle.rs @@ -0,0 +1,133 @@ +use super::{super::Animation, SkeletonAttr, TheropodSkeleton}; +//use std::{f32::consts::PI, ops::Mul}; +use super::super::vek::*; +use std::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(); + + let breathe = (anim_time as f32 * 0.8).sin(); + let head_look = Vec2::new( + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + + next.head.position = Vec3::new( + 0.0, + skeleton_attr.head.0, + skeleton_attr.head.1 + breathe * 0.3, + ); + next.head.orientation = Quaternion::rotation_x(head_look.y + breathe * 0.1 - 0.1) + * Quaternion::rotation_z(head_look.x); + next.head.scale = Vec3::one() * 1.02; + + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(breathe * 0.05); + next.jaw.scale = Vec3::one() * 0.98; + + next.neck.position = Vec3::new( + 0.0, + skeleton_attr.neck.0, + skeleton_attr.neck.1 + breathe * 0.2, + ); + next.neck.orientation = Quaternion::rotation_x(-0.1); + next.neck.scale = Vec3::one() * 0.98; + + next.chest_front.position = Vec3::new( + 0.0, + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1 + breathe * 0.3, + ) / 3.0; + next.chest_front.orientation = Quaternion::rotation_x(breathe * 0.04); + next.chest_front.scale = Vec3::one() / 3.0; + + next.chest_back.position = + Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1); + next.chest_back.orientation = Quaternion::rotation_x(breathe * -0.04); + 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_x(0.1); + 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_x(0.1); + next.tail_back.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + -skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_l.orientation = Quaternion::rotation_x(breathe * 0.2); + next.hand_l.scale = Vec3::one(); + + next.hand_r.position = Vec3::new( + skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_r.orientation = Quaternion::rotation_x(breathe * 0.2); + next.hand_r.scale = Vec3::one(); + + next.leg_l.position = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + breathe * 0.05, + ); + next.leg_l.orientation = Quaternion::rotation_z(0.0); + next.leg_l.scale = Vec3::one(); + + next.leg_r.position = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + breathe * 0.05, + ); + next.leg_r.orientation = Quaternion::rotation_z(0.0); + next.leg_r.scale = Vec3::one(); + + next.foot_l.position = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2 + breathe * -0.15, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0); + next.foot_l.scale = Vec3::one() * 1.02; + + next.foot_r.position = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2 + breathe * -0.15, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0); + next.foot_r.scale = Vec3::one() * 1.02; + + 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..2fbb22287f --- /dev/null +++ b/voxygen/src/anim/src/theropod/jump.rs @@ -0,0 +1,119 @@ +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 breathe = (anim_time as f32 * 0.8).sin(); + + next.head.position = Vec3::new( + 0.0, + skeleton_attr.head.0, + skeleton_attr.head.1 + breathe * 0.3, + ); + next.head.orientation = Quaternion::rotation_x(breathe * 0.1 - 0.1); + next.head.scale = Vec3::one() * 1.02; + + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(breathe * 0.05); + next.jaw.scale = Vec3::one() * 0.98; + + next.neck.position = Vec3::new( + 0.0, + skeleton_attr.neck.0, + skeleton_attr.neck.1 + breathe * 0.2, + ); + next.neck.orientation = Quaternion::rotation_x(-0.1); + next.neck.scale = Vec3::one() * 0.98; + + next.chest_front.position = Vec3::new( + 0.0, + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1 + breathe * 0.3, + ) / 3.0; + next.chest_front.orientation = Quaternion::rotation_x(breathe * 0.04); + next.chest_front.scale = Vec3::one() / 3.0; + + next.chest_back.position = + Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1); + next.chest_back.orientation = Quaternion::rotation_x(breathe * -0.04); + 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_x(0.1); + 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_x(0.1); + next.tail_back.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + -skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_l.orientation = Quaternion::rotation_x(breathe * 0.2); + next.hand_l.scale = Vec3::one(); + + next.hand_r.position = Vec3::new( + skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_r.orientation = Quaternion::rotation_x(breathe * 0.2); + next.hand_r.scale = Vec3::one(); + + next.leg_l.position = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + breathe * 0.05, + ); + next.leg_l.orientation = Quaternion::rotation_z(0.0); + next.leg_l.scale = Vec3::one(); + + next.leg_r.position = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1, + skeleton_attr.leg.2 + breathe * 0.05, + ); + next.leg_r.orientation = Quaternion::rotation_z(0.0); + next.leg_r.scale = Vec3::one(); + + next.foot_l.position = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2 + breathe * -0.35, + ); + next.foot_l.orientation = Quaternion::rotation_z(0.0); + next.foot_l.scale = Vec3::one() * 1.02; + + next.foot_r.position = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2 + breathe * -0.45, + ); + next.foot_r.orientation = Quaternion::rotation_z(0.0); + next.foot_r.scale = Vec3::one() * 1.02; + + 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..459661de77 --- /dev/null +++ b/voxygen/src/anim/src/theropod/mod.rs @@ -0,0 +1,159 @@ +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_back_mat * Mat4::::from(self.leg_l); + let leg_r_mat = chest_back_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: (f32, f32, f32), + leg: (f32, f32, f32), + foot: (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: (0.0, 0.0, 0.0), + leg: (0.0, 0.0, 0.0), + foot: (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, _) => (8.0, 4.0), + (Odonto, _) => (6.0, 5.0), + }, + jaw: match (body.species, body.body_type) { + (Archaeos, _) => (1.0, -7.0), + (Odonto, _) => (2.0, -7.0), + }, + neck: match (body.species, body.body_type) { + (Archaeos, _) => (4.5, -2.0), + (Odonto, _) => (3.0, -3.0), + }, + chest_front: match (body.species, body.body_type) { + (Archaeos, _) => (0.0, 20.0), + (Odonto, _) => (0.0, 13.0), + }, + chest_back: match (body.species, body.body_type) { + (Archaeos, _) => (-5.5, -1.0), + (Odonto, _) => (-5.0, 2.0), + }, + tail_front: match (body.species, body.body_type) { + (Archaeos, _) => (-9.0, -1.5), + (Odonto, _) => (-7.0, -1.0), + }, + tail_back: match (body.species, body.body_type) { + (Archaeos, _) => (-8.0, -0.5), + (Odonto, _) => (-8.0, 0.5), + }, + hand: match (body.species, body.body_type) { + (Archaeos, _) => (3.0, 0.0, -4.0), + (Odonto, _) => (3.5, 3.0, -4.0), + }, + leg: match (body.species, body.body_type) { + (Archaeos, _) => (4.5, -3.0, -4.0), + (Odonto, _) => (5.5, -2.5, -4.0), + }, + foot: match (body.species, body.body_type) { + (Archaeos, _) => (1.0, -0.5, -7.0), + (Odonto, _) => (2.0, -6.5, -3.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..76b4e36395 --- /dev/null +++ b/voxygen/src/anim/src/theropod/run.rs @@ -0,0 +1,166 @@ +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 speed = Vec2::::from(velocity).magnitude(); + *rate = 1.0; + //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(); + + let breathe = (anim_time as f32 * 0.8).sin(); + let topspeed = 18.0; + + let canceler = speed / topspeed; + let lab = 0.5; //6 + let amplitude2 = (speed * 1.4 / topspeed).max(0.6); + let amplitude3 = (speed / topspeed).max(0.35); + let speedmult = if speed > 0.0 { + 1.2 * (1.0 * 1.0) + } else { + 0.9 * (1.0 * 1.0) + }; + + let short = (((1.0) + / (0.72 + + 0.28 + * ((anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15 - 0.5) + .sin()) + .powf(2.0 as f32))) + .sqrt()) + * ((anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15 - 0.5).sin()); + + // + let shortalt = + (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * 3.0 / 8.0 - 0.5).sin(); + + //FL + let foot1a = (anim_time as f32 * (16.0) * lab as f32 * speedmult + 0.0 + PI).sin(); //1.5 + let foot1b = (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.57 + PI).sin(); //1.9 + //FR + let foot2a = (anim_time as f32 * (16.0) * lab as f32 * speedmult).sin(); //1.2 + let foot2b = (anim_time as f32 * (16.0) * lab as f32 * speedmult + 1.57).sin(); //1.6 + //BL + //BR + + next.head.position = Vec3::new( + 0.0, + skeleton_attr.head.0, + skeleton_attr.head.1 + breathe * 0.3, + ); + next.head.orientation = + Quaternion::rotation_x(-0.1 + short * -0.05) * Quaternion::rotation_z(shortalt * -0.2); + next.head.scale = Vec3::one() * 1.02; + + next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(short * -0.03); + next.jaw.scale = Vec3::one() * 0.98; + + next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1); + next.neck.orientation = + Quaternion::rotation_x(-0.1 + short * -0.04) * Quaternion::rotation_z(shortalt * -0.1); + next.neck.scale = Vec3::one() * 0.98; + + next.chest_front.position = Vec3::new( + 0.0, + skeleton_attr.chest_front.0, + skeleton_attr.chest_front.1 + short * 0.5, + ) / 3.0; + next.chest_front.orientation = + Quaternion::rotation_x(short * 0.07) * Quaternion::rotation_z(shortalt * 0.15); + next.chest_front.scale = Vec3::one() / 3.0; + + next.chest_back.position = + Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1); + next.chest_back.orientation = + Quaternion::rotation_x(short * -0.04) * Quaternion::rotation_z(shortalt * -0.15); + 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_x(0.1 + short * -0.02) * Quaternion::rotation_z(shortalt * -0.1); + 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_x(0.2 + short * -0.2) * Quaternion::rotation_z(shortalt * -0.2); + next.tail_back.scale = Vec3::one(); + + next.hand_l.position = Vec3::new( + -skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_l.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot2a * 0.3); + next.hand_l.scale = Vec3::one(); + + next.hand_r.position = Vec3::new( + skeleton_attr.hand.0, + skeleton_attr.hand.1, + skeleton_attr.hand.2, + ); + next.hand_r.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot1a * 0.3); + next.hand_r.scale = Vec3::one(); + + next.leg_l.position = Vec3::new( + -skeleton_attr.leg.0, + skeleton_attr.leg.1 + amplitude3 * foot1b * -1.3, + skeleton_attr.leg.2 + amplitude3 * foot1a * 1.4, + ); + next.leg_l.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot1a * 0.2) + * Quaternion::rotation_z(foot1a * -0.3) + * Quaternion::rotation_y(0.0); + next.leg_l.scale = Vec3::one() * 1.0; + + next.leg_r.position = Vec3::new( + skeleton_attr.leg.0, + skeleton_attr.leg.1 + amplitude3 * foot2b * -1.3, + skeleton_attr.leg.2 + amplitude3 * foot2a * 1.4, + ); + next.leg_r.orientation = Quaternion::rotation_x(-0.2 + amplitude3 * foot2a * 0.2) + * Quaternion::rotation_z(foot2a * 0.3) + * Quaternion::rotation_y(0.0); + next.leg_r.scale = Vec3::one() * 1.0; + + next.foot_l.position = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1 + canceler * -2.0 + amplitude3 * foot1b * -2.0, + skeleton_attr.foot.2 + canceler * 2.0 + (foot1a * 2.0).max(0.0) * amplitude2, + ); + next.foot_l.orientation = Quaternion::rotation_x(-0.3 + amplitude2 * foot1b * -0.35) + * Quaternion::rotation_y(0.0); + next.foot_l.scale = Vec3::one() * 0.96; + + next.foot_r.position = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1 + canceler * -2.0 + amplitude3 * foot2b * -2.0, + skeleton_attr.foot.2 + canceler * 2.0 + (foot2a * 2.0).max(0.0) * amplitude2, + ); + next.foot_r.orientation = Quaternion::rotation_x(-0.3 + amplitude2 * foot2b * -0.35) + * Quaternion::rotation_y(0.0); + next.foot_r.scale = Vec3::one() * 0.96; + + next + } +} diff --git a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs index f551987ebb..85c10f1a6d 100644 --- a/voxygen/src/audio/sfx/event_mapper/movement/mod.rs +++ b/voxygen/src/audio/sfx/event_mapper/movement/mod.rs @@ -75,7 +75,7 @@ impl EventMapper for MovementEventMapper { | Body::BirdMedium(_) | Body::BirdSmall(_) | Body::BipedLarge(_) => Self::map_non_humanoid_movement_event(physics, vel.0), - _ => SfxEvent::Idle, // Ignore fish, critters, etc... + _ => SfxEvent::Idle, // Ignore fish, etc... }; // Check for SFX config entry for this movement diff --git a/voxygen/src/hud/item_imgs.rs b/voxygen/src/hud/item_imgs.rs index 4cda77f2ce..1d15a24e5d 100644 --- a/voxygen/src/hud/item_imgs.rs +++ b/voxygen/src/hud/item_imgs.rs @@ -4,7 +4,7 @@ use common::{ comp::item::{ armor::{Armor, ArmorKind}, tool::{Tool, ToolKind}, - Item, ItemKind, Lantern, Throwable, Utility, + Glider, Item, ItemKind, Lantern, Throwable, Utility, }, figure::Segment, }; @@ -21,6 +21,7 @@ use vek::*; pub enum ItemKey { Tool(ToolKind), Lantern(String), + Glider(String), Armor(ArmorKind), Utility(Utility), Consumable(String), @@ -33,6 +34,7 @@ impl From<&Item> for ItemKey { match &item.kind() { ItemKind::Tool(Tool { kind, .. }) => ItemKey::Tool(kind.clone()), ItemKind::Lantern(Lantern { kind, .. }) => ItemKey::Lantern(kind.clone()), + ItemKind::Glider(Glider { kind, .. }) => ItemKey::Glider(kind.clone()), ItemKind::Armor(Armor { kind, .. }) => ItemKey::Armor(kind.clone()), ItemKind::Utility { kind, .. } => ItemKey::Utility(*kind), ItemKind::Consumable { kind, .. } => ItemKey::Consumable(kind.clone()), diff --git a/voxygen/src/hud/slots.rs b/voxygen/src/hud/slots.rs index 3e32e7cc3d..534d0f3f50 100644 --- a/voxygen/src/hud/slots.rs +++ b/voxygen/src/hud/slots.rs @@ -66,6 +66,7 @@ impl SlotKey for EquipSlot { EquipSlot::Mainhand => source.active_item.as_ref().map(|i| &i.item), EquipSlot::Offhand => source.second_item.as_ref().map(|i| &i.item), EquipSlot::Lantern => source.lantern.as_ref(), + EquipSlot::Glider => source.glider.as_ref(), }; item.map(|i| (i.into(), None)) diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index 1c73ddb797..1d77fe0f0f 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}, }; @@ -1187,8 +1187,8 @@ struct QuadrupedMediumCentralSpec(HashMap<(QMSpecies, QMBodyType), SidedQMCentra #[derive(Deserialize)] struct SidedQMCentralVoxSpec { - upper: QuadrupedMediumCentralSubSpec, - lower: QuadrupedMediumCentralSubSpec, + head: QuadrupedMediumCentralSubSpec, + neck: QuadrupedMediumCentralSubSpec, jaw: QuadrupedMediumCentralSubSpec, ears: QuadrupedMediumCentralSubSpec, torso_front: QuadrupedMediumCentralSubSpec, @@ -1228,11 +1228,11 @@ make_vox_spec!( }, |FigureKey { body, .. }, spec| { [ - Some(spec.central.asset.mesh_head_upper( + Some(spec.central.asset.mesh_head( body.species, body.body_type, )), - Some(spec.central.asset.mesh_head_lower( + Some(spec.central.asset.mesh_neck( body.species, body.body_type, )), @@ -1294,36 +1294,36 @@ make_vox_spec!( ); impl QuadrupedMediumCentralSpec { - fn mesh_head_upper(&self, species: QMSpecies, body_type: QMBodyType) -> BoneMeshes { + fn mesh_head(&self, species: QMSpecies, body_type: QMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No upper head specification exists for the combination of {:?} and {:?}", + "No head 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.upper.central.0); + let central = graceful_load_segment(&spec.head.central.0); - (central, Vec3::from(spec.upper.offset)) + (central, Vec3::from(spec.head.offset)) } - fn mesh_head_lower(&self, species: QMSpecies, body_type: QMBodyType) -> BoneMeshes { + fn mesh_neck(&self, species: QMSpecies, body_type: QMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No lower head specification exists for the combination of {:?} and {:?}", + "No neck 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.lower.central.0); + let central = graceful_load_segment(&spec.neck.central.0); - (central, Vec3::from(spec.lower.offset)) + (central, Vec3::from(spec.neck.offset)) } fn mesh_jaw(&self, species: QMSpecies, body_type: QMBodyType) -> BoneMeshes { @@ -1539,18 +1539,18 @@ impl QuadrupedMediumLateralSpec { //// #[derive(Deserialize)] -struct BirdMediumCenterSpec(HashMap<(BMSpecies, BMBodyType), SidedBMCenterVoxSpec>); +struct BirdMediumCentralSpec(HashMap<(BMSpecies, BMBodyType), SidedBMCentralVoxSpec>); #[derive(Deserialize)] -struct SidedBMCenterVoxSpec { - head: BirdMediumCenterSubSpec, - torso: BirdMediumCenterSubSpec, - tail: BirdMediumCenterSubSpec, +struct SidedBMCentralVoxSpec { + head: BirdMediumCentralSubSpec, + torso: BirdMediumCentralSubSpec, + tail: BirdMediumCentralSubSpec, } #[derive(Deserialize)] -struct BirdMediumCenterSubSpec { +struct BirdMediumCentralSubSpec { offset: [f32; 3], // Should be relative to initial origin - center: VoxSimple, + central: VoxSimple, } #[derive(Deserialize)] @@ -1572,20 +1572,20 @@ struct BirdMediumLateralSubSpec { make_vox_spec!( bird_medium::Body, struct BirdMediumSpec { - center: BirdMediumCenterSpec = "voxygen.voxel.bird_medium_center_manifest", + central: BirdMediumCentralSpec = "voxygen.voxel.bird_medium_central_manifest", lateral: BirdMediumLateralSpec = "voxygen.voxel.bird_medium_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_torso( + Some(spec.central.asset.mesh_torso( body.species, body.body_type, )), - Some(spec.center.asset.mesh_tail( + Some(spec.central.asset.mesh_tail( body.species, body.body_type, )), @@ -1618,7 +1618,7 @@ make_vox_spec!( }, ); -impl BirdMediumCenterSpec { +impl BirdMediumCentralSpec { fn mesh_head(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, @@ -1630,9 +1630,9 @@ impl BirdMediumCenterSpec { 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_torso(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { @@ -1646,9 +1646,9 @@ impl BirdMediumCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.torso.center.0); + let central = graceful_load_segment(&spec.torso.central.0); - (center, Vec3::from(spec.torso.offset)) + (central, Vec3::from(spec.torso.offset)) } fn mesh_tail(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { @@ -1662,9 +1662,9 @@ impl BirdMediumCenterSpec { 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.tail.central.0); - (center, Vec3::from(spec.tail.offset)) + (central, Vec3::from(spec.tail.offset)) } } impl BirdMediumLateralSpec { @@ -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,202 @@ 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)) } } //// @@ -1956,22 +2128,22 @@ fn mesh_fish_medium_fin_r(fin_r: fish_medium::FinR) -> BoneMeshes { //// #[derive(Deserialize)] -struct DragonCenterSpec(HashMap<(DSpecies, DBodyType), SidedDCenterVoxSpec>); +struct DragonCentralSpec(HashMap<(DSpecies, DBodyType), SidedDCentralVoxSpec>); #[derive(Deserialize)] -struct SidedDCenterVoxSpec { - upper: DragonCenterSubSpec, - lower: DragonCenterSubSpec, - jaw: DragonCenterSubSpec, - chest_front: DragonCenterSubSpec, - chest_rear: DragonCenterSubSpec, - tail_front: DragonCenterSubSpec, - tail_rear: DragonCenterSubSpec, +struct SidedDCentralVoxSpec { + upper: DragonCentralSubSpec, + lower: DragonCentralSubSpec, + jaw: DragonCentralSubSpec, + chest_front: DragonCentralSubSpec, + chest_rear: DragonCentralSubSpec, + tail_front: DragonCentralSubSpec, + tail_rear: DragonCentralSubSpec, } #[derive(Deserialize)] -struct DragonCenterSubSpec { +struct DragonCentralSubSpec { offset: [f32; 3], // Should be relative to initial origin - center: VoxSimple, + central: VoxSimple, } #[derive(Deserialize)] @@ -1997,36 +2169,36 @@ struct DragonLateralSubSpec { make_vox_spec!( dragon::Body, struct DragonSpec { - center: DragonCenterSpec = "voxygen.voxel.dragon_center_manifest", + central: DragonCentralSpec = "voxygen.voxel.dragon_central_manifest", lateral: DragonLateralSpec = "voxygen.voxel.dragon_lateral_manifest", }, |FigureKey { body, .. }, spec| { [ - Some(spec.center.asset.mesh_head_upper( + Some(spec.central.asset.mesh_head_upper( body.species, body.body_type, )), - Some(spec.center.asset.mesh_head_lower( + Some(spec.central.asset.mesh_head_lower( body.species, body.body_type, )), - Some(spec.center.asset.mesh_jaw( + Some(spec.central.asset.mesh_jaw( body.species, body.body_type, )), - Some(spec.center.asset.mesh_chest_front( + Some(spec.central.asset.mesh_chest_front( body.species, body.body_type, )), - Some(spec.center.asset.mesh_chest_rear( + Some(spec.central.asset.mesh_chest_rear( body.species, body.body_type, )), - Some(spec.center.asset.mesh_tail_front( + Some(spec.central.asset.mesh_tail_front( body.species, body.body_type, )), - Some(spec.center.asset.mesh_tail_rear( + Some(spec.central.asset.mesh_tail_rear( body.species, body.body_type, )), @@ -2067,7 +2239,7 @@ make_vox_spec!( }, ); -impl DragonCenterSpec { +impl DragonCentralSpec { fn mesh_head_upper(&self, species: DSpecies, body_type: DBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, @@ -2079,7 +2251,7 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let central = graceful_load_segment(&spec.upper.center.0); + let central = graceful_load_segment(&spec.upper.central.0); (central, Vec3::from(spec.upper.offset)) } @@ -2095,7 +2267,7 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let central = graceful_load_segment(&spec.lower.center.0); + let central = graceful_load_segment(&spec.lower.central.0); (central, Vec3::from(spec.lower.offset)) } @@ -2111,7 +2283,7 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let central = graceful_load_segment(&spec.jaw.center.0); + let central = graceful_load_segment(&spec.jaw.central.0); (central, Vec3::from(spec.jaw.offset)) } @@ -2127,9 +2299,9 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.chest_front.center.0); + let central = graceful_load_segment(&spec.chest_front.central.0); - (center, Vec3::from(spec.chest_front.offset)) + (central, Vec3::from(spec.chest_front.offset)) } fn mesh_chest_rear(&self, species: DSpecies, body_type: DBodyType) -> BoneMeshes { @@ -2143,9 +2315,9 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.chest_rear.center.0); + let central = graceful_load_segment(&spec.chest_rear.central.0); - (center, Vec3::from(spec.chest_rear.offset)) + (central, Vec3::from(spec.chest_rear.offset)) } fn mesh_tail_front(&self, species: DSpecies, body_type: DBodyType) -> BoneMeshes { @@ -2159,9 +2331,9 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.tail_front.center.0); + let central = graceful_load_segment(&spec.tail_front.central.0); - (center, Vec3::from(spec.tail_front.offset)) + (central, Vec3::from(spec.tail_front.offset)) } fn mesh_tail_rear(&self, species: DSpecies, body_type: DBodyType) -> BoneMeshes { @@ -2175,9 +2347,9 @@ impl DragonCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.tail_rear.center.0); + let central = graceful_load_segment(&spec.tail_rear.central.0); - (center, Vec3::from(spec.tail_rear.offset)) + (central, Vec3::from(spec.tail_rear.offset)) } } impl DragonLateralSpec { @@ -2416,22 +2588,22 @@ fn mesh_fish_small_tail(tail: fish_small::Tail) -> BoneMeshes { } //// #[derive(Deserialize)] -struct BipedLargeCenterSpec(HashMap<(BLSpecies, BLBodyType), SidedBLCenterVoxSpec>); +struct BipedLargeCentralSpec(HashMap<(BLSpecies, BLBodyType), SidedBLCentralVoxSpec>); #[derive(Deserialize)] -struct SidedBLCenterVoxSpec { - head: BipedLargeCenterSubSpec, - jaw: BipedLargeCenterSubSpec, - torso_upper: BipedLargeCenterSubSpec, - torso_lower: BipedLargeCenterSubSpec, - tail: BipedLargeCenterSubSpec, - main: BipedLargeCenterSubSpec, - second: BipedLargeCenterSubSpec, +struct SidedBLCentralVoxSpec { + head: BipedLargeCentralSubSpec, + jaw: BipedLargeCentralSubSpec, + torso_upper: BipedLargeCentralSubSpec, + torso_lower: BipedLargeCentralSubSpec, + tail: BipedLargeCentralSubSpec, + main: BipedLargeCentralSubSpec, + second: BipedLargeCentralSubSpec, } #[derive(Deserialize)] -struct BipedLargeCenterSubSpec { +struct BipedLargeCentralSubSpec { offset: [f32; 3], // Should be relative to initial origin - center: VoxSimple, + central: VoxSimple, } #[derive(Deserialize)] @@ -2457,36 +2629,36 @@ struct BipedLargeLateralSubSpec { make_vox_spec!( biped_large::Body, struct BipedLargeSpec { - center: BipedLargeCenterSpec = "voxygen.voxel.biped_large_center_manifest", + central: BipedLargeCentralSpec = "voxygen.voxel.biped_large_central_manifest", lateral: BipedLargeLateralSpec = "voxygen.voxel.biped_large_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_jaw( + Some(spec.central.asset.mesh_jaw( body.species, body.body_type, )), - Some(spec.center.asset.mesh_torso_upper( + Some(spec.central.asset.mesh_torso_upper( body.species, body.body_type, )), - Some(spec.center.asset.mesh_torso_lower( + Some(spec.central.asset.mesh_torso_lower( body.species, body.body_type, )), - Some(spec.center.asset.mesh_tail( + Some(spec.central.asset.mesh_tail( body.species, body.body_type, )), - Some(spec.center.asset.mesh_main( + Some(spec.central.asset.mesh_main( body.species, body.body_type, )), - Some(spec.center.asset.mesh_second( + Some(spec.central.asset.mesh_second( body.species, body.body_type, )), @@ -2527,7 +2699,7 @@ make_vox_spec!( }, ); -impl BipedLargeCenterSpec { +impl BipedLargeCentralSpec { fn mesh_head(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, @@ -2539,9 +2711,9 @@ impl BipedLargeCenterSpec { 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_jaw(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { @@ -2555,9 +2727,9 @@ impl BipedLargeCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.jaw.center.0); + let central = graceful_load_segment(&spec.jaw.central.0); - (center, Vec3::from(spec.jaw.offset)) + (central, Vec3::from(spec.jaw.offset)) } fn mesh_torso_upper(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { @@ -2571,9 +2743,9 @@ impl BipedLargeCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.torso_upper.center.0); + let central = graceful_load_segment(&spec.torso_upper.central.0); - (center, Vec3::from(spec.torso_upper.offset)) + (central, Vec3::from(spec.torso_upper.offset)) } fn mesh_torso_lower(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { @@ -2587,9 +2759,9 @@ impl BipedLargeCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.torso_lower.center.0); + let central = graceful_load_segment(&spec.torso_lower.central.0); - (center, Vec3::from(spec.torso_lower.offset)) + (central, Vec3::from(spec.torso_lower.offset)) } fn mesh_tail(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { @@ -2603,9 +2775,9 @@ impl BipedLargeCenterSpec { 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.tail.central.0); - (center, Vec3::from(spec.tail.offset)) + (central, Vec3::from(spec.tail.offset)) } fn mesh_main(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { @@ -2619,9 +2791,9 @@ impl BipedLargeCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.main.center.0); + let central = graceful_load_segment(&spec.main.central.0); - (center, Vec3::from(spec.main.offset)) + (central, Vec3::from(spec.main.offset)) } fn mesh_second(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { @@ -2635,9 +2807,9 @@ impl BipedLargeCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.second.center.0); + let central = graceful_load_segment(&spec.second.central.0); - (center, Vec3::from(spec.second.offset)) + (central, Vec3::from(spec.second.offset)) } } impl BipedLargeLateralSpec { @@ -2771,17 +2943,18 @@ impl BipedLargeLateralSpec { } //// #[derive(Deserialize)] -struct GolemCenterSpec(HashMap<(GSpecies, GBodyType), SidedGCenterVoxSpec>); +struct GolemCentralSpec(HashMap<(GSpecies, GBodyType), SidedGCentralVoxSpec>); #[derive(Deserialize)] -struct SidedGCenterVoxSpec { - head: GolemCenterSubSpec, - torso_upper: GolemCenterSubSpec, +struct SidedGCentralVoxSpec { + head: GolemCentralSubSpec, + torso_upper: GolemCentralSubSpec, + torso_lower: GolemCentralSubSpec, } #[derive(Deserialize)] -struct GolemCenterSubSpec { +struct GolemCentralSubSpec { offset: [f32; 3], // Should be relative to initial origin - center: VoxSimple, + central: VoxSimple, } #[derive(Deserialize)] @@ -2807,16 +2980,20 @@ struct GolemLateralSubSpec { make_vox_spec!( golem::Body, struct GolemSpec { - center: GolemCenterSpec = "voxygen.voxel.golem_center_manifest", + central: GolemCentralSpec = "voxygen.voxel.golem_central_manifest", lateral: GolemLateralSpec = "voxygen.voxel.golem_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_torso_upper( + Some(spec.central.asset.mesh_torso_upper( + body.species, + body.body_type, + )), + Some(spec.central.asset.mesh_torso_lower( body.species, body.body_type, )), @@ -2857,12 +3034,11 @@ make_vox_spec!( None, None, None, - None, ] }, ); -impl GolemCenterSpec { +impl GolemCentralSpec { fn mesh_head(&self, species: GSpecies, body_type: GBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, @@ -2874,9 +3050,9 @@ impl GolemCenterSpec { 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_torso_upper(&self, species: GSpecies, body_type: GBodyType) -> BoneMeshes { @@ -2890,9 +3066,25 @@ impl GolemCenterSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let center = graceful_load_segment(&spec.torso_upper.center.0); + let central = graceful_load_segment(&spec.torso_upper.central.0); - (center, Vec3::from(spec.torso_upper.offset)) + (central, Vec3::from(spec.torso_upper.offset)) + } + + pub fn mesh_torso_lower(&self, species: GSpecies, body_type: GBodyType) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "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)); + }, + }; + let central = graceful_load_segment(&spec.torso_lower.central.0); + + (central, 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 e02d6df6a0..7a6c93c8be 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 @@ -1122,6 +1122,14 @@ impl FigureMgr { skeleton_attr, ) }, + // Running + (false, _, true) => anim::quadruped_small::RunAnimation::update_skeleton( + &QuadrupedSmallSkeleton::default(), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), // In air (false, _, false) => anim::quadruped_small::JumpAnimation::update_skeleton( &QuadrupedSmallSkeleton::default(), @@ -1201,8 +1209,8 @@ impl FigureMgr { let target_base = match ( physics.on_ground, - vel.0.magnitude_squared() > MOVING_THRESHOLD_SQR, // Moving - physics.in_fluid.is_some(), // In water + vel.0.magnitude_squared() > 0.25, // Moving + physics.in_fluid.is_some(), // In water ) { // Standing (true, false, false) => { @@ -1215,7 +1223,17 @@ impl FigureMgr { ) }, // Running - (true, true, _) => anim::quadruped_medium::RunAnimation::update_skeleton( + (true, true, false) => { + anim::quadruped_medium::RunAnimation::update_skeleton( + &QuadrupedMediumSkeleton::default(), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + //Swimming + (false, _, true) => anim::quadruped_medium::RunAnimation::update_skeleton( &QuadrupedMediumSkeleton::default(), (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), state.state_time, @@ -1243,6 +1261,15 @@ impl FigureMgr { let target_bones = match &character { CharacterState::BasicMelee(_) => { anim::quadruped_medium::AlphaAnimation::update_skeleton( + &target_base, + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Sit { .. } => { + anim::quadruped_medium::FeedAnimation::update_skeleton( &target_base, time, state.state_time, @@ -1317,7 +1344,15 @@ impl FigureMgr { ) }, // Running - (true, true, _) => anim::quadruped_low::RunAnimation::update_skeleton( + (true, true, false) => anim::quadruped_low::RunAnimation::update_skeleton( + &QuadrupedLowSkeleton::default(), + (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), + // Swimming + (false, _, true) => anim::quadruped_low::RunAnimation::update_skeleton( &QuadrupedLowSkeleton::default(), (vel.0.magnitude(), ori, state.last_ori, time, state.avg_vel), state.state_time, @@ -1344,7 +1379,7 @@ impl FigureMgr { CharacterState::BasicMelee(_) => { anim::quadruped_low::AlphaAnimation::update_skeleton( &target_base, - time, + (vel.0.magnitude(), time), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -1414,7 +1449,15 @@ impl FigureMgr { skeleton_attr, ), // Running - (true, true, _) => anim::bird_medium::RunAnimation::update_skeleton( + (true, true, false) => anim::bird_medium::RunAnimation::update_skeleton( + &BirdMediumSkeleton::default(), + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), + // Running + (false, _, true) => anim::bird_medium::RunAnimation::update_skeleton( &BirdMediumSkeleton::default(), (vel.0.magnitude(), time), state.state_time, @@ -1537,7 +1580,7 @@ impl FigureMgr { ), }; - state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt); + state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt_lerp); state.update( renderer, pos.0, @@ -1619,7 +1662,7 @@ impl FigureMgr { ), }; - state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt); + state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt_lerp); state.update( renderer, pos.0, @@ -1636,8 +1679,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 +1691,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 +1712,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 +1737,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, @@ -1702,7 +1746,7 @@ impl FigureMgr { ), }; - state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt); + state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt_lerp); state.update( renderer, pos.0, @@ -1788,7 +1832,7 @@ impl FigureMgr { ), }; - state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt); + state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt_lerp); state.update( renderer, pos.0, @@ -1874,7 +1918,7 @@ impl FigureMgr { ), }; - state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt); + state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt_lerp); state.update( renderer, pos.0, @@ -2039,7 +2083,7 @@ impl FigureMgr { // Running (true, true, false) => anim::golem::RunAnimation::update_skeleton( &GolemSkeleton::default(), - (vel.0.magnitude(), time), + (vel.0.magnitude(), ori, state.last_ori, time), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -2053,7 +2097,6 @@ impl FigureMgr { skeleton_attr, ), - // TODO! _ => anim::golem::IdleAnimation::update_skeleton( &GolemSkeleton::default(), time, @@ -2062,8 +2105,21 @@ impl FigureMgr { skeleton_attr, ), }; + let target_bones = match &character { + CharacterState::BasicMelee(_) => { + anim::golem::AlphaAnimation::update_skeleton( + &target_base, + (vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ) + }, + // TODO! + _ => target_base, + }; - state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_base, dt); + state.skeleton = anim::vek::Lerp::lerp(&state.skeleton, &target_bones, dt_lerp); state.update( renderer, pos.0, @@ -2309,7 +2365,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, @@ -2329,7 +2385,7 @@ impl FigureMgr { quadruped_low_states, bird_medium_states, fish_medium_states, - critter_states, + theropod_states, dragon_states, bird_small_states, fish_small_states, @@ -2442,14 +2498,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..d7147bc736 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}, generation::{ChunkSupplement, EntityInfo}, msg::server::WorldMapMsg, terrain::{Block, BlockKind, TerrainChunk, TerrainChunkMeta, TerrainChunkSize}, @@ -256,10 +256,6 @@ impl World { comp::Body::BirdMedium(bird_medium::Body::random()) }, 2 => { - is_hostile = false; - comp::Body::Critter(critter::Body::random()) - }, - 3 => { match quadlow { comp::Body::QuadrupedLow(quadruped_low) => { match quadruped_low.species {