From f8a6a48b41e655de41126fa4ed03eb60613fbda6 Mon Sep 17 00:00:00 2001 From: jshipsey Date: Wed, 10 Feb 2021 23:04:03 -0500 Subject: [PATCH] BL improvements, various fixes --- assets/common/abilities/bowsimple/basic.ron | 15 ++ .../common/abilities/hammer/singlestrike.ron | 6 +- .../abilities/hammersimple/doublestrike.ron | 39 +++ .../common/abilities/spear/doublestrike.ron | 12 +- .../common/abilities/staffsimple/firebomb.ron | 18 ++ .../abilities/swordsimple/doublestrike.ron | 39 +++ .../abilities/weapon_ability_manifest.ron | 23 ++ .../items/armor/belt/plate_leather_0.ron | 12 + .../items/armor/chest/plate_leather_0.ron | 12 + .../items/armor/foot/plate_leather_0.ron | 12 + .../items/armor/hand/plate_leather_0.ron | 12 + .../items/armor/pants/plate_leather_0.ron | 12 + .../items/armor/shoulder/plate_leather_0.ron | 12 + .../items/npc_weapons/bow/saurok_bow.ron | 2 +- .../npc_weapons/hammer/cyclops_hammer.ron | 2 +- .../items/npc_weapons/hammer/ogre_hammer.ron | 2 +- .../items/npc_weapons/hammer/troll_hammer.ron | 2 +- .../npc_weapons/staff/mindflayer_staff.ron | 2 +- .../items/npc_weapons/staff/ogre_staff.ron | 2 +- .../items/npc_weapons/staff/saurok_staff.ron | 2 +- .../npc_weapons/sword/dullahan_sword.ron | 2 +- .../items/npc_weapons/sword/saurok_sword.ron | 2 +- .../voxel/armor/belt/plate_leather-0.vox | Bin 0 -> 1512 bytes .../voxel/armor/chest/plate_leather.vox | Bin 0 -> 2960 bytes assets/voxygen/voxel/armor/chest/steel-0.vox | Bin 3072 -> 46139 bytes .../voxel/armor/foot/plate_leather.vox | Bin 0 -> 1520 bytes .../voxel/armor/hand/plate_leather_left-0.vox | Bin 0 -> 1240 bytes .../armor/hand/plate_leather_right-0.vox | Bin 0 -> 1240 bytes .../voxel/armor/pants/plate_leather-0.vox | Bin 0 -> 1944 bytes .../armor/shoulder/plate_leather_left-0.vox | Bin 0 -> 1392 bytes .../armor/shoulder/plate_leather_right-0.vox | Bin 0 -> 1392 bytes .../voxel/biped_large_central_manifest.ron | 89 +------ .../voxel/biped_large_lateral_manifest.ron | 140 +++++----- .../voxel/biped_large_weapon_manifest.ron | 42 +++ .../voxel/bird_medium_lateral_manifest.ron | 48 ++-- .../voxel/fish_medium_lateral_manifest.ron | 4 +- .../voxel/fish_small_lateral_manifest.ron | 4 +- .../voxel/humanoid_armor_belt_manifest.ron | 4 + .../voxel/humanoid_armor_chest_manifest.ron | 6 +- .../voxel/humanoid_armor_foot_manifest.ron | 4 + .../voxel/humanoid_armor_hand_manifest.ron | 10 + .../voxel/humanoid_armor_pants_manifest.ron | 4 + .../humanoid_armor_shoulder_manifest.ron | 10 + .../voxel/npc/alligator/male/foot_bl.vox | Bin 1340 -> 0 bytes .../voxel/npc/alligator/male/foot_fl.vox | Bin 1300 -> 0 bytes .../voxel/npc/archaeos/male/foot_l.vox | Bin 2204 -> 0 bytes .../voxel/npc/archaeos/male/hand_l.vox | Bin 1316 -> 0 bytes .../voxygen/voxel/npc/archaeos/male/leg_l.vox | Bin 2540 -> 0 bytes assets/voxygen/voxel/npc/asp/male/foot_bl.vox | Bin 1348 -> 0 bytes assets/voxygen/voxel/npc/asp/male/foot_fl.vox | Bin 1344 -> 0 bytes .../voxel/npc/axolotl/male/foot_bl.vox | Bin 1144 -> 0 bytes .../voxel/npc/axolotl/male/foot_fl.vox | Bin 1144 -> 0 bytes .../voxel/npc/basilisk/male/foot_bl.vox | Bin 2920 -> 0 bytes .../voxel/npc/basilisk/male/foot_fl.vox | Bin 3088 -> 0 bytes .../voxygen/voxel/npc/batfox/male/foot_bl.vox | Bin 1216 -> 0 bytes .../voxygen/voxel/npc/batfox/male/foot_fl.vox | Bin 1204 -> 0 bytes .../voxygen/voxel/npc/beaver/male/foot_bl.vox | Bin 1356 -> 0 bytes .../voxygen/voxel/npc/beaver/male/foot_fl.vox | Bin 1216 -> 0 bytes .../voxygen/voxel/npc/boar/female/foot_bl.vox | Bin 1296 -> 0 bytes .../voxygen/voxel/npc/boar/female/foot_fl.vox | Bin 1316 -> 0 bytes .../voxygen/voxel/npc/boar/male/foot_bl.vox | Bin 1296 -> 0 bytes .../voxygen/voxel/npc/boar/male/foot_fl.vox | Bin 1316 -> 0 bytes .../voxygen/voxel/npc/cat/female/foot_bl.vox | Bin 1184 -> 0 bytes .../voxygen/voxel/npc/cat/female/foot_fl.vox | Bin 1172 -> 0 bytes assets/voxygen/voxel/npc/cat/male/foot_bl.vox | Bin 1184 -> 0 bytes assets/voxygen/voxel/npc/cat/male/foot_fl.vox | Bin 1172 -> 0 bytes .../voxel/npc/chicken/female/leg_l.vox | Bin 1128 -> 0 bytes .../voxygen/voxel/npc/chicken/male/leg_l.vox | Bin 1128 -> 0 bytes .../voxel/npc/clownfish/male/fin_l.vox | Bin 1132 -> 0 bytes .../voxel/npc/cockatrice/male/leg_l.vox | Bin 1364 -> 0 bytes .../voxel/npc/cockatrice/male/wing_l.vox | Bin 1212 -> 0 bytes .../voxel/npc/crocodile/male/foot_bl.vox | Bin 1340 -> 0 bytes .../voxel/npc/crocodile/male/foot_fl.vox | Bin 1300 -> 0 bytes assets/voxygen/voxel/npc/crow/wing_l.vox | Bin 1292 -> 0 bytes .../voxel/npc/dodarock/male/foot_bl.vox | Bin 1252 -> 0 bytes .../voxel/npc/dodarock/male/foot_fl.vox | Bin 1552 -> 0 bytes .../voxygen/voxel/npc/dog/female/foot_bl.vox | Bin 1300 -> 0 bytes .../voxygen/voxel/npc/dog/female/foot_fl.vox | Bin 1228 -> 0 bytes assets/voxygen/voxel/npc/dog/male/foot_bl.vox | Bin 1300 -> 0 bytes assets/voxygen/voxel/npc/dog/male/foot_fl.vox | Bin 1228 -> 0 bytes .../voxygen/voxel/npc/duck/female/leg_l.vox | Bin 1128 -> 0 bytes assets/voxygen/voxel/npc/duck/male/leg_l.vox | Bin 1128 -> 0 bytes assets/voxygen/voxel/npc/eagle/male/leg_l.vox | Bin 1184 -> 0 bytes .../voxygen/voxel/npc/eagle/male/wing_l.vox | Bin 1532 -> 0 bytes .../voxygen/voxel/npc/fox/female/foot_bl.vox | Bin 1216 -> 0 bytes .../voxygen/voxel/npc/fox/female/foot_fl.vox | Bin 1208 -> 0 bytes assets/voxygen/voxel/npc/fox/male/foot_bl.vox | Bin 1216 -> 0 bytes assets/voxygen/voxel/npc/fox/male/foot_fl.vox | Bin 1208 -> 0 bytes .../voxygen/voxel/npc/frog/male/foot_bl.vox | Bin 1240 -> 0 bytes .../voxygen/voxel/npc/frog/male/foot_fl.vox | Bin 1164 -> 0 bytes .../voxel/npc/fungome/male/foot_bl.vox | Bin 1136 -> 0 bytes .../voxel/npc/fungome/male/foot_fl.vox | Bin 1140 -> 0 bytes .../voxygen/voxel/npc/gecko/male/foot_bl.vox | Bin 1172 -> 0 bytes .../voxygen/voxel/npc/gecko/male/foot_fl.vox | Bin 1168 -> 0 bytes assets/voxygen/voxel/npc/goose/male/leg_l.vox | Bin 1132 -> 0 bytes .../voxel/npc/hakulaq/male/foot_bl.vox | Bin 1400 -> 0 bytes .../voxel/npc/hakulaq/male/foot_fl.vox | Bin 1472 -> 0 bytes .../voxygen/voxel/npc/hare/female/foot_bl.vox | Bin 1272 -> 0 bytes .../voxygen/voxel/npc/hare/female/foot_fl.vox | Bin 1192 -> 0 bytes .../voxygen/voxel/npc/hare/male/foot_bl.vox | Bin 1332 -> 0 bytes .../voxygen/voxel/npc/hare/male/foot_fl.vox | Bin 1128 -> 0 bytes .../voxel/npc/holladon/male/foot_bl.vox | Bin 1200 -> 0 bytes .../voxel/npc/holladon/male/foot_fl.vox | Bin 1248 -> 0 bytes .../voxygen/voxel/npc/hyena/male/foot_bl.vox | Bin 1272 -> 0 bytes .../voxygen/voxel/npc/hyena/male/foot_fl.vox | Bin 1284 -> 0 bytes .../voxel/npc/jackalope/male/foot_bl.vox | Bin 1272 -> 0 bytes .../voxel/npc/jackalope/male/foot_fl.vox | Bin 1192 -> 0 bytes .../voxel/npc/lavadrake/male/foot_bl.vox | Bin 2284 -> 0 bytes .../voxel/npc/lavadrake/male/foot_fl.vox | Bin 2748 -> 0 bytes .../voxel/npc/maneater/male/foot_bl.vox | Bin 1648 -> 0 bytes .../voxel/npc/maneater/male/foot_fl.vox | Bin 1648 -> 0 bytes .../voxygen/voxel/npc/marlin/male/fin_l.vox | Bin 1152 -> 0 bytes .../voxel/npc/monitor/male/foot_bl.vox | Bin 1260 -> 0 bytes .../voxel/npc/monitor/male/foot_fl.vox | Bin 1292 -> 0 bytes .../voxygen/voxel/npc/odonto/male/foot_l.vox | Bin 2952 -> 0 bytes .../voxygen/voxel/npc/odonto/male/hand_l.vox | Bin 1228 -> 0 bytes .../voxygen/voxel/npc/odonto/male/leg_l.vox | Bin 2476 -> 0 bytes assets/voxygen/voxel/npc/owl/female/leg_l.vox | Bin 1196 -> 0 bytes .../voxygen/voxel/npc/owl/female/wing_l.vox | Bin 1364 -> 0 bytes assets/voxygen/voxel/npc/owl/male/leg_l.vox | Bin 1196 -> 0 bytes assets/voxygen/voxel/npc/owl/male/wing_l.vox | Bin 1360 -> 0 bytes .../voxel/npc/pangolin/male/foot_bl.vox | Bin 1304 -> 0 bytes .../voxel/npc/pangolin/male/foot_fl.vox | Bin 1252 -> 0 bytes .../voxygen/voxel/npc/parrot/male/leg_l.vox | Bin 1116 -> 0 bytes .../voxel/npc/peacock/female/leg_l.vox | Bin 1140 -> 0 bytes .../voxel/npc/peacock/female/wing_l.vox | Bin 1236 -> 0 bytes .../voxygen/voxel/npc/peacock/male/leg_l.vox | Bin 1140 -> 0 bytes .../voxygen/voxel/npc/peacock/male/wing_l.vox | Bin 1236 -> 0 bytes assets/voxygen/voxel/npc/pig/male/foot_bl.vox | Bin 1240 -> 0 bytes assets/voxygen/voxel/npc/pig/male/foot_fl.vox | Bin 1196 -> 0 bytes .../voxel/npc/porcupine/male/foot_bl.vox | Bin 1384 -> 0 bytes .../voxel/npc/porcupine/male/foot_fl.vox | Bin 1308 -> 0 bytes .../voxygen/voxel/npc/quokka/male/foot_bl.vox | Bin 1260 -> 0 bytes .../voxygen/voxel/npc/quokka/male/foot_fl.vox | Bin 1204 -> 0 bytes .../voxygen/voxel/npc/rabbit/male/foot_bl.vox | Bin 1208 -> 0 bytes .../voxygen/voxel/npc/rabbit/male/foot_fl.vox | Bin 1148 -> 0 bytes .../voxel/npc/raccoon/male/foot_bl.vox | Bin 1420 -> 0 bytes .../voxel/npc/raccoon/male/foot_fl.vox | Bin 1240 -> 0 bytes .../voxel/npc/raptor_sand/male/foot_l.vox | Bin 1384 -> 0 bytes .../voxel/npc/raptor_sand/male/hand_l.vox | Bin 1672 -> 0 bytes .../voxel/npc/raptor_sand/male/leg_l.vox | Bin 1628 -> 0 bytes .../voxel/npc/raptor_snow/male/foot_l.vox | Bin 1384 -> 0 bytes .../voxel/npc/raptor_snow/male/hand_l.vox | Bin 1616 -> 0 bytes .../voxel/npc/raptor_snow/male/leg_l.vox | Bin 1628 -> 0 bytes .../voxel/npc/raptor_wood/male/foot_l.vox | Bin 1384 -> 0 bytes .../voxel/npc/raptor_wood/male/hand_l.vox | Bin 1684 -> 0 bytes .../voxel/npc/raptor_wood/male/leg_l.vox | Bin 1628 -> 0 bytes assets/voxygen/voxel/npc/rat/male/foot_bl.vox | Bin 1252 -> 0 bytes assets/voxygen/voxel/npc/rat/male/foot_fl.vox | Bin 1212 -> 0 bytes .../voxel/npc/rocksnapper/male/foot_bl.vox | Bin 2124 -> 0 bytes .../voxel/npc/rocksnapper/male/foot_fl.vox | Bin 2188 -> 0 bytes .../voxel/npc/salamander/female/foot_bl.vox | Bin 1260 -> 0 bytes .../voxel/npc/salamander/female/foot_fl.vox | Bin 1268 -> 0 bytes .../voxel/npc/salamander/male/foot_bl.vox | Bin 1244 -> 0 bytes .../voxel/npc/salamander/male/foot_fl.vox | Bin 1268 -> 0 bytes .../voxel/npc/sandshark/male/foot_bl.vox | Bin 2072 -> 0 bytes .../voxel/npc/sandshark/male/foot_fl.vox | Bin 3524 -> 0 bytes .../voxel/npc/sheep/female/foot_bl.vox | Bin 1232 -> 0 bytes .../voxel/npc/sheep/female/foot_fl.vox | Bin 1208 -> 0 bytes .../voxygen/voxel/npc/sheep/male/foot_bl.vox | Bin 1232 -> 0 bytes .../voxygen/voxel/npc/sheep/male/foot_fl.vox | Bin 1208 -> 0 bytes .../voxygen/voxel/npc/skunk/male/foot_bl.vox | Bin 1272 -> 0 bytes .../voxygen/voxel/npc/skunk/male/foot_fl.vox | Bin 1196 -> 0 bytes .../voxel/npc/squirrel/male/foot_bl.vox | Bin 1228 -> 0 bytes .../voxel/npc/squirrel/male/foot_fl.vox | Bin 1164 -> 0 bytes .../voxel/npc/sunlizard/male/foot_l.vox | Bin 1276 -> 0 bytes .../voxel/npc/sunlizard/male/hand_l.vox | Bin 1228 -> 0 bytes .../voxel/npc/sunlizard/male/leg_l.vox | Bin 1364 -> 0 bytes .../voxel/npc/tortoise/male/foot_bl.vox | Bin 1580 -> 0 bytes .../voxel/npc/tortoise/male/foot_fl.vox | Bin 1624 -> 0 bytes .../voxel/npc/truffler/male/foot_bl.vox | Bin 1412 -> 0 bytes .../voxel/npc/truffler/male/foot_fl.vox | Bin 1412 -> 0 bytes .../voxygen/voxel/npc/turtle/male/foot_bl.vox | Bin 1180 -> 0 bytes .../voxygen/voxel/npc/turtle/male/foot_fl.vox | Bin 1180 -> 0 bytes .../voxel/quadruped_low_lateral_manifest.ron | 112 ++++---- .../quadruped_small_lateral_manifest.ron | 208 +++++++-------- .../voxel/theropod_lateral_manifest.ron | 72 +++--- common/src/comp/body.rs | 7 +- common/src/comp/inventory/item/tool.rs | 4 + common/src/comp/inventory/loadout_builder.rs | 14 +- server/src/persistence/json_models.rs | 8 + voxygen/anim/src/biped_large/alpha.rs | 179 +++++++------ voxygen/anim/src/biped_large/idle.rs | 6 +- voxygen/anim/src/biped_large/jump.rs | 4 +- voxygen/anim/src/biped_large/mod.rs | 114 +++++--- voxygen/anim/src/biped_large/run.rs | 239 +++++++++-------- voxygen/anim/src/biped_large/shoot.rs | 243 +++++++++--------- voxygen/anim/src/biped_large/wield.rs | 232 +++++++---------- voxygen/anim/src/biped_small/alpha.rs | 11 +- voxygen/anim/src/character/alpha.rs | 22 +- voxygen/anim/src/character/mod.rs | 3 +- voxygen/anim/src/character/talk.rs | 54 ++++ voxygen/anim/src/quadruped_low/mod.rs | 2 + voxygen/anim/src/quadruped_low/run.rs | 91 +++---- voxygen/anim/src/quadruped_medium/mod.rs | 8 + voxygen/anim/src/quadruped_medium/run.rs | 2 +- voxygen/anim/src/quadruped_small/run.rs | 54 ++-- voxygen/src/hud/util.rs | 4 + voxygen/src/scene/figure/load.rs | 97 ++++--- voxygen/src/scene/figure/mod.rs | 40 ++- 200 files changed, 1425 insertions(+), 1012 deletions(-) create mode 100644 assets/common/abilities/bowsimple/basic.ron create mode 100644 assets/common/abilities/hammersimple/doublestrike.ron create mode 100644 assets/common/abilities/staffsimple/firebomb.ron create mode 100644 assets/common/abilities/swordsimple/doublestrike.ron create mode 100644 assets/common/items/armor/belt/plate_leather_0.ron create mode 100644 assets/common/items/armor/chest/plate_leather_0.ron create mode 100644 assets/common/items/armor/foot/plate_leather_0.ron create mode 100644 assets/common/items/armor/hand/plate_leather_0.ron create mode 100644 assets/common/items/armor/pants/plate_leather_0.ron create mode 100644 assets/common/items/armor/shoulder/plate_leather_0.ron create mode 100644 assets/voxygen/voxel/armor/belt/plate_leather-0.vox create mode 100644 assets/voxygen/voxel/armor/chest/plate_leather.vox create mode 100644 assets/voxygen/voxel/armor/foot/plate_leather.vox create mode 100644 assets/voxygen/voxel/armor/hand/plate_leather_left-0.vox create mode 100644 assets/voxygen/voxel/armor/hand/plate_leather_right-0.vox create mode 100644 assets/voxygen/voxel/armor/pants/plate_leather-0.vox create mode 100644 assets/voxygen/voxel/armor/shoulder/plate_leather_left-0.vox create mode 100644 assets/voxygen/voxel/armor/shoulder/plate_leather_right-0.vox create mode 100644 assets/voxygen/voxel/biped_large_weapon_manifest.ron delete mode 100644 assets/voxygen/voxel/npc/alligator/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/alligator/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/archaeos/male/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/archaeos/male/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/archaeos/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/asp/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/asp/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/axolotl/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/axolotl/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/basilisk/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/basilisk/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/batfox/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/batfox/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/beaver/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/beaver/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/boar/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/boar/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/boar/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/boar/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/cat/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/cat/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/cat/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/cat/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/chicken/female/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/chicken/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/clownfish/male/fin_l.vox delete mode 100644 assets/voxygen/voxel/npc/cockatrice/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/cockatrice/male/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/crocodile/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/crocodile/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/crow/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/dog/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/dog/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/dog/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/dog/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/duck/female/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/duck/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/eagle/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/eagle/male/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/fox/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/fox/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/fox/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/fox/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/frog/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/frog/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/fungome/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/fungome/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/gecko/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/gecko/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/goose/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/hakulaq/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/hakulaq/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/hare/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/hare/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/hare/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/hare/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/holladon/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/holladon/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/hyena/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/hyena/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/lavadrake/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/lavadrake/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/maneater/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/maneater/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/marlin/male/fin_l.vox delete mode 100644 assets/voxygen/voxel/npc/monitor/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/monitor/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/odonto/male/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/odonto/male/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/odonto/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/owl/female/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/owl/female/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/owl/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/owl/male/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/pangolin/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/pangolin/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/parrot/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/peacock/female/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/peacock/female/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/peacock/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/peacock/male/wing_l.vox delete mode 100644 assets/voxygen/voxel/npc/pig/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/pig/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/porcupine/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/porcupine/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/quokka/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/quokka/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/rabbit/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/rabbit/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/raccoon/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_sand/male/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_sand/male/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_sand/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_snow/male/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_snow/male/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_snow/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_wood/male/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_wood/male/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/raptor_wood/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/rat/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/rat/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/rocksnapper/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/rocksnapper/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/salamander/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/salamander/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/salamander/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/salamander/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/sandshark/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/sandshark/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/sheep/female/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/sheep/female/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/skunk/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/skunk/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/sunlizard/male/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/sunlizard/male/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/sunlizard/male/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/tortoise/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/tortoise/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/truffler/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/truffler/male/foot_fl.vox delete mode 100644 assets/voxygen/voxel/npc/turtle/male/foot_bl.vox delete mode 100644 assets/voxygen/voxel/npc/turtle/male/foot_fl.vox create mode 100644 voxygen/anim/src/character/talk.rs diff --git a/assets/common/abilities/bowsimple/basic.ron b/assets/common/abilities/bowsimple/basic.ron new file mode 100644 index 0000000000..cbc6e28040 --- /dev/null +++ b/assets/common/abilities/bowsimple/basic.ron @@ -0,0 +1,15 @@ +BasicRanged( + energy_cost: 0, + buildup_duration: 0.5, + recover_duration: 0.3, + projectile: Arrow( + damage: 70.0, + knockback: 5.0, + energy_regen: 40, + ), + projectile_body: Object(Arrow), + projectile_light: None, + projectile_gravity: Some(Gravity(0.2)), + projectile_speed: 100.0, + can_continue: true, +) diff --git a/assets/common/abilities/hammer/singlestrike.ron b/assets/common/abilities/hammer/singlestrike.ron index 1332b94e67..22848b8746 100644 --- a/assets/common/abilities/hammer/singlestrike.ron +++ b/assets/common/abilities/hammer/singlestrike.ron @@ -8,9 +8,9 @@ ComboMelee( knockback: 10.0, range: 4.5, angle: 50.0, - base_buildup_duration: 0.6, - base_swing_duration: 0.15, - base_recover_duration: 0.3, + base_buildup_duration: 0.5, + base_swing_duration: 0.1, + base_recover_duration: 0.2, forward_movement: 0.0, )], initial_energy_gain: 50, diff --git a/assets/common/abilities/hammersimple/doublestrike.ron b/assets/common/abilities/hammersimple/doublestrike.ron new file mode 100644 index 0000000000..0feb79deaa --- /dev/null +++ b/assets/common/abilities/hammersimple/doublestrike.ron @@ -0,0 +1,39 @@ +ComboMelee( + stage_data: [ + ( + stage: 1, + base_damage: 90, + damage_increase: 10, + base_poise_damage: 0, + poise_damage_increase: 0, + knockback: 8.0, + range: 3.5, + angle: 50.0, + base_buildup_duration: 0.6, + base_swing_duration: 0.08, + base_recover_duration: 0.6, + forward_movement: 2.5, + ), + ( + stage: 2, + base_damage: 130, + damage_increase: 15, + base_poise_damage: 0, + poise_damage_increase: 0, + knockback: 12.0, + range: 3.5, + angle: 30.0, + base_buildup_duration: 0.5, + base_swing_duration: 0.1, + base_recover_duration: 0.5, + forward_movement: 2.0, + ), + ], + initial_energy_gain: 0, + max_energy_gain: 0, + energy_increase: 0, + speed_increase: 0.0, + max_speed_increase: 0.0, + scales_from_combo: 0, + is_interruptible: false, +) \ No newline at end of file diff --git a/assets/common/abilities/spear/doublestrike.ron b/assets/common/abilities/spear/doublestrike.ron index 22a03999c8..b7035b1dc0 100644 --- a/assets/common/abilities/spear/doublestrike.ron +++ b/assets/common/abilities/spear/doublestrike.ron @@ -9,9 +9,9 @@ ComboMelee( knockback: 8.0, range: 3.5, angle: 50.0, - base_buildup_duration: 350, - base_swing_duration: 75, - base_recover_duration: 400, + base_buildup_duration: 0.35, + base_swing_duration: 0.075, + base_recover_duration: 0.4, forward_movement: 2.5, ), ( @@ -23,9 +23,9 @@ ComboMelee( knockback: 12.0, range: 3.5, angle: 30.0, - base_buildup_duration: 500, - base_swing_duration: 100, - base_recover_duration: 500, + base_buildup_duration: 0.5, + base_swing_duration: 0.1, + base_recover_duration: 0.5, forward_movement: 2.0, ), ], diff --git a/assets/common/abilities/staffsimple/firebomb.ron b/assets/common/abilities/staffsimple/firebomb.ron new file mode 100644 index 0000000000..16444d31a3 --- /dev/null +++ b/assets/common/abilities/staffsimple/firebomb.ron @@ -0,0 +1,18 @@ +BasicRanged( + energy_cost: 0, + buildup_duration: 0.5, + recover_duration: 0.35, + projectile: Fireball( + damage: 100.0, + radius: 5.0, + energy_regen: 50, + ), + projectile_body: Object(BoltFire), + /*projectile_light: Some(LightEmitter { + col: (1.0, 0.75, 0.11).into(), + ..Default::default() + }),*/ + projectile_gravity: Some(Gravity(0.3)), + projectile_speed: 60.0, + can_continue: true, +) diff --git a/assets/common/abilities/swordsimple/doublestrike.ron b/assets/common/abilities/swordsimple/doublestrike.ron new file mode 100644 index 0000000000..e7523eb2fd --- /dev/null +++ b/assets/common/abilities/swordsimple/doublestrike.ron @@ -0,0 +1,39 @@ +ComboMelee( + stage_data: [ + ( + stage: 1, + base_damage: 90, + damage_increase: 10, + base_poise_damage: 0, + poise_damage_increase: 0, + knockback: 8.0, + range: 3.5, + angle: 50.0, + base_buildup_duration: 0.4, + base_swing_duration: 0.1, + base_recover_duration: 0.5, + forward_movement: 2.5, + ), + ( + stage: 2, + base_damage: 130, + damage_increase: 15, + base_poise_damage: 0, + poise_damage_increase: 0, + knockback: 12.0, + range: 3.5, + angle: 30.0, + base_buildup_duration: 0.5, + base_swing_duration: 0.1, + base_recover_duration: 0.5, + forward_movement: 2.0, + ), + ], + initial_energy_gain: 0, + max_energy_gain: 0, + energy_increase: 0, + speed_increase: 0.0, + max_speed_increase: 0.0, + scales_from_combo: 0, + is_interruptible: false, +) \ No newline at end of file diff --git a/assets/common/abilities/weapon_ability_manifest.ron b/assets/common/abilities/weapon_ability_manifest.ron index 5f415d04e1..5b54bfeb16 100644 --- a/assets/common/abilities/weapon_ability_manifest.ron +++ b/assets/common/abilities/weapon_ability_manifest.ron @@ -35,6 +35,29 @@ skills: [], ), + HammerSimple: ( + primary: "common.abilities.hammersimple.doublestrike", + secondary: "common.abilities.hammersimple.doublestrike", + skills: [], + + ), + SwordSimple: ( + primary: "common.abilities.swordsimple.doublestrike", + secondary: "common.abilities.swordsimple.doublestrike", + skills: [ + ], + ), + StaffSimple: ( + primary: "common.abilities.staffsimple.firebomb", + secondary: "common.abilities.staffsimple.firebomb", + skills: [], + ), + BowSimple: ( + primary: "common.abilities.bowsimple.basic", + secondary: "common.abilities.bowsimple.basic", + skills: [ + ], + ), Staff: ( primary: "common.abilities.staff.firebomb", secondary: "common.abilities.staff.flamethrower", diff --git a/assets/common/items/armor/belt/plate_leather_0.ron b/assets/common/items/armor/belt/plate_leather_0.ron new file mode 100644 index 0000000000..f4cd29068b --- /dev/null +++ b/assets/common/items/armor/belt/plate_leather_0.ron @@ -0,0 +1,12 @@ +ItemDef( + name: "Leather Plate Belt", + description: "Leather adorned with steel for better protection.", + kind: Armor(( + kind: Belt("PlateLeather"), + stats: ( + protection: Normal(4.0), + poise_resilience: Normal(8.0), + ), + )), + quality: Moderate, +) \ No newline at end of file diff --git a/assets/common/items/armor/chest/plate_leather_0.ron b/assets/common/items/armor/chest/plate_leather_0.ron new file mode 100644 index 0000000000..95319d2496 --- /dev/null +++ b/assets/common/items/armor/chest/plate_leather_0.ron @@ -0,0 +1,12 @@ +ItemDef( + name: "Leather Plate Chest", + description: "Leather adorned with steel for better protection.", + kind: Armor(( + kind: Chest("PlateLeather"), + stats: ( + protection: Normal(25.0), + poise_resilience: Normal(40.0), + ), + )), + quality: High, +) \ No newline at end of file diff --git a/assets/common/items/armor/foot/plate_leather_0.ron b/assets/common/items/armor/foot/plate_leather_0.ron new file mode 100644 index 0000000000..8cc46f984f --- /dev/null +++ b/assets/common/items/armor/foot/plate_leather_0.ron @@ -0,0 +1,12 @@ +ItemDef( + name: "Leather Plate Boots", + description: "Leather adorned with steel for better protection.", + kind: Armor(( + kind: Foot("PlateLeather"), + stats: ( + protection: Normal(5.0), + poise_resilience: Normal(10.0), + ), + )), + quality: High, +) \ No newline at end of file diff --git a/assets/common/items/armor/hand/plate_leather_0.ron b/assets/common/items/armor/hand/plate_leather_0.ron new file mode 100644 index 0000000000..175ea986bc --- /dev/null +++ b/assets/common/items/armor/hand/plate_leather_0.ron @@ -0,0 +1,12 @@ +ItemDef( + name: "Leather Plate Gloves", + description: "Leather adorned with steel for better protection.", + kind: Armor(( + kind: Hand("PlateLeather"), + stats: ( + protection: Normal(10.0), + poise_resilience: Normal(15.0), + ), + )), + quality: Moderate, +) \ No newline at end of file diff --git a/assets/common/items/armor/pants/plate_leather_0.ron b/assets/common/items/armor/pants/plate_leather_0.ron new file mode 100644 index 0000000000..b18198aee1 --- /dev/null +++ b/assets/common/items/armor/pants/plate_leather_0.ron @@ -0,0 +1,12 @@ +ItemDef( + name: "Leather Plate Chausses", + description: "Leather adorned with steel for better protection.", + kind: Armor(( + kind: Pants("PlateLeather"), + stats: ( + protection: Normal(20.0), + poise_resilience: Normal(26.0), + ), + )), + quality: Moderate, +) \ No newline at end of file diff --git a/assets/common/items/armor/shoulder/plate_leather_0.ron b/assets/common/items/armor/shoulder/plate_leather_0.ron new file mode 100644 index 0000000000..0a52263a84 --- /dev/null +++ b/assets/common/items/armor/shoulder/plate_leather_0.ron @@ -0,0 +1,12 @@ +ItemDef( + name: "Leather Plate Shoulder Pad", + description: "Leather adorned with steel for better protection.", + kind: Armor(( + kind: Shoulder("PlateLeather"), + stats: ( + protection: Normal(15.0), + poise_resilience: Normal(20.0), + ), + )), + quality: Moderate, +) \ No newline at end of file diff --git a/assets/common/items/npc_weapons/bow/saurok_bow.ron b/assets/common/items/npc_weapons/bow/saurok_bow.ron index 8b52c2891c..37e3f8bea8 100644 --- a/assets/common/items/npc_weapons/bow/saurok_bow.ron +++ b/assets/common/items/npc_weapons/bow/saurok_bow.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Bow, + kind: BowSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/hammer/cyclops_hammer.ron b/assets/common/items/npc_weapons/hammer/cyclops_hammer.ron index b128b795a7..7c10458ed1 100644 --- a/assets/common/items/npc_weapons/hammer/cyclops_hammer.ron +++ b/assets/common/items/npc_weapons/hammer/cyclops_hammer.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Hammer, + kind: HammerSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/hammer/ogre_hammer.ron b/assets/common/items/npc_weapons/hammer/ogre_hammer.ron index e6ff3fbc50..0ab8068dff 100644 --- a/assets/common/items/npc_weapons/hammer/ogre_hammer.ron +++ b/assets/common/items/npc_weapons/hammer/ogre_hammer.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Hammer, + kind: HammerSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/hammer/troll_hammer.ron b/assets/common/items/npc_weapons/hammer/troll_hammer.ron index bd0cdc0598..1f04179292 100644 --- a/assets/common/items/npc_weapons/hammer/troll_hammer.ron +++ b/assets/common/items/npc_weapons/hammer/troll_hammer.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Hammer, + kind: HammerSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/staff/mindflayer_staff.ron b/assets/common/items/npc_weapons/staff/mindflayer_staff.ron index 24c5ff3980..257e19af95 100644 --- a/assets/common/items/npc_weapons/staff/mindflayer_staff.ron +++ b/assets/common/items/npc_weapons/staff/mindflayer_staff.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Staff, + kind: StaffSimple, hands: Two, stats: Direct(( equip_time_millis: 300, diff --git a/assets/common/items/npc_weapons/staff/ogre_staff.ron b/assets/common/items/npc_weapons/staff/ogre_staff.ron index e4fa9b5e55..c4cca908ff 100644 --- a/assets/common/items/npc_weapons/staff/ogre_staff.ron +++ b/assets/common/items/npc_weapons/staff/ogre_staff.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Staff, + kind: StaffSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/staff/saurok_staff.ron b/assets/common/items/npc_weapons/staff/saurok_staff.ron index be87572e33..8ee0b015e4 100644 --- a/assets/common/items/npc_weapons/staff/saurok_staff.ron +++ b/assets/common/items/npc_weapons/staff/saurok_staff.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placeholder", kind: Tool( ( - kind: Staff, + kind: StaffSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/sword/dullahan_sword.ron b/assets/common/items/npc_weapons/sword/dullahan_sword.ron index a879869db7..d3b3ba1b8e 100644 --- a/assets/common/items/npc_weapons/sword/dullahan_sword.ron +++ b/assets/common/items/npc_weapons/sword/dullahan_sword.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placehoder", kind: Tool( ( - kind: Sword, + kind: SwordSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/common/items/npc_weapons/sword/saurok_sword.ron b/assets/common/items/npc_weapons/sword/saurok_sword.ron index 3d22dd8f9b..722280e1c3 100644 --- a/assets/common/items/npc_weapons/sword/saurok_sword.ron +++ b/assets/common/items/npc_weapons/sword/saurok_sword.ron @@ -3,7 +3,7 @@ ItemDef( description: "Placehoder", kind: Tool( ( - kind: Sword, + kind: SwordSimple, hands: Two, stats: Direct(( equip_time_millis: 500, diff --git a/assets/voxygen/voxel/armor/belt/plate_leather-0.vox b/assets/voxygen/voxel/armor/belt/plate_leather-0.vox new file mode 100644 index 0000000000000000000000000000000000000000..d8161dc3b5c53f81f4ef58e246834ad62c8e35a0 GIT binary patch literal 1512 zcmbW0e@Im`5h232?{WV`#DWfdc;DyO`##_2 zoKt)JRBAv(DoZ@axX6kwQseQupD+zR5yVPVa;nbj`Ap%4PczXJ*|r!;P&X8)MC0D7 zDnUb4wpCr()`)81N-UxTHKK|#tZ=m`^b?gRL=^g1r^ zqi}8tV;pKwp$?%Qh516A3VRf4A~;40AZ{Jf8VMPD z8nO_F=t@ESSwWUN1N&|ZB3cDc`UNoqg19dPxs_3;_C(J7X|wQ0@s{CUgP~;5s;y$Ak#MV zWbDGk!C0)klmt{fhe8o}$WP=qGSn%Ux+<8T5Zt>%yI3&h7JPj|uy#h^rQKO87-*!w zLs04vG`t|_C=+Zg-avJ3B3j&O=&H6O(By>gWIh7Tr5J1~0hY&*wI>cPX9|wKY)4aV zK3XdT{?`Q~?+E5T5acB%!jqYf`n>&UFDpQ8W*k~_lhA*7FG39m;H@e_>l?@5J9iqr z7tWyTZ7&8cwIVce8S6iMj;N?8?2g%m)YMdDJJOK1|9QOVbinP(#_{q347~dcrbg57 z^Sw;0-Os{DyfZW|SiURx^+!QhiyhbfIas(=ip^hY(B2!3{+l-3d60lLq&!ytbkER6u)-`vq(crf{Y>(9x_!Ik_G9LOF+VNW*_{0Uh6M6hyNfbnrS91e7Jbl}w^ z(-40bV%uXebM4VPypYImCpj5cE)Aima1f2Xm$ADc9{0c8iy3bM2062T&cC{H4s|EP zsH<5rhu=Kv z?;*dh|B9Ra+4#RjM)IFw{@=mfacpjGVry$_$6r-dh4S)pxLhtcole;8c8rdWVsdg4 xp->33v$I%QT0%G+#_H-SHa0fk^?K3R*od~aHgtA&qPx2reSLih1On!n@)z13eB%HB literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/chest/plate_leather.vox b/assets/voxygen/voxel/armor/chest/plate_leather.vox new file mode 100644 index 0000000000000000000000000000000000000000..0da2fbb466526b263c21af71bec71e8c36b5a58d GIT binary patch literal 2960 zcmbW2Z-`aL8HeYbGjnFnIrqw@t{SyfyD@cFLlRe`wQlWNU6VC2abqKKW2KapM7FVE zDPm*^#BBmrZHo!<8{xdi#57al)?!ihuF+w*KD7eAF5MsLO}V*roMqqk5bW~_{MC}Lc+6IbF>MLlCdY=v(Xb@)`+EwV-S z*or8lD`Gxk9AkhITN!iVS1{(R6%sQQ;yTz|wBhHN=g2^`;B8_C98k~BPH zNYbf*9BjfGkv#EfN?fLpC*(lqfw@l^v4yBZ_UJu6C1c50kf)4#@_6$3<~-&~r+lyt zm)NlqT|s<7o&ukodUE26EF@LbyO6l3!?#EsJ|QWabul*m(UC95Kj2#?8GhtJw%Cj4 zOH37g-`@rAhlgBx^b7IOQZP;kT&ymN)^)jCn)+ZHq3t4k*PaHaY^CWBJtnbM0 zu+_j)w}ZS{UrH^^*`JGb#U8|c5$A|^?A0~?^=Tsn<;IWt9P8HM|z#-@8s_096MU54Eskpxt`>yC`MQD}@Xa)<_|XBX1^ylyk`-rGHt3J!IUuik@1isJ+Hp zui|~k<322FF#2@L(nH(qCEwZDM+m%S4|I`lqZMB+@lyE4avqQoQ-hTEUWYW^Z%A|Y z2`TH>V-0-kYmg=M71Cxe@N4!XYjAC;2fz4zfRz5!q2xcoL6uN5aXuJXWQ!b-i;y(} zR6e10zF+aKL5|KxJ$KAPjsKSnYW%-skO#h{A(;wLAm<^)pM67t{N%%5U2E)}|5foD z9v;?>qehRsbxHTM{zHFjZPmq#o1#hY^#1ZwY3ZJ+)!QFZ&$rg7V|mq>vVMI zTIuQuExBi=x;p3U(XX^?=hl@P+-NlNb))g`7+v^*(TaI<)Vp}0wy(HfL+e**>*AT( zwS2A)KYXtyc08c|&1*IIjmI_o!ZSMf(zDw4?S373Wl$5RUe%4?|4da?>F()wX~BX8 zTH4X3759HZU+U~oPuEgCv0;^teD||DbG%J|`e3oHf4D?HV$F$@MpxfA`pX}T_U&rd zn78}D_2(@bI@qGaZ@22bk7nz-=6~w`-=r`9ZT~tqB3&7me)o2B|EnLI_kZty z*|KGNZRNNgSb9RM5A4_Mk=eTZ6QhrxG1AGC>geduo;`c?*du3UM)qmO&5x0Z=POz<(Ss2KB|F(uj=j{v-IIF?$x>e**Z$k{z!0j=3Tu19}-L0jIPRCjl`ZcvH|pua1dH2UP%ck26u`}M!< zvA$N`TUqjE@c(!8{z=`sbxXHz-)`zRZ{Dm88#bt`t4p1oooa7y*YV@Wb^7#aO-xMa y{Q2{`a^;F9Cnt67+BMz0c~kxU{Tdh;(C*#4wRi7c?ccv&hYlUm=;&z7Y5obc{YT~i literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/chest/steel-0.vox b/assets/voxygen/voxel/armor/chest/steel-0.vox index c61d68b9bf9f8e5d6b5a31156b45218ce9a6b25d..bfd59b282d903bc85e304f3e96d1714fc3206cbe 100644 GIT binary patch literal 46139 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 literal 3072 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/hand/plate_leather_left-0.vox b/assets/voxygen/voxel/armor/hand/plate_leather_left-0.vox new file mode 100644 index 0000000000000000000000000000000000000000..e097aa7209d61649569fb348a4ebb5d9791f0f0c GIT binary patch literal 1240 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 MJBCCeVfK{20H+4AsQ>@~ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/armor/shoulder/plate_leather_left-0.vox b/assets/voxygen/voxel/armor/shoulder/plate_leather_left-0.vox new file mode 100644 index 0000000000000000000000000000000000000000..3f612c23b4c4f76341250fe082ca4648e6b986c0 GIT binary patch literal 1392 zcmbW0e@LBW6vxl|-g`~7!sS(`mYQ?vRoUi`X{MPrubVD6olWMQjR<8E+Zqz$}>&U3!!d(L^@ z=dC+@EXgk-Rizb&)JTIvq_)E2e$sMusVh$?Y>H#`o{CIEH@YenhRwt<%ptp71`WHh zspLUD9WvC~^vtwiGdB&jvIXVa6%J$5v>8J-hcRS2%ppdmXRYy7E(E3`#(7r@{)6hN*8aDAQ~&OiCx>11xM$_jC_;;Y9Zq9mHahP}AoF2*%nfVdqbKVkeT{nFChT(w zCteiV%7l%D>(u1N(dRmP*0* zhA{lDF#Dm9mk>uqdI}AByJ#&dpe{X{=G=IC_wOWdVmF@ZQd-_Tg!k-my3e1a;~fuu z7h4F7Ut;x#&j}9?XM5x}l9H0hawU_u>jhrQcHu6{;&6EZeeXTXxRjcdLf=5Ov}{g+x=yCdkm;pF!HSXM}U?EKgCUjA)Cntx?`NQna8l|wSlUQFY3!e%Pjth*9;c~fXYir}R15=2vgQ(UhrmsHw zhUeq-?Ia{{`QiY@h5a;kUt;@-818+!lW9*Z{d#Bry#Jc2S?Z4lsjpq4^%R`DI*#wN z03S?!$4B1=*?YE&;?7|Xelkn#tso^OC9G;I5~|=2Y(e4SH;?*zsPF5);#Pl7{olgE z^q*1w-@%}>&U3!!d(L^@ z=dC+@EXgk-Rizb&)JTIvq_)E2e$sMusVh$?Y>H#`o{CIEH@YenhRwt<%ptp71`WHh zspLUD9WvC~^vtwiGdB&jvIXVa6%J$5v>8J-hcRS2%ppdmXRYy7E(E3`#(7r@{)6hN*8aDAQ~&OiCx>11xM$_jC_;;Y9Zq9mHahP}AoF2*%nfVdqbKVkeT{nFChT(w zCteiV%7l%D>(u1N(dRmP*0* zhA{lDF#Dm9mk>uqdI}AByJ#&dpe{X{=G=IC_wOWdVmF@ZQd-_Tg!k-my3e1a;~fuu z7h4F7Ut;x#&j}9?XM5x}l9H0hawU_u>jhrQcHu6{;&6EZeeXTXxRjcdLf=5Ov}{g+x=yCdkm;pF!HSXM}U?EKgCUjA)Cntx?`NQna8l|wSlUQFY3!e%Pjth*9;c~fXYir}R15=2vgQ(UhrmsHw zhUeq-?Ia{{`QiY@h5a;kUt;@-818+!lW9*Z{d#Bry#Jc2S?Z4lsjpq4^%R`DI*#wN z03S?!$4B1=*?YE&;?7|Xelkn#tso^OC9G;I5~|=2Y(e4SH;?*zsPF5);#Pl7{olgE z^q*1w-@%uV9iSo0vJ5u@jm9677_ux`mIeJ`V#u-><6nOmvwx4LEK5kl=uMvYIbZjj zd(L}r=+$FI2_kAe6lh~2kBO)~(AoHGO5v5pU=wMKW5+uKkC{{JrPN2zkVPq*&}c|8 zEK=DlLg^MIt)ys3BWY74b+eMX6w;=#&&)9WvMH9O z6uM$aBC90H;20rnnpC>toQn4<61pZO=S}IUyi(VMw3;~Hq?FaHI99Ta&t*~^$2Bcd z8Wtf9lN5$Yh+;F#X0~Zk6iZ2NDacUFipbD}a4SJ>jYRR$rdJMa4ujjTuC7KT62YSw z;qVu0aN8f_PrDtftF1__8-W$HHNSupJvE37H)CZifR)$@tW2Lq)ylibD#$@bjujbB zJG`^|L5(KRz%!tE8)(getX4wKDMG;%VfRf!+5jOVO3+z%Tqj(dY(ab`h|6;wxR`t% z4G}^xPIz;XaOMH;4d%fWHc%4rp>nwn`Ga;C6M6706vBUJCvv(8B_DC_1lQQ(2EE4h zN7F#@Owf`Y`Mxpi_J`r#GXfkbMw|#q#@nqf{Kgy~AuN7MSiMTPdyDlt!h9p)o1=t{ zw+P`T!bpfP6?WkK8-zrd&|6IyZXnFCJ-9Cq;YI_aK@Spr<%o1tA<_^DwKzLt1CYnmI+*^jm zT0aVEFJrQj=TVb|sgDQH)^q?pp#~(cT|n#|1Cg$Lq^GANSGS^UryG8+fy%u*aG>0a zsdEKboHOwAT^}~?@51L?b9sSq?>oY;KN3d69?V25uy&&!fBe#p!SO6iT(jfW11C06 zh)$lzX8$L7F2jU+@4xqds$~bF@AV;ZZWs$!#y9(ShyVZg zUr|wkPpW27=ATE+*jYHEPTcvD@KYDzy2k^r*NcAlFj@{Tfuf_x9?V8^`pG~1Adl~k z%Y_e1<2YCo!^!dU$nDL+{jW=r>~tblRP>Mer{Yq%j5kP4S`~|g6c=+v;^F8GI^~eOv<}qaOJ4zpt13f8E#h z+;`i{2lHYg(zqwoWJtsz(h_Q~eP-1VdCG7cw!y(e?V+W={iSi%(wksumz5yB+8{x+ zTUnM{TiR)KdX-X6r44M$t+eG-DjriVEy`sp?Q~e$t+lb0aydjhEt6v@aaqdbI>c?+ z23lO&Auii!+S)R?+U+p9w%KEgc4=)ijedfqd_7L?S#I6ZU;}2fyb}e)o7-Tx=x%T@TIE zRR26jJ1dFw)iXaBVt(u>^Ajg2pMRUwoOF`Yog`;^2u$rnY8^=T)5x?7xsyg}qmX_= z$Qc#3+z=AGh2*H$AeCC9}6V3vbv*K_p1o zTs7G}9(==D1ZQ$7zPpL^4x!)!qa8Cfw)&A*O#OjGWIP4A_NP%*l1u%IMI3J{r+dE;?G&co6>g6R zW!@}8!2&wUw$W3wleS z41|lAjFxie`d)tfsfC`QREDp5xVe@v*cK*AVrTl8 zxiqxezc=Gqg1!v|b5p1cq|jQCOl$G~@4vLPl#j}%*j_wM<=|;DqnX_OT=?OzaIL6_ zKp;SuzmJA}w~*)n8+tadF!A^wzL#b0j@Qfkh2!k59OKx~Su&2K^We)u7TPlz%gg)6 z{Ns6XtwSyM>FI(~6IY0SF~@~l-|@+}%e-)Mklm-JsK0cZmK)1dS6A~$KoSl31HCLf p{QB|v9-900UvcvUSKrxMzI?cYCw4seWW64*=UcmH?RuSD`3qFgAISg! diff --git a/assets/voxygen/voxel/npc/archaeos/male/foot_l.vox b/assets/voxygen/voxel/npc/archaeos/male/foot_l.vox deleted file mode 100644 index 6978cdf79f02a73e662faf156c2c48eb32e7e574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2204 zcmXX|4Q!Rw89wJbf8Y0kfeL1E5Hb-u1X`8?Eh{Z81#HWIt^K3?gJlA}^M3cM4(*C7@cxb zC!Mr$ZB*o>i2~0hwDl6cwo#yLGE_PhdWOidibAF0KI5GtJevrlP5RQreQICXRNxWP z(5@4KW<6zS%huJ&K&pfId?t#K=_V1PR1?S5ZbYh z=aRn9HTbmqv{P$p$FsIJyI1r}$9n9`YTgAe@(Cxsq$NVnV}D-KCmgl)yp-`g-YYK^ zDB209yvQn#XG^Ej zMaG089S~v2yBdg&Fc2AO>9ZoOj9|V4C4aMX^BTFE9Q#-|Hgpd z&BFt@wdH9vJ&=!ozwtKy`O-yfEG)sl`cL6}bu&K6^x>TqF?_J3761L{7Jih;;GL0+ zad>7icH~UO?UN_*`lc4_sw~6V{{0v|Y6Ql9eKf|7`5Jy%UV$IaF2?)U2GLhlj>NoK zxIU*CbrpqpR|tH5U^~vwpMi_r+wghkCUh?@#_mxTy`wF@cdx^(+j;8}Py2I6hlF7JqABh#T#-_{qv5)R*Ps zkNaZiT~UJ1PVT~yO^a~lappbSf&-aW9NkceKOb0&ZM9QzedlrxCY)*G<8hwnFqr)%f_pY+Qdb56{IO zM67Na{xT59`xp1(`z^(Ib#EPhdbka{Tc+bmPcCqF4BkDMi=ktAc=OM-B4@;KecAZ9(6_BJ4Z;1kT?$f{mLS(eXkVc3o+~ z!lqJGtj$ABY%cZ(~b)P`})&v?ld(e39CZ?=O zp}6-o3qE2+#FhMbDPY*u40M=xsZX+R|p6>-`lDww^;<#Sc(2Z7vp$ zUxk)}PBcy3fbUN4Lc`()40H{mY)T;-CYND#>2gFHVp#vsqiD@<#+8D-I8mKJeSQ)C zP|}07MRV}woqzC^-o?*;ehHVa4B{7Wa{kUF9^3R7YMW}YY*`f^nOBOUl36G&$i?m3 pw=py{gu%f8Jnz diff --git a/assets/voxygen/voxel/npc/archaeos/male/hand_l.vox b/assets/voxygen/voxel/npc/archaeos/male/hand_l.vox deleted file mode 100644 index 93aa6ae8bdbf76a6bbc3e65692cdb84fe98c0a3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316 zcmW-h3rv+|7{|Zw{mucrO-|6lU@lP+5sr;}N05sUAU6>YcjcysrLJX7@m5>9inP@%b^ZGA+5Y>#@AE#-|9PIhd*77Av^P2= zNs14PNl;0$*Gf`yOh)AF>5Xa{6*eknsz^)Eh`Fcov<0Y8gj^*wQngTQoz%c8MJQH9 z2&>S_7FjFGC9Pa03#D9=ZOeq1;Utt9PKsjZq$*m4#?DEWZAxWfYmtS@s!!G^7Fi?I zwbmlb8mkZ*m9^!v(5P|RQdv>Ym1&=?MUqtwMJbh3pQLI?LSvO=tyR(pi_l6INh_5J zjVKd}UAd68Wn#LPq*3$KI7wTkO!uPpqzJVSVdo|*)39|H!fuHWwr*>q!oyw;ug-~T zx4ZheU$mR_1$zFubd|r353nqr+TWUU$UB`8B={4d>Gp25ycG(;6L0*{VRsR~j&e`*U3_ z|D=5z0};LqHrDc_rhvvc13MgSXmPaRy;roIs_ve@P9BPw28LwYMXSN6Tk5y5h>CKC-co^Ewqg@_6I`R&El@WC0>zSzb zWR^5~alpI~vvE1U_FK3)*vtne1819!eBM>T4wDZf zO>WTV%=Jz;CXae?xzmS#FGh0vd=*1&-aI@T#naJn+`X4lTxj5QcN(XgHuLQJoiJv{ zAH$27IGK&#!a4XYb|F%)BY24pKlfKTygPv6oJBNL`n|jh-Q3ye?Cp8}Ac-HZwsP`N zIFmP4aP(jj7e+%=eJ>mwXR@uyi@yFUa&rTTP4FNyPfvW(TkLErqP0Jkwv$^Jm^jGB z!ZfxX4xwSh#Om~5!gIVxGKbODzlZl*YH+Sw$@&v@_@@NnTAM`o4}%nLE5)lMmbcf( zv1pH(hGTn?b`~=uH=20~p?H?(AbooRskasB*%jO(gE0-A!)-@Bp_xYB%t)bfbc}$a z5{};anTn46nD!l_Zu~oZj-6+AbU1TTa#hXa_!N}0I60m9joqXamyuf2MB16#EX%fH zXgP;I%Z!w_o!Y@WBy~@s@43q?dk5w&4#jSs7gE+KX8D@g+Ij=C^%LCYN1^ksCn0e! z3+5ZyRd5nZ(3s)~*UBASe)nw;NMaQ%p`yGCVv?Z*MP+jg3@P VRA4k3iHL~6)zuZ9PRI0L_dmxjbDaPH diff --git a/assets/voxygen/voxel/npc/archaeos/male/leg_l.vox b/assets/voxygen/voxel/npc/archaeos/male/leg_l.vox deleted file mode 100644 index 0007f2a7878efdb437db62146c7e3159ec6ead82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2540 zcmX9;4{TP|6~FhMd*6Fs!9ay&aS$>qbO^L81zJ{GS_;^f|FyPI%73toKmF$SzW35n zA+v)*sg9OFD&jIw1PhZ0tSHb82a*w)Zfch4BGuuROtX#Yvc(O|e*1myB`5dZbI3uVcQ}i=8B>_n0@aH0^96cABviF_@p$jK^4F{m5uPl8l|9k9e`6xJp^$Gno@5Lq}?Z_wXjP)XI$)%SFjUm5YK&&7wLsHoEf8u#rR^Fmt=*C+=$P7Jr|q6u@5emz_G6`cE00$IL;-{#&JGe zWCO>zj{G?0>WIa&xU?8YUTEV}G<~#7S?Zm0k#H}L*w%4=iRHM8izYeylD$zb@xw5AN;a<4%EcA80iJfPdn_+H- z@iqHRoi*f$I;%sQ(RrGE=3Wfna7J%9gPK^Hz0~ZD=3E=bSA0W;|1HD!W0;#^{|s#u z-;bf4VJ$iq-*DD-q#0irLo3dmB46|sPm^!1^fkut-$sAW@J-P+(}fPV|to%kr6{q4d;bEK4W`||4>C+ic_3#_K*9AD=TIx`~QD7_}x6xk6T-wLc{&} z`1k8?;h!&F#D>BW{HymA&Q~|$leQkby*!Bz7B=I*AKk)_+uHE<@C7(Btr)wqC*k(V zlXz`o6LwdY;cV{#j2tlxqrWi{qep!mzbdc5Pi7S3y=w#LsVYZ$_HPU9 z$y8ihHybanF2UX2B*N2CrbfL9wBF?lFqBpF@#|LNN`V)D0Hu(UOb(8Uz{uJK3 zxDP*QD#k1O>hQB8E!fjE1y{OqfwQCV&Y@fk9?!!Yho;~^ug%5H3)^sMe*r#ur4nCU zt-$z#2eEZ?G0yZY!9~g@pr&nXz1NUIsxY3xKpN-OQWnICJ!~q zS=iry08eyp$Efz1Sou;r3hPUdv!e!m?_b2`ogwm?=i{N33o!OT61z`44YhYG5^Jk) z-=cC%iq=5=<|U|8Jy3VvMDE;DG+lZXxqCWL-dKlkFRw@I)oUo)(v0ID{s}F;htc%R zb7;T*TTD4|0Yj@Qa8LbOV!nte8zYRXZNQk$KGbhbW9jxTEIW4-6IaJ5?tT^dE0R#_ zc45cG4^h)Mi2RcuVaV_i7&fjP!F_p9D_+KssYyKE^DdI{3&#sKdYW?@>Ih@5BTc7Q{&*$@gp3n37 z@jOr4OIr#@MWlIk<3_Ed%ob^FY;SlX>1cUOLsOEXv1My}qbO}?S*2kaX4DchVk$Lt>U#QCr!amSOF(4J&FXD`qRJ!%}wGk%VD~Or;{G zp+cr%gl(}x%91^%vLc2uH76QcD>G^+BVrpmMyyVUvZ4;#)Q%@sT+_;*B%x)ofNLc!%;Or6> z3@Ts zZ1a$sno3sMQ!Mwm2>85IEnCF% zAE@BUxq2S_+)B?87e_x!=c}99+@*kaJ&!)!=TKPBrB|r;2|H`%@4tJ)qJR4TqOW3)md^xBsgA92)(_Y_D2I&zcpq`Q5}TJse$I!qm>?R8&;( zUiCO`cN4XPhsYkt=ISTHoo&L|(o%drAF-ldHmsXO2Kve9$zW#e;T;~x(QhX|pEpWI zSXnzv_{d?hc4l(pdt8tg&*tir+qUz_PcA;P=hO3X Mb7SV(^X!$s0f)CZ7ytkO diff --git a/assets/voxygen/voxel/npc/asp/male/foot_fl.vox b/assets/voxygen/voxel/npc/asp/male/foot_fl.vox deleted file mode 100644 index 2731fa2b6cc50d3f7e427c4e12a8be4d5aa8222c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1344 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 diff --git a/assets/voxygen/voxel/npc/basilisk/male/foot_bl.vox b/assets/voxygen/voxel/npc/basilisk/male/foot_bl.vox deleted file mode 100644 index c0109a0a18606292dbbc862b9f388335c18b2291..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2920 zcmaJ?Ym8OZ72fZ?&pG#w)AAT*cy>f#Mk7qI0}3?AqxH@e8bB=PAt{C`6HCE64N>ky zqhlKfgFG@k`Y?!=ng&H61JRn6(n^uU7&N4qw1n748vl|0X!@&PzcVDp_=B6Qti9IW zYprj6d+l={`p)_p2ZRtS@2jn%5)URqtgU4$Dy6~SEtHs2rL0f0+Dy*{fA32nB4L|B zxI7YOKzli$l&m}9GA}H(tw++PLD)P&sg0g8O^nh}5KzcEt${6}}xpt*327Dw2 zD%#~$<rETcTuzNpwJ ztx_sBWQh%FV&fvVaTZYm*NNphO2jk4Mun#~%;Rk+tYI%f4p`b%?NVo45r`p?QR*bm zP@D{fmmzmD$`Y;v*AdTH>Y!awk#Q06d?22RjdQP)!mFgH(hj49kKTo-hXV!Athq(Ro-pF z_=MPkVLftFwVqrA&KL2K+bVNJPWv5}%=MS;O!f;hEPGk5)c+f;|YE*)o=Wd*L%{n3GsFc`;lY&GX6> zZVZd%+*$T+I4|r~)6ZDXo`O@g;APW$#qX4924(6>%BGT{>7D8eUNnQ_H%rNerQZot z(@yqTVd}=Hy0fz3sI^vgTiS-_jI3G5vsTrN<=Jx2iiTCR4Q=`yeNOAT)w<8IhEuv` zDUS6GYZ&^B)ion^pE0_ojjAbI;$*B;O>J~tOHqD>5Xj7y#&4yDf|?TzQ|&tIHgQ+_J8-#9G!ZIUUQZ>xO(A z-hmzy_Q%>*=(;a+kS9lNDM1q_@rJSwXDGZAN+`Ke#8ZkE4b2%b<($yA<(e~OB=19# z1F347wo;6tPfN}Wxmxq>rS}PQHTU*P(0fR8#*{@$#e z#;W>UY~){b)fs`bo5-9g|u5iY|MFG*?&K)m8$E$DCy(O2UC-c88#iMAkB4z~x4`7?VZ8I!8@O`m zeO&wG5@z-cW7gFD=vwwD+GZ`ribeP0=ZmIbcQ5%^*ov2TzJL#Ydj$Wu@-F`U*%j>j zVJFg6Yp{53FD8xq3g%31MNd~Jdhfa&_kO(#d!Cm!?S^}{>x3)UPxD)7O( z0{Bc|NB?Xb8k&dmZ!W|2zpO>$#a8V4^?01T)Q+o|j*NUf`H;Y#P2^>}z_KoZ4GRRe zFBdpO|LVIt(7&P+J66xemIrSCy#F_zTnU{01Ex*71>Kz!&^^5c3%gpdZb236dIS#t zNR0L0JFNq??wKfh??PkwJs51Ci%sLdh5c=97~L=j^XARN-uZ_yabg_{ho3|HP&+QX zDsVX$IM#Y6y1Kfs`PS`t;Qmt(Lpv~`F#%@|-nhf3J2*Sjrs0{}M)1vr`>^T7pJ394 zHhlQjZ8(#)W8aJ!_;UU7T$yX@-++_Xfu|0>j-l5^@zSY3;-|m=7~j}7j6-KH;_!u! z@OS(VOO`Cbr=(H@3jPEAvB0%=Zs5Dzv+Ab%*EoNCg=6pRi~5yE2S4|hn_t}fvVF6? KvBWoz7yk!f75Nna diff --git a/assets/voxygen/voxel/npc/basilisk/male/foot_fl.vox b/assets/voxygen/voxel/npc/basilisk/male/foot_fl.vox deleted file mode 100644 index 9dc5cbbad5af097482e05c7f47af20cbc052e241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3088 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 W`~CFy_cJ#)r%yt6@E`xmKaf9GDAG*; diff --git a/assets/voxygen/voxel/npc/boar/female/foot_bl.vox b/assets/voxygen/voxel/npc/boar/female/foot_bl.vox deleted file mode 100644 index 377077053230581acff94848af272fa6fa80ac0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 zcmb7?e@NVQ7{{OQ_x#mQTswbn-gTbSJBQ2D)U~zFRJPMxIZL*4$%u_9$7meGoE*ly z8kt#U;uhqbjq^*yY!j1Wh{=#KkTGmT5F#U@fBPe%KY~}!cS|uEMGw4rKfgZDkMHws zees}sR79F;Li?5Ek0gR)Flro4ju}JmXvJ?C`>asVHzoxX(U^QnVK++ zG=;n&3PYq@45QmnXsX(&3DeGTD8#hHNVP-^)eXzkn0C<`DVAZ_oTfFEB}MZbTGNpb zGevWfEzzEavSG9KHErFItT8(`Wm43qQ%~x2swZhbolj$iBuyIP(09r@vtgu8nl`lV zfxXYy+*?uyt*)*n7K?FrSlBnVNP+WreswxoSZKnQ%b_p-73slDa*nuh_mWljGk&^Vd5Qro_&v!f=qS?Tr@sc%(2!g zA`L?PRbl*;F#my2nV(C@@8xi1Dbc!}wE8pYtjJ?tTl8jxb}LW%>FT{=7{DT-oR;Df4-#EZxR40Uw^N*#x$G8G36AQx`paf78#(tr9-b zo-+wy>6-B4w?a>6G3VpuEMBhVmmgY)4x}^qnUkxxb6COk_x(M(f2n(Y|FKZngZJ;K zW%*JctSS&X^XyuO zT9$}*!0B@q@k=wjKYg8#zggz#ll|=J8>jKYJS|t22?m4Q)lno(!EZR0h1IX`&$p^K n`LDQrH(P9;o144GYc|&s>#=p;U%6}c#`kN!jl5BRK(71==GH*1 diff --git a/assets/voxygen/voxel/npc/boar/female/foot_fl.vox b/assets/voxygen/voxel/npc/boar/female/foot_fl.vox deleted file mode 100644 index a4154cca84cc1c5e40f43360a0f7d9888e5f8498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316 zcmb7CZD>Dr=cty;4cOTkS%1u&(Rm<|1O%62pd+u1FCE@zVW5-5kcvqqX;OtWvCgDPGO1F}k!I$kCKRCxB}XGgvd*XqVPp+M8dNC^ zDk%zU4a^&uGifADDN;m=q)bV{^`wzGBWsN*DHT2&G-5BL;M$V&bWY)3%;~j=Yf3{( za1SAkDZw>_Vq(uT@LVKv)V;!4fcaBxO&Ur9oqZW^J&v5b}-^Ru2)@-6WVJgyjjsDvoW}2vsd_ zq3Ngv;WMjnKC=c5aYAd7@bLuU)FaMqb)c}z4Nu&M>U01FQ7hbo4)|0jD(;ma?*PGb zhHH-ywoDV~1MVL)gOYE9Cavf%Spn_cTs+=d05rXWBoQ)=~=*oZct4P8|Q z7~EcrbjNyx_tYVBa2Mjo+cD641hHdb41F3wT04vE-BI`oR>1Gf2R|k%ylzyNuf-<6 z7w$Fr@UQb==#$l$_{NQ&@B1+Kunb>u&$LQ-aEI{QkAzrPDJ~}}F?+op&wdFZI$*)z zRV!{ivSSX;fA8<+{mWg8`;P`IUcP^4J+fE&fce?~y?^~$7n)1>zREoad7Y@Nti;8d zF|4l`$L9V%*b{c#`$@8v&iqr!^0cJ$b{_}cDep@|GG}EwLkO#(N5shB@KxyX?!+$7hnF6#fIbk*w#0O z=C7v_x|u~F5Wo{2h0F~62_;LI|Ng~%^ZX{S`>wy6Zn~eEntJXRV%$*|zb$hAXcyw8 O`3u}qzx4bPE&UB!C_`fa diff --git a/assets/voxygen/voxel/npc/boar/male/foot_bl.vox b/assets/voxygen/voxel/npc/boar/male/foot_bl.vox deleted file mode 100644 index 01ee07fa2c6e2266c16cc00ce67c2084c95d8d9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 zcmb7@e@L8l9LGP;bDmyV;qp9xZF)PkdFOEXBXvJoXDZuiuAC*?xn#t~6d4T}=8nUd zS0gja+2IysX5)N_m~CQG3^5rp1~P_?2ts5;^lyJe^hfaO^K3C(NYNMGygxtQ&*#VU ze4n-#4|&H#q`5Y9KuP{g5@`*E8y>SAJr0G2^EK_sZMQbEmhGDZyYbr~!>Kt0r zkq|RkHBL*kr=e`vtbI+}b~rU>Ym=u$V>Yz0>HAJIP?v4uk$CoH@|G{r=H;aqS*ynQStA9mW&_ni7FW&wV{1ZEo z1}D<}C^GpZvg9GHS;#yoY#tG|UlCm0!s9U^U473NLS=I*jVIFxpH1i8xh>R3g_gMR z+O%-ywm#dELtdAU!f1f1*&w++ZhXTz1QPj_-PlIv5uxy`)*ch~EC}+l_K&!b_!G#C zo55|Hu%6D~&a=7DxRtmFbBga3KP%#W!t{s2q9xqCs(w(IY!JRaD6F0k!s_?62_wfe z-YeAkg^n7bw_doY@s`RQx*B{$T8bGvUQYCtYQ|2tvpD$l`cB$4O01B`bXsUayxjzmKZYr`T2Q$G0Vm^6iC;ytSF>PksDwGr;Pt z5_Br`VP6rq!QMMMVYYt0&k|Hp%Y60kUJ+-1tnm(=L!m;P?CK zEa>Hh{WC}`LPk#pa~JM^!~Pt-J9&A$SrljQ?oo~nog=FwlUrXFF&EBeRNvV@-@mQ1 zYaMP~rl%9mT(F2;n&thO>wNU>3eTJxWbeQPO`j~#dS!)RFvwjUMO+Gg$FU-;eRF@l oHN9W|mDgYJ-hXEE{QNxYeXb=Q#UjP6A diff --git a/assets/voxygen/voxel/npc/boar/male/foot_fl.vox b/assets/voxygen/voxel/npc/boar/male/foot_fl.vox deleted file mode 100644 index 1e2440e108530659312ed12f578b537deaf9be77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316 zcmb7@ZAhJE7{{;sdCoanR=7OAZ+dpr=F#EuC3P>YV=CLxTscd&qG&L=a*lqOX03=-aRBY%yF&(G7pD`}*Ji>+N~& zyYO*p}+tjxlc4C@hy_ z8J8orty-7zF6BHiF`g;0&6HTylw~xZW^xp*$o zoR(|KXboezr;O$>wnwe@pnZu+aQ5$czD9e$x2mhFi9{mY9TE19FOlc{li$5w78jd{ zuS=n?{uRl=G%^qS@bwoHnAncgyOFL(k;x~Kr8JV8g!JRW#$jRWWg)RkcsweksGs(Q zP|=h`!|`OoXHs})ZWDD8p?OqzZCW^eTVtEE$m#TxA1R`8Hb{227yr2|ikw_ZuWup! zkdS{ybB_tT76f@&>-Qxhqfa0+UIw>pAog@Bcb?6LhRuwMFsJxl@rz=#SD5}#Sd0lb zuBaarChLW-_X{h>gs}R(t-|mT<$HwMfY4qo^wbF#ly9!cqO;ylUvnX2N6U!3QpMQG zHWnw}=GVD*Db7n{S6MEN&lPgCwTi9=A^NH?aZ*@#U#QH$cNcltyPo zHs|&fFx$S3@Jlsx9o|ReL>oi>$LM=K%yWfxmC=^T65MBZeA6B{!ZxYEaXD8oTW>({PtrD-9yQo z``pWw+nKD8`|$jJoxjBQVE*w?>H70`)UteW09Kd&_xz2U)2UVL$o0|^$fdlzoDZrd z*j75p&cOjPqnTX)Ot{k~;5Y;V0Xp(}cwz4h673_kJC(Wf_y1vkmfoG59Ns7xW%tez zjtre8qdlElUluSI&SXTt*+0L3To=!Eu;nJ*9dP=5jOfK#-kZ6`N8c{<%!xsE4@}Vb z$pS5xmk9=g+|^bjQNbVB%fjk6_xoGb`}JSv`Uvm6v$&m~pJ%PlRp-H3eDl!R-~M{s LTJ75XI$HS)=@&y4 diff --git a/assets/voxygen/voxel/npc/cat/female/foot_bl.vox b/assets/voxygen/voxel/npc/cat/female/foot_bl.vox deleted file mode 100644 index 205793ce10202708545da0dc6439f58ecf16be98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmchWZ%ov67{H(3-O*T7!#ED_Ft`rLyQ69R2_ebOjg3AoSSouto4RDSIwqxeBoU0K0QBt(;Mks&-U5#eV*t0 zJkR%U>#jZCQ4wj{8fjJ~pE^WZBC+r@mZ4%(?8;Nhp1rY1n`%p3ieWgq#Bjt#9C1T* zEVj7V?44rRIyLK%*c?jMAu)7pWOW&aJ#C2H6hllyY>HtTHb+`3r499IN%e`jd;6PP zMb}|TZEY>lXp}o6!j7@4lsNz9q0`C2LKBvJ8~J`!azifM9bUZsjlergY=o6wD;oy{TVo`IW z9*Pn^O8bJ;%!VjTI`Iv82wo_r;@Wx&+Jw@RT6-AC*@KLkjC0?rx5U#Ia*IRWAf3%LNuYLS>J;?ISa=z4_i4Nh$ zkHYUi3#o*kdw(qQ;QlZ0*IAN-xeR^dWs3jT{U;mhXbrkZR2MR|y=-OwRaI47 z?oP0=VuH;BY22opYv+Vp`-F>rKY>7i?vh^K-Z6uiDe{x~%$<3Bhy5OXJ4Ho&Se9YS z<`Lq9r&!xwz|HTGrI*!d)I*nR0<5KyNX}L9R&em93lVvrPD=|6_(g#CG4PxcH zL?*UkgB4_E5fYJ^m=s-@L_`oFZo70N5fw$<>_tR(zn<4_y2-uU1OMlLKAv;V^I5%l zr@dQ5D%Scc70K~NGLcYg$}TG)?L8 zA<;}qH#nhQWrsu(LYk)4ixyX}3btx-qKhWFrYT)BDUR2-uK#tdsNRMY7Z>CA`+3zR zZ0LDJmiY^x%x1>MDlp`x@6NPH_E@mi+OfCf;_59yya`C-Or-B8%J(M|IFZ8Xkp+}B3;vj}Z$LOYu5$f0GQtkBo81%*dq|I% zadg;lU&|!#@nX{U2-zo8?QWrTRFG||e>4$^%|V9Dv@M=X|FTq`|B?>n3yFy^qVSKx zTZPyWVc@JV)-OD{t!$6b=N0a56(&PMK-ovCh0dVzHwo)pLQS#IR3@BPet)5ju-8G< z@1(mfpXTi==x$iY*r^@7yA~!l%R*^>CL7l{sjFT=W4WO36?zW~qkjrT88&?GZ1xl_ z;c&2$j_B_UT#eFm_5i~*OF6i23yrmvG#}bcdrOGu!2p9-bcXv+GV!p7q@*O~rOd@{ zx0B~`P_$$bEAw4=OY_+LTM34X)3H8hYX1cV1>9>0vox=dRc)EjQgy>OHBdLs>`*w#dHuZKgGB}nKWA&;og6$`nSChuGTRDsb ztaPa}`~Lim{>D6`)~>3jL>l1exqkGk!<-p<$b|egO1UK*upZ~~9V!z%$v oRNynF3E}0vZ|i%h-q(M{)fb%lXFp;i_@kKNpDs34c=~+#3X`TR(EtDd diff --git a/assets/voxygen/voxel/npc/cat/male/foot_bl.vox b/assets/voxygen/voxel/npc/cat/male/foot_bl.vox deleted file mode 100644 index 39680eacd0dbbddeb1708c3ceaf680be3f2e0897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmchWT}+c_6oAjymW9Z+;3&lw2VH^LmPN;p2$Q)wsahPk%GPORgqR{U#Aq5rv>`0^ zTg(_^Bdo!h=ol`BEM^P|BQv{T#28~@3}McALyXa7i{9*FS$6mAe0Z}P+1*a^j8#pY0Q4vV2={GsrWj%xVp9y$usJeXDPyQlOR7)IeY@V= zF1ij&>g(%?Mx)#x6?UJ$Mw#<({&YH7SZKkLZzJEYN`AY*g*qr5*z-E4^BloQ{uhv3Chs;+OKs9h*OrM1U|#(6>B(f;XNB>Oxv<79BdS|(pD z=Tx|g}B-$V!}v5{e8lYfY4Dd z^fd`zs6SfkAsP0Oj`|tvs;2+lEsXW-VBw?p`0Zkn$}$&?)urrt!%tUi3%$*P`MxlI zT$uk%s4MXh36|4dw~^LzAr>%5ZqDU+!y0BgHgWXO+w^v}(tqqALj&EUkH(q4U@|*- znx(7f$;-=QUBOzsUN2PvA9WjF=C$eo;l?WV?rdP>!}Uyk<>T&+Aj`KZIj237ox;r@ zg$F+i>7<`W4;T64@h|ZESyDs!41eR~@}iq%O8?jWr63&QP#!X>|-Kp;R*Ss!ohog~S%&OI=7&w&lK1T$M!S@nnMMQ@AwtH5F}wKPDU-63)!3T)&Nsu!HP2HzlJU z(j#UZ-8S5JGbxzNC9PJ-KCf!`3FYI098mqEiAd}#WW-Eo?g|Fir}E;vbf{cIOoTCo z-xb~{#7+xCSA~f|Vd{~xJ;H!j_+`H^9}+(5qY#%N4)wG>FLRWi;=!qc1w{=DbFEID)21!XttV&sd z-EODA<)CEUTD~oG;VmyI4;Mt@_TQR{HcG?8XFb8Qg)&M22ho^k!@92-t{vbm$5-8aXn8J@%A@vtBu pi3{q8 zW|&wTWC;v$A-EWsvPx!l!5Tu0i7}2DV`7NWW!WXWSjg^vdt02DTQ^5pz`@}BR! z-+P*N9WeHaNL`huUK!c@mPn(==US2s6c#Bie$E5UK2Je1sgOQz+>$14C32^UqVm&H zewvCGx%ceYRwe4ZB+AOl2#3QwjSB98De^V{@V7=oB2h;Y*E~0=_io_BLluNOyxi>a zFgrWT+}vEMp5@fC)RluFybAqsBjS1+3A}?0EkmZXWYr1pd4ACQ1K7N*a>0uf{+*y z?%YtZQy6jyKkX4_jtD*#pJ)<#+El(nsI~~LWkN@d(5LbZB|7{r6QKq(y@zdt_c`co zuO@M3KYtGUS(~q=(q_QB)y&~02Z354a!45bRG2s?l1H?y8Gd(##yuXFSm5<5D$iQecrdVt-QM!IL zn`{<(zF5iVB@>VCSed!EmVVVUJ}lh*S@``oA>=pH7qK&St(w0cHxfLXMfdj_Zrsmh z2E!ZAughHW+W9vb@@T8D5v(bHY5sU?5q7(s^NvA^iifD^>LfRk%k9g;gM-3Vvl)xU zLVJD(JKbYQBt&*FoAHbD|L`-NdOLbOpBKj1QW2%?>}giC=5X(aLdJc$MAd!$cmFM= z>r?%cy6w>)X>PnrupLfb93k>uoUg|w`R12tHh$8@md-)E-%ikYeHy3J$x{JIS7eUG z)54Qm^WWDw`RtYTC+hw6*~+=%*vhTVE`D{@qgFDtS1+vBu6C+up2|<+MNMh{?=P&S K#0&HbH1aPEKprpv diff --git a/assets/voxygen/voxel/npc/chicken/male/leg_l.vox b/assets/voxygen/voxel/npc/chicken/male/leg_l.vox deleted file mode 100644 index ef4ddddc521f5ad695678a72bc2af8b4c2c2d0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmaizT}&HP6vq!t6Cx9tD@BTHyYjKNTgGS^Egu_2C~N6pFeZ-5h+9~sHfBp>aBCXP zs4n7yW3>SuhKPnRvkW(EiHi@UA!J#yEE5-FV#qR$@zoGxeEWG@Cdqujll*h;Irp4< z?*HC%x{n+;j)_QHqqkitIrfZ5m)Gy!nl_YVD{Og!<2`tsvqN zwN?pgou!cNIeO@oMp5Ub#p!esi9~oD6Fig4lxY6uPmP9Ds*SYV@Fr>Z?c?N$IwFHU zlEYq-v6Cdn&*Dg)A>XBCo4XK0WGDJ}jfneMB={UM{UWlgCBIF0!6)Q(2zzb{IYHt1 zsIYxh&|Vj++Hz@qJ0Jgr?R>njgXW0P85d5?3FjXOg`GO|0TZPWE7b`X#UTx*5gpbU z1C@7nQP?Y#UQlO`3H6JD98>kfIY>MYnb$D9Ya6rs3V3*+7+QA{7hyr+M}^-M;^&09 zPleR1aQBw7UBa|m`1Yu<`ljGl_PK6hv|srLg(i#8=M)B;g$d>FtkMy1n+SKB89Qy` z@~H;K2AY@*w($E*fZZip>TL#m4Q5VvI|#N4(G$YdJHp~+p<1uQYb~Y6zK1?X1>IIH zfvRFg4wVr*T#mcGk|QlO_&XX2zR^zjjGxgDgCu4zva&Qu;%YCcYj2U8n~TwC%%IX@ zqIz#RwKfZ*AH2-m=O%u-Yi0HRZmz1Di5cPEcfzkf2;qR4iKw0B8%_N2a~GjY`HXy} z;nss9Rxxbwx9f!39fH%aIseG3jtu|QN3Ui0>+-h#FaKIYG5vKmLd`W#@lW(sV7J@3 z;+UeMa+k_ZwRJWz+pfs{bZzHC%HvaQlFp@7?XF jk<859hW6RjOjRHq`;pr6r}tFsM%;h%p4jPxO=9F9ohcbR diff --git a/assets/voxygen/voxel/npc/clownfish/male/fin_l.vox b/assets/voxygen/voxel/npc/clownfish/male/fin_l.vox deleted file mode 100644 index 148f279b980b3fc4c508ae90d14350dc77ab5a67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 zcmXBSv1(L76b9gvm`1R0pFr8l%EIX+O=LxasGw|!Vj&2pwp%+J!F>W@e1v@iSxd`# zg~i$?rB!hJX3WjM_wLW!d%vBTix-!7zedEfv-9Upad{H)>io^)TjPtrBe@~!xP1NQ z{GRjpyZQgr4LCK*`RFu`C5~MmyOyIH{pFKKXY*#`fBpX3dv8)DrAYj*n!f3q{>KMr z{TTM{eeX}tTHUf+u*qM)W+v6FdRq)uQ*naB~=Vr98-9cCwX?tYsxjSx8((fA}-{oxSTX z@<}#wAuCzRLgGpevX`A~Wg}}@$x;?}NbiTkq3`$mzT55kcDwDH&8Dx{>%Lm8`f|DK Ji^am&h<`NbX)*u+ diff --git a/assets/voxygen/voxel/npc/cockatrice/male/leg_l.vox b/assets/voxygen/voxel/npc/cockatrice/male/leg_l.vox deleted file mode 100644 index b58652d567b3759ded3d9296c79c820171ed79d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1364 zcmd5*Jxc>Y5S@9mcY84^0kOzkp=Y6uU}GVI;0GchoN~ESq88RR7Gh;Xr>jlK0@pQvd{R#8>7 zclR1K)mEBp}gQQ?Nu@tJIlo%*eVl)~B=>Urwf|RrgEIg8I^y2k#IN3DP&D^L$KlzHD-TcH(Z#*% WcDw)f9-U6ddF#iW{7(J+9`p_$k^DRW diff --git a/assets/voxygen/voxel/npc/cockatrice/male/wing_l.vox b/assets/voxygen/voxel/npc/cockatrice/male/wing_l.vox deleted file mode 100644 index fc5d940beb1bd903765253ed5f7dea3811a3face..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1212 zcmWIZk5HJ#z`)?^=;;Tf7*?<_Fa&!>x$=NGKmg=2Z~!qU5JyBtc~$^v5Re5CY^=Tv z3_#4vqQ$_>*3Q7nti{O0uF1g4q{+a-s>Q&{3Zxk|8JHP-8JK};n3y#g7@2$-S=fQ< zfpSbhHH;uNY?=)0EWXUF97>GLK>aK%?F=l;K+M#^z|7piz{CQ?Y#mH299lu{PL5zl z0j>A;_Wn;xY~suP-y($Pzil)xR(nA5@x7v0aHDtMUDxt0V9~ zSQKIBj4Fozi<%jTvO`H2Rb77(!+)6mH9ZXfw@pQrC)Is}Mg96Ky#Me1mnSMr28)|% p;f~DaN&iDKOaA9|&G`T6( zd(V0AZF}`tew>IJ4+fi<$YmmG3AWcipKy32F*rmTK1fBi#>xAC%3iQuZ_1K)BDat7=$#e#=l>%C_BgZp>Vs9AEJww3Z0!$HMmGO3?1HUm(4G|VUC9GW~+`Ywq4Pm~X@byu` z!?y_G2EtGqVIrK4^KTI1VM4c`5UC@~aJ;!Z8{v8b!_6+ldrA>)twg-H7Hbz?$L|Ya z>~^N3sx%LwmtE*-t3=;nLad80dzx^2oZxe0Bj_nar*AI?>h__{la6qC4#paa@KZE| z`YJDSt1e;O$NdPTV&bDdG&Sr;S6dxcuU)|8I|ia1IY>@UMy75>$u1|nZUer(JF&mi zjfr!)Se!HP^IZ=f-rtSOyyx-);oi4|UwMg~U;j1FPjK^{ZRNR+ WPCWAylh5q!c)QrvHCyd%wDdQTP9eAe diff --git a/assets/voxygen/voxel/npc/crocodile/male/foot_fl.vox b/assets/voxygen/voxel/npc/crocodile/male/foot_fl.vox deleted file mode 100644 index 552169ea08e99a7e9013de7b180715fa4f430622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1300 zcma)*ZAhJE7{{;YzMo@~&Gek(yZLgCZk{tY^JVI$TP_vnoQ5-P^NkjhJlM+I5GRMC zoi%2|G!r$dsfCO&W}B!KeOMAQ24jc?1u@2m=xZM$`u6KSu7QwI5B&LG*L_{r|Guy5 zx$l-2j%7@UNd3Xu216nak*3<#>ZdjwktYm?VH+Gf-del%_j+NNwVaNyw9|@^)7l_H zv`bl*OIteD=$uwc#VT!JTP~%oSf#=-<l6~fAYKA&B{tW;qQ9w z5)F0Fa-yS*V1FG;L$xf8onUFQmy)G7aPM-HuqTPc{T_VNdy#4f((@!T>qJ)LiK!P7 zP6?@_LhcPAvPak!5?scQzb15#?4fsRKWApjcyIX`s)9n}xbVunaCXhqHYSr6@Q@Ys zQ@mI~N}n6ga5Db6bnr*-Ic6de2HJ@0_^n0Q(llx-E%o~wUp3vSO|3p(`STR zBSLXnGPV9J+KYG7SGAWGe>{Pr6ozZE`5{)qos=F zs}~u2-9xY~g{Y_~5?!(6?eLQC^H98dJNpWJjGj+re#XO(cl_MHx06rIo{MwB-LHk8 zzY_)nIZTBLS-oD#Z$CBBcPWP9t8Q+tC9%jLt!5q@{hu^*=@%+}|K9(pBijkR*~P^9 ze&#M;+UP$m@oD^?IQ;3+l=-4*F5O0R{{QQLu``dt!a_bMnI!JCr3)l>CUEbIY?fP- z7|Y1`$Na;2VXfm$cj@bfvy)c{eZI*13*Yk5H|y-_9pb>bY3eTDqUpvu6%`dc6p%;* t{y?t_559VIz6a)h{a4&P!HsvenP=MCdF+RSkL|5^tF_HFo9!)fq`*}al z=g0T+>D{%*Jt-ocE#WS8az9g~CmadonLy2=Sg*)d?AaR$|D@hnzm(-G>TSwpSTt5-u2ZkbRpeMztH@BDMRU2T%`&_~G|tmLHp6SZ&FDO*bMTD>9Ue%sh##ILYr6ijD}I#)W4u3$`I)eL^VE*m+T??X=T=B%jEs0zO=P zinh4WofO`j7f#&L+HM!6gB~j4e(F*|N}>)tV=nx&WdyEmrl?P-IHkQOh2|weUeozU zY)JA6WWmAc<_*kkE9CYICD8sfNf8zmzbJlJB##U8p9;%!!u2Z}2ZfoC@ZD}z_ekX&qC5-K;B-Ou_P;-D?FE_kSzm45)XJf$z+-^4kpNG0F&+vS;kMZ|5G5>{! zU$6UFyII9~oijBn-1tGb_p>lE=;d6ZhLuaL{P|lC(X;uCedFNDtzy9x1#2GIdHF*Qfxs}vtCT;;PLS9$K(DBDj@ z)A9KdJ(pJr27}xc5SxO($ygQceE)ELcl3V!S6-jsgLn2QZ<3G78UAs(2aO+JFaH1- CYc`Vr diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox deleted file mode 100644 index 7655b47962be4f6ba6a2f7ba72e23e4295da2641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmeH_+e=hY6vo%yXY{2&F}gx1BAOJGjyYYtOq$jpr8KG2OlnkWV-C>`6h}d3h9SB> zggH@IgosHH;Y+uNh#mxq9wY)EqNtaMo`N8VU+c_&5wzfAUA}Lvv-a7$qcv1CAtDF% z1P-c`cOH>oAl$UlP1GEPmLyjZIuZ`tQ}0@t!ib4mYeub6SUW0KqE;koj2Y3!sLAFo z=ZV{Fu6m=f){S~&T#aW$jE#$NMy$kbhmV51Dw-_J7)=P5yr;WbGog7%U$c} z@2Vy+QA=sO48eme2r_Mv^hV^^Dx^AxqcLH4v5&*Ab^emjuFCYh5T7l__pt?@p5V!o zR({c^r!9rA!r~+0!2{vStbX@{@RRNEdH_DR!7Dw`k1j$x@@U_l$LR3{m-pY`+18ib zm+xdUC>9kNMIV{Ue%{ng!o?S)>b0JqVW>C5l~c+$jT4K-(6w-{L4Lz(-H$~@yIb&3 zQc}W~LC80^k+B4Iw|&f}g}SQES)|ix{FmlAe|H}L_&Ck|9Rvaad=2Gn+f~9~OC3Y) zP5AwOYHMq0Y-}WWvYzsa!mMU)ZjPy`DLOkl2?m2iB9Uyr*Xw0(u!69+k5puY$y3*O pJUq?vt+y;MFSE3?gxgzFQ$si$CK`=0Gc%)4Lhs-|{*`|qe*p?M))N2# diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox deleted file mode 100644 index 3f60815abab1b1e5a8636068aa9b50c01f43731f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1552 zcmeHF-)kII6h8NyduLV@S|ZjTP#Qu=4K37m+pMigx=otu5^92LlI^ZZ#oDA>yNFdG zWo80lXIP~5$AiRdQDP|}q(P997pp!<=|f@hDTt5w@DvXyN@vQ2meEAlWrZm*(%?9^8^ zPCcv(#A?lX%2i+MB63tERv(S5=aIO8bx-MeWHq;uq!1fYsy9}>6xN1pta|C}Mk2B% zAW@`sW}RPjKGu08Vqu+8BTHaRid3t8D;haqD}kuSu<}{-{x&lDO-Ljm;lz-uv+)x) zUd$vhbEa;r(Ox>69}9c25fiiX>ymQB)Y+QYut|(~F|n;n>eJ>q(8~{l`W#-W z5w5gm@#0UO~wHkCRq|ZQq0gvc>XelPrf<@?Rw3v~=$&tbhm z7(BeMjYgw^{5zX?^OH^F7Z-7AZW4t;0lA@GJaw!amqrIMKQV%QK97Nc0SpfhqxkA^ z^d8*P=4@o5jiEL6ozzNGbuAFT97(udHJGqi?ajy^XD{ eEu`B1{(h9pWmKzGtgWr-FQISnKmIGVd$BB0U&mO&9Fsa;%XuMmrwk zCB`{NLbNR*bdC>AGDd8z55ydEZq7M!)z+MI&GDrVwOZrbulqS>V~yp9p6$Quy8hSy zy6*eBpZjjvf50;?A`MmkMr}lFBF+9l?Gy1p#G90SUXMc0TUqO`^^oLXo0(E7N>+OL!ed%t1W1`N|G+n|d3 zR$Xt?Im>_{Iw$tQSNFbD6(3Y@w7k3=^Sd`H>^r|ij%$@aTrL(D8{+(B|5yAM5`8J8 zw|nsP72ut$Kx%DB@Ns17Nn|O7#0DYtsE`>Gp1C48gTjWekfh_3&xMkP1nQ0^5(p*n z(fm`?^a@R5!do-KiCen1$xT*gHo3j|l+O9c=yH)g;wJynW(u!uCH0Vy8`8bUg~|m% zUeoLMIFYf9$gGQ@t(%yBE}7deW@x8`9M1|5UH~#!w4wY`FtEPgM{1iG%G8oyL$6VVE z0NPvtg&W@pKYu6GZ`sJXa4}1ltNHb(X1azGS^aH=)n8WN z_xtP4Ke8vCQ`KplY0P}&`~^8F|7-r@;$lvhO|qkKik(9zNe`!U?SgQ-Rrq0I09`k{8M)jHf`}|Fv z+3R5Q4Z1qu#Mx=W7w3q~UgeW-mwEo!5W7xJQa`ak^Oa?MJ|Fi4#HqobSeAvmUq9I2 qU46eEmDf)&{?1Hm-n)mf`Cof?r~Z>Oork%#cCEjjW<73Ajr;}0mp+vM diff --git a/assets/voxygen/voxel/npc/dog/female/foot_fl.vox b/assets/voxygen/voxel/npc/dog/female/foot_fl.vox deleted file mode 100644 index b4edc739e00cbfd71d158ca75e9a526a903823ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmbu8e@xVM7{{N_7r3KHhjAR-L3kdZ-ccGq;zyDm0qQ|uM3ElGSkuMra=BY0Wj7k0 zof6|X=|tNSqUQLcNydoP`h%Eb&ds?-uG*S&t~vhck6Nwq->c78XJd`!A3fXa`#kUG z`TYETKA(<#`(0xq(o*Md)lR-j6>0Ye8Xq%-Hbax5c|^1SK)`=md($?VA7zazNsEgz zv1n4XPECkm(cTzQq6WmUCX`A~h%&XV8)lrUV@pDbH7-V))+(-)8WAM}%ES=e&y0;z zN?Bt{rNoqxrehO}CRJqq%jQ%J&H^|jx5^AY!Pyf2>A)&$;(1|NLUvYvb45;CRDU! z&~zk|z(5x7&pkmyL}*J2uTKldzter&oD>Az6h*vL&icp;+i(v%@m}0W>D4Xd92ANM z^w?uU?Ytl_>-qcAk>q-0#>U{54NN_q&CTcXplK6H5#}^MXzpr~$Asw*goP>L+84r` zPYIKay3ISy+&bGyz$YB*5E6%UzE`OC2wl}eZ-a1N=i4fr1RLG-wQXhWa2b(Tsu=63 zXW{g#EME-b%w9)r*+!aoZRK!B6`>{}`kFBDwlF^;R2De#dy6<&xs7l`4IN%P!HPVF z_Y^bRwVl9=b%eTGi5%@@sQ(T6-U^U-FU0IrjHN3V$jHbbH){hfmy1%5o62pQdA7_$ zV{Iw>cGr+Nna}jcZhpGv<<^Z7KGJgryM^oD2)}$UG;dzd`Di(dm+JZL=XSzFnXLT2 z%*wCJ@WV72*(v-u zK90xZp{KBy7xvB|(LS=n+0320e}?@|eRm29c(*vo&K;v18j6wImBWqCi}0+O!bFH)9- v+h5;b-)()r9#+>+@ZLK!y?O5*X!BenyK?@inZbkFYQH*OtIb-uRej`dsb4gE diff --git a/assets/voxygen/voxel/npc/dog/male/foot_bl.vox b/assets/voxygen/voxel/npc/dog/male/foot_bl.vox deleted file mode 100644 index 132521c0fe20e99630582a5e28780c5e57e37c73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1300 zcmbtTUrgIo6#nk*UqwujQbs{m3piRP6N>zCh()Md+1SKR9Ay%+ut-xEm&TBd5M-;C zB3avEWit^F&BB8jn*^H}ACN3$S+dN9ENWtwg$J|8`CyE1pZC`}Lkw{b{*o`}obP<+ z+4&m=X~Bl#u46lqSV% zu^}aeIU!VE0YhBEG%mClss^TnP#P)CN~iTudKi)t`j`+Jj4>$<<5IK25Eofruj&md zryG}0IT+)w?|G#)JE+=dV`C$=Z(|DFJF~_z>!1AHYUS!`XO_R@|Azksi`T}Yeg_?+ zRdmfY5k3PEew>(pideJJ(g_wG2TM}m&MTlf4CY3`d==Zi0_!?+*m2y#;OTsRlzE!% zBVbn=Jh}*;x}|En>?{pASw7-s{j!(E5i6Z%?Q~z<&YEjGSa<|1KdpLCgUu@-4ypBr z%|!Z1V#&&h9eG@MzJRx1DkeLgVH#jY;YWpE71Afc#gD<&1@QXU;5*NO^FF2NDdC+@ zdKvVBC%eJafZ~V1HW%2}2oAM_7Zl%BXJ^Rgat3-ER?_|xnxT`m^~ z%Z9jr?-CImW3i?(rm?Ts=;4FY&XUL diff --git a/assets/voxygen/voxel/npc/dog/male/foot_fl.vox b/assets/voxygen/voxel/npc/dog/male/foot_fl.vox deleted file mode 100644 index 61a675f2ac215ffe4a123329a7c99d835b68360c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmbu8TTI(k7{I?%=tU7zq?A#Rbp;$PlgULc4zUPzE0ay^#8D<83yU;$acK(JVZe;Uw5-d_c00WyvxPS=7WV3lGLeeK5wipXa}2h8W@={F2}KZs$Aq z)3yJgdrCw)T7vtulCLsFLcwt05yR19(qw2J(j4p#2hV72$Tp)<)(Iu%gedcbD2pZ| zp(JxuOcotCX3Xd;5qBUcWEnC*S3>?NGLs}$DR_J zmIXPW=O3~msYj7T2V>iFn13pdThA6k`!-S{q%}Wie$k|k3k&ZHEAztjFN8Oq6y^fD zPj?ZwKjmA%iEbEK=DXuA-9O_+U4SUxAz6}t%fN;yOtqIlQx*GP zXe9Yg5epxC`02Wj+czutNY5GR6K;GX{I>obIkpTg#%ox;+{*7ihlq{anLbd?!r>jH z`ztryzsHe{&y|BG-~Pb;SClya*Zym2YB*m%%g(Afc8#5;AYQ<=PlQ`N!jCgEc)eZ* zN(Omx&ms~ZA}^Ll`og_C9C7KlQ(Vm3Wht6>P0~M}U`ua4H$N{U9WG!}pV`09-{@zI z)g8J)YyeJNm?!?}5)+G8`S9B{o<254^XXak&MXtUvWDO9XI(&S8vZ0>O}O**z4hJE p@9RN%{RQv-GeaBi?!Ir_YpA*UpPXUb&u!Ej?algZ7TZuGe*^xUEuR1Y diff --git a/assets/voxygen/voxel/npc/duck/female/leg_l.vox b/assets/voxygen/voxel/npc/duck/female/leg_l.vox deleted file mode 100644 index d02f9a362a05e1748190f6b5a703ef89a018065a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmb7@ZA{x$6o*flCPXGOSBeyEyYkkSWsH_l-nJE??q52fjM;5*LMJ*+mnE7`rx4Lp zvZkDx3MrkX9oY9`lc@DFR$E(3Bog6nOwcZ_Qmp@z-}QRZ={7QU*_Wc-zmuM04MYb0 zq{e)tVm+iLPvK6zNuI~R7HYa8bMxSTlQ!78*aIk)}f(vTT9WwfV*`NTh z${HSzhr0rjt>6zftqFIo-9O*R%1@7t-%%2~%H_g=2;_VTT_9o3Te`tITAcd4GL aL;|~z`m#r3D)(XDKj%HrnF)`{k-q?fgc#-k diff --git a/assets/voxygen/voxel/npc/duck/male/leg_l.vox b/assets/voxygen/voxel/npc/duck/male/leg_l.vox deleted file mode 100644 index d02f9a362a05e1748190f6b5a703ef89a018065a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmb7@ZA{x$6o*flCPXGOSBeyEyYkkSWsH_l-nJE??q52fjM;5*LMJ*+mnE7`rx4Lp zvZkDx3MrkX9oY9`lc@DFR$E(3Bog6nOwcZ_Qmp@z-}QRZ={7QU*_Wc-zmuM04MYb0 zq{e)tVm+iLPvK6zNuI~R7HYa8bMxSTlQ!78*aIk)}f(vTT9WwfV*`NTh z${HSzhr0rjt>6zftqFIo-9O*R%1@7t-%%2~%H_g=2;_VTT_9o3Te`tITAcd4GL aL;|~z`m#r3D)(XDKj%HrnF)`{k-q?fgc#-k diff --git a/assets/voxygen/voxel/npc/eagle/male/leg_l.vox b/assets/voxygen/voxel/npc/eagle/male/leg_l.vox deleted file mode 100644 index 1962b95931662093183e87601366c2c0e75bc9c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmeH{Jqp4=5QX2&Zc^E7W9>1-$_Ns|qJoOV;3d39V(qECMDAd}z71B1orNHI@bPwr znJs32PP=k;2e8SCEe$sd9Exf^i2-Fu`ldWr#U&=GDN%z|ECE^(x|l{(iK$`HDv<<1 zjHIF@)+@K`JgF6ywYE`kElHzdYa#o5m9f8*_dfJ_KCXjYzh;bwbNkns9P>r+%lUXG TKD?E0&)fk&nX7Xy#1G&FVfpVU diff --git a/assets/voxygen/voxel/npc/eagle/male/wing_l.vox b/assets/voxygen/voxel/npc/eagle/male/wing_l.vox deleted file mode 100644 index 31a595b3e68815eeb8b7a98232eb663e7f47f016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 zcmeH{-A%(V6ov2gzhft51jax-Q3R^03Xmv5r7ujtB5|IXg^}2zd}aU!K(%z@`+Iz@ zmE`s5aQP`B59{qCn|ynb{q}fYyTdZz0(AfIcHDj`2J53ghTKH8$uu;nc@`U*SOIR4 zLd=o#K>F^RB;f2UBRNk^a805GewK)z+$<@~66_+Lx)`bNT;!`?WQ9M5MFwIMcBX#9 z&*U?GL!>S)GJ;CHCSv4D&!MdlFA0uBKl`eK878zRdZTF)s8480*clzc(92#p)A>a+ zabuc}@KxpraC__+nil5C=<)^)@D7|`@~jiN>YEPmTHweVY84oI9kB3fKNCdmD*z`= z(V@((%&X{C^lI&Abw1ZLTWtKX-%UXi$jp^M1flBz4y=auyt!S&`@43#-RX?;9sKnU Yylk#dyPK=i`~L3yuKc6#rT+ka0MMc+EdT%j diff --git a/assets/voxygen/voxel/npc/fox/female/foot_bl.vox b/assets/voxygen/voxel/npc/fox/female/foot_bl.vox deleted file mode 100644 index f159e6fb8be1aa79519c59972b8dab51c314cc0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmbu8Z)lTO6vod@n_AXwR813;x){@TCh5@i&-!O}F15`xb=7sOiegN)czLr546M)FMR$kG; zlmSyfl!_`1QKDI*dU3ZhpbCbS6eN{t$*>r6^9^S5b9y4Yr*^`C*-V zRA`zNH1 zG67-y#3AloKS9VZ9Ox2KyM;`@(Bc((8if8<;gr@pY8`|FZekrCM)y<`f4`p5z82;_ z`+#4^!`SQ&nyOc^HNV9NSdE zbk90M?=%zX-Aa7_4u%FkBDOC?>eC3*6GvINafYIzB9_`#;BvXB^17*8`!cUrdkHjE zvF)u!QlG43@|>F=Z~3@)r;^ip&v37B`&;4X?}b>{!>L3K^Osxr{ijZ%L&e#?KmP4u zmKVFfG4Sy5BmU&?r{2G^%=%3Cuc@iwi~2FvRb^N|cm#XG&du|}-5tUuj|Z>UOJ7+( zZ*QJL5;01mCCr@Ez0y4#aOk(=baJR7&4%?O>>fJGiXIzxzOG;Px( lzMeL&f5B{>4bEgTB_@nV{>E~h`~=d>qS{sGnBJeU9g diff --git a/assets/voxygen/voxel/npc/fox/female/foot_fl.vox b/assets/voxygen/voxel/npc/fox/female/foot_fl.vox deleted file mode 100644 index fb09d5ff3b6a85b1bc5869b94ed3f82962d829d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmbu8e`wTo7{{OQZ8t}&n0mYOZfjn*E$?oj?nnEP%WiF_-fY^OEqB@&p|s}1%VOT~C$r%wHi;l&Ni)w~-R1B+fZc>a~)p9kKr+%K!wT>DVYf>zE zNyB1lE0h&tRpgEC+WJa!<}kWF_$C^WpcRQefuvUf0{~we1D89V{e#d^I1; zJwxk&(2)|}nih_JtGOL6N+TZ12mI8{1}Ki%@SJktpIl4T^>sM*3FXIi?Qx-LUXb0o ze>@*aJ&nxR7+SZIsf|V4eyJGRo+Ty1oZ@@M&x+I$VfwVNFeTjhQn)bvIq9GlMx(F z7fsb`+5WPZ16}n*+l0iM!o*==epIL{brJHHv#)MFvDQYq{B|O>#hlt&!EDb4!ml+G z?cKq^p}hDomK3JO^1ScBW`rpo7`ZvAt-SnVU&RK?CMjU?YK zVfteaKiu$h=T;>bbk9hyaPu4Cr|*P##LKxv4U3ms`2ELDV#9@*zCZZ&eukI3zZtmy z;5Yu@ugBiMvdsR!?q5?=!-w?~Y^X}JY3Kybgp=!^2)FkNm%LtlJ|BH${k*zu21&#z ziWM<;R(qvA9CYd1DJ|t#MT*Uv#@Ii6k~KXJZhcX~T-eE&*6iQ)H|Lpab$8w*)(1z= zPLcR@mXVojoWHun3x|f-d}4y_AI;NwWr;u_z&!!US7=3YmV~=s|8u^(`o10)*Dsi< dv&rdnnyhd3HEUUIIbKdP^RoJ*w6uDSlJ{%FnrUVXkWCvzKfXoG6(kWeyMJ$DcyqK@5iLOLqg-oJVmzq{B5%_H`lymzY_YI|3Xf{ zPC=IoS8pla(HbOZMWSnvv8RxEJ2}ll{t;nAQrL1;$chSU6GE=m?U#kh=4_gd_jRHIlH@r>CSD0 zU#TP7wU_wO4*GlFBKA(0McGtwp8{7(4oCm|N`a6VDN{FQqC`n46KKWFLP|Gc*d_y1V+ z{v&nEGaA=3c-;LGz>uEVqw_c8%v$ZOH!-^5 z__+xZpHDL|b&XHIU*P$pee66n%ASj}v|e2x5D0KrK(aLWhqMJ@@!RG87WIBT&aZ#L hrFom&+`9+5`L5sWf9NxV9{5)BmGWvatJzlM$iHa?Fz5gP diff --git a/assets/voxygen/voxel/npc/fox/male/foot_fl.vox b/assets/voxygen/voxel/npc/fox/male/foot_fl.vox deleted file mode 100644 index 4204e6529673b0204566b99e26f354ced5111192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmbu8Urf_i6vxjk6v>ziN-0tpb_KL8PRE}?naq_z)#6Z*iMBXGjAk^QnQ0u+hOlTi zGe#^OtEh>H=m-x+bc7L?JuqU>m>6TwEK3$c%wqPo?O`##eRh8kGqRBRu#6OH6iVeD&RdQ`act?<$7!mv-c^@)c^ zr&|eng`+J(;(+Emg*une<`FvUg|nJ(s<09AIfynn88}!**X}9?I_jAIVh_KKgs^2V zr>1N*+um_)HvH})_EoMYQeRDr+e)Y+k5gNUnP}TUaAz&y z_U&{XZl$;TL!uuCNqin=V)P`lHwVec$Y5303hZ_}r7j1R>(}sBnG0V{DLXb-llUy3 zv5O9VzT@W6y%NsrnxS^#?hnGR4}@sQ$=O&rGgs^Q^Ot5Ky_xg({>PI!c=r2}=O3(H zn9+!y!HdpcQfU2O=PxfW=c}qAHk1ytvF8N2v0QFn5+1e+SDa2&5m`YnI{`<;dR;p)S?{ diff --git a/assets/voxygen/voxel/npc/frog/male/foot_bl.vox b/assets/voxygen/voxel/npc/frog/male/foot_bl.vox deleted file mode 100644 index 2d5ca268dcefc9e759fda47940c8a66da07b454f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmchWYfPJU6voecK~XjZDX^9a^=-Kn=C~BOh+?-6p+h`I?@=jk!HzO zT_lJSBruXGqCqrfY{Noa{4j|l3vo_@#7hiWmc{tV#1Eo=`}uE4j2b_Ck|)pmJm>wN z^S`$3+Upz+iIpdz_yinIpW>o>%OiX??Q6_hP|_q7Lx701J^pzFHZ6y0s;hSxOo z3PaP~x~X)M@=e2Sn99?2uc;|kLk!KRFvaldnz(gC{b$6rrfP^=OA<>pbLpC9X{NZe zJH#c1f-Ww@&@I!{EkiVyE@EkhSi17HI5d^l)L2uj-3{BfB_^uoR$X09Bog7)kkI(n z0xsJh{A#l?Ki^C|&Ie`*HkER4e=U)oCT9Br%nlu7cC?$S*<+;oGO-_U;yhW5XS@cf zPeQuxMkek<7BWd~7P4LtHV+D0E(*zA!p5kOu5{){LPc{5Uw&V}7c2Qh7Vl?AL}(cn zo}Cs>EUo9g!4%w)A}V7(vcop40S85sxs+WiAge=gpHek1XS3mB2lABa-ntJYuVUBZH9Xl+L)U>I zy~o-ae5H%n)EW5wHnDRZ%zyAaDJdyzN>9V-bW-NAsN9;*!{r_ZU*630I~Lz97O{Gx zm~*OUY*M)Xsc`#ip*K{>*{GL=^L~E$p_OodDgz(dxU^(vmE8Y*{dpVj`p5dcUN7Ii ze}R&+32OUJV~^Uo_O9^riwb_huQG*wf41MCwvr6j7|}KFUIRLpELH^G7ok4QFnTr zrnj%qdT|+_&&MqRNmk%DjAbRRTC6-H+*J4Lzw$RP%U^l*1SxiGC(dP>LJ59Q zt0iquIPskqdM&|i`C|#L(IW{i@dqex46b{JP9=ED*b?dY+VN_k#2a2)TT5`fM?C(< F@+X-|6Jr1X diff --git a/assets/voxygen/voxel/npc/frog/male/foot_fl.vox b/assets/voxygen/voxel/npc/frog/male/foot_fl.vox deleted file mode 100644 index d994053164168492adc00ea615950915f0a30ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1164 zcmchWYfRf^7{#Cezbrx76r_~3OsH+S6y~@Txrk!7g3w_*8Ln=Xk=1HO?POT=FoJ_ks$_$ zK~WdoVbFA&L3F#WX?8J)Jwwy&8KT=XU2M8RY?{in46%zY_PuSpc1o(bLPJ9Xu~>{- zBSQNdi`b37^NZ2Q!h(+!E_jppJE}N*u!&e-2gw01$&te($9t(yo*>(8!hFbz^;8AU z$ws7g6B51?nYssAG?DES@}Cp74GY^Z37KJGOI*lR-t>V`>&xPc?@IZ6wS?Hxy|l!H z&Qam%S>fdJM&0Gl!VxQ{F5#viV#GFNp?tcC>T9LscMFcws^^sgHh*YAo>23nnaJo} z$efXZ(i~>0@>qSi0CwNUs0j0lUn~BgINC4FzAh}x2uqihcMDUk!bf|BwP%E&^8Eo} z_^8VJ1dmhbX%PBagmWtIthEqowGr(sW9(QBv3>Q79rv*C@{{~H9iqZ+;-Q)%Ivy$G zSfHNpZXte9n0!IF`kGKzXu(_Vpu27dk(NdRdS1~ZIGs+u931Dd_BkXTB`=c4{P@Nlp0ZddEG%UHNQA1& zUXBi)Wou79H!c=4A2c(f&g$Ri-`q5k?scH+I+5dWa(ssPI|*K$`;>`KR(POyfaWuk zbi8?$u1hPp-EM9PNTwpcVpvh;GaIW<2{+aI`mg%UEAm%eeL*TLyGUuX)|*yeX(+At zYfa?ri=@}Zp;yuxD49rWqaI6ZrN>K6yMH4)ayqTsCzi>*+l)&KrT_5y`g&SZGgA1Q F${$tB4;26a diff --git a/assets/voxygen/voxel/npc/fungome/male/foot_bl.vox b/assets/voxygen/voxel/npc/fungome/male/foot_bl.vox deleted file mode 100644 index 80530612715c85dbf934bab855232b3ab37d0627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmXZazlsw<90%~=+>;@m;BywD#f_FLY4&l0KZG@CwcX^J-8vom}C>f+&thsG@oP0XZHj3%P1EU2rfGIIn`Wo8n4P{pes&bD+m|+$YFi{r5_PYt zP1RR@)mME#tmum$MPKwq-%ri@tj~6`KI{ACl0NB^J}Hvkr-eTBp$|QdM*3PLOA@_5 zs!ipoJe8;N3?9$V<45h!<CwW zAt|F$6pXpt#xFcOTpB?bmj5^SNDLzc)O3<5P@J;Tc24Q+Ntb;VC?0_;?CW z;VC?Yrw?i2DLjRz@D!dg%wuG_rmso##wYV+p3IXyX!cNJI$$$ThRAN1U3^TDld=P{ zoy?PY#OsD)c^nh diff --git a/assets/voxygen/voxel/npc/fungome/male/foot_fl.vox b/assets/voxygen/voxel/npc/fungome/male/foot_fl.vox deleted file mode 100644 index eaf44433d03d8801fe4e5cdd0d9db48d1fad036c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmYk)zlsw<90%~Rjww!GK7ITsT)ThT_*Cm6S(2!G zRjsPN>Z`u$`(Z_2Y!rRb7kxi9>$5)F$@;ACmrMGjPx_=tdfyiM(1$+sI2!3okt|8{ z{-{=!r}9*u$}@O8KcC)fe=Z-kdZyN?)!<1yi6?<1Hyy8wizO!}2PH+~@fAH!;z>M-M=kx0>9f>FrfV!b!4o{e6FkA= zbkXw!Pw)hfONyQ+c!DQ*{{H&b>i19W_m3}LSv^m{xV1Rm1;fd~b5tH=FFV=FMrK*d zN|q8wImljivXxD=`*XBAYuhVXN*v`Nd)diWHZsdvRDkP+->0CmGPk=NW!B;RP=NE77;`=h<VJQ=*Y{zczqI!H+_AnGU-W%yHa;7Won(F1_vMm4 z>61PwlHOknedt3UdK``Ptw@$6djF`tDo^F9RnIecMPKwhm8bG_a^T`*gG zJR*~_0oh6B$voq+@noLNlX)^vf0UUg^JJdPlX=GD9Z#v>nXc)Zo+t4np2U-Q63=)I zcoI+INj!;Xyc#@-C-EeZr@umpC-Een#FKc&Yc<}O{*?Ni=^7hP z@B~lr1W)joE_$Be37+7wr098qCwPL#Wkk;tJi!w%E-iWshRI>zz49bSImljivXzaj zWhHSR?fIW*PmYd%$T!)^rEFv^D~WqK$x#lnmz`{7BWqcCLs~nXPVIO+w!`7j_WOO? W?RIUu-L}nU)7I;CTdh{cM*Igf$8WL1)&xHBv24gAt6momj;QFoB(M!Lavan{K~mP zN_IoDR~Vidu=6_ctMT~B*zaDyfA}LJUS3|k@)ci~5pSR2R8l4z}0)uHOE{=YB2^?lf<&#gVb^jlwyFZzCIHa;7Won(F1 z_vw;8>61PwlHR9UjpQ=!>4G@>HHqt~`~e z@>HJ6<1*3nRG!N7^U=NW*D6otsXUdZ^7Ox}k-le1qDL=01)#WDF>&F+5WOFTr|=Y> zu~a;Tr|=Y>!ZVhSr|=Y>!c(kIU(&);cnVM9DLnqxSQU-$z9-T5rRT{!nJ4pPp7A(% zGEaucZkSCz9+8W(0oh6B$voq+@noLNlX)^vf0UUg^JJdPlX=GD9Z#vROxN^X-ybM-C-IEefG6=Jp2U-Q#;d`TcoI(nNp3n`7n3CyCWDe9@$^?H@g$zalXw!(c&)}8 z)1OjbnXa+-SB)olf+u)_$K|5u37+5y9#e{*CwPJY-J;BS$RWRJDpDL gcs#bl;n4Q`ecSDJZM)sJ&1Tcq>vdbLR>nsB0shT(^#A|> diff --git a/assets/voxygen/voxel/npc/goose/male/leg_l.vox b/assets/voxygen/voxel/npc/goose/male/leg_l.vox deleted file mode 100644 index f7aa3eb686dc4f758fce6896c868318bb781620c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 zcmb7@Z%mU{6o*ei6E+-Uvy@S`ww6D(#fY>>DWH}?C#3>Kwu+sSK`^spW`-{B}KtkeTAJjjDv3!hS90 zF+H{!BNf-Sl7C1jKB>-*3w29^ysqva%0gl}$byzpvoO0Ok2|{xp?M225f&A96+bIt zCxrPggw(8X{fg3VVcH{nyI)v)TL>zBA|Qvfz&4l_+=(US&@!9yAj_W3r7M@`kIBvVPWchVd*oW%Am(W4AIs@-p)m%-p+fW9>#6XVsmF8R7fygr9B;Lm>;35eF-m8u;~x4*E~$ zGWNBWD>n;R!}zcIYg9k~PyPCwP5)Vcjj@p4T08xXt|#hGbd}?9IQZN-MR~Va{T~YPE8-Xn=i93rJ*$y#72ECm#L75B2Kp7z}(=5@UC5l-|>)c&RI& z8{d?$7%U*F`t^7Jn=D26w{IojDC6S;9!9#`n2R4{aAKCoR|(E6EVI78&d%eb>>i%N zcYcYE%d5EEZXO6omV)2OTovwLee`|9%RfGK{l0pClXe#uoqM>t%fl^CD{3Sk&fR10 ebEugrNBldHn$joNRPN)vfA0HBr#Cz$NB#t(H5j7+ diff --git a/assets/voxygen/voxel/npc/hakulaq/male/foot_bl.vox b/assets/voxygen/voxel/npc/hakulaq/male/foot_bl.vox deleted file mode 100644 index af8eaf389e03f62762f38af737823bc64fb7a054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 zcmah|ZA@Eb6h8O9_oE#St3ZL4FAI#en6dIbVcH2~D<3m#f)f~VrIS{IBV-|rG}BpK ztOQq^3K%tP8nPH169QzLKad!LB+CNJ;tvg3He-xGOo%^>zkEDpnG!?dn>;zsdCzms zx#!$_TVFVyGfG5F2R%pFkWVE#=4q>YEbj2x#n2c=#_^ZiJf#v7K8*}XCBGso-HI&x zNhZG}XiXO6mnF%sknEQfj!QCg(XF!8B(}2X7R*(N^B96_$eb%nMrCXBeJBedjye9V*+)r>^7m8Px<4}DXbB(zwE6g>YCMiB$ zs9n0Ec4><0)rHoj3D&VzS2WJie7dB16-oG1hCx=ljI1%rn%5`{UW3A1(fLkiuKNse zD^#yhHgp+;fqmA=y3eSvmaT#FbfNoH?s4?c^9M=US|3$bRw5V-;(nBH_|s+NCjSX+ z-UQYyh@Y#Tc^qljhm$9&5FBX0eAt8e=t<0v^`T<^G)!(Y(qG9z&bdN3Cia8sR8Y?@ z(B&sV%VwCG2&uhx}h+&y3g>YqZ42n&qw0|ETZHWtjp^q3t>Q!cDtZ$ivXxLilLew47$O$apSW6!EF${44Z(IR5)u-Smh=RQtR}b|Hk9w(gJ+5zh`gPF z=}R^&&E#X_b|F6Do^z9gTVE6KD`6;L$9Sj&%U5f#`QtJ451TOZMKWgA(y@VTwDCR$ zdCrKB_cB1JaS%Eycb>nuanC>Ve>vE+HGfvx<8azi;LJ`$l_L=?mAld6`gi{FEDJo& zJam-rMStynv^vcQlv*)zC?9j3MJOpL!3Px+Fq<1t6@Clpp>(W#M!4Hfn6lg9a5&)4 z9YEvZSx{&QDg7x}7<>2*&sq4}$;!eT`7u0O6@_p30@6BDar;_67TVGg&B?)k`^RHKu`39DK8N>bzr{!2+(B7i7~_kpm{?iIPxuRNw;T6)m1JPx4~RR2dp90F l-#z}m{x8md;nsh)-Ck<%z#~5%e8hLMJKb&1+0J*+(%)KGM)Lpw diff --git a/assets/voxygen/voxel/npc/hakulaq/male/foot_fl.vox b/assets/voxygen/voxel/npc/hakulaq/male/foot_fl.vox deleted file mode 100644 index 56f63e1b31d475b898f31582f99531a4529cc2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1472 zcmah|ZA_JA7{1T*@xJeYGzvI;90fXnaE?tqpn!pe0aHY5Xp(`lgk$GDG1D=}l$}{d zxrmW;MnJ2E)|_i71_P${gIseSH|LJd^`pj|w$}R5#`@9v)z$stEZ5k2wrls-b$>nY z^ESV!d!?PPar*>wQGA>;z;ZhhI}D{m zhG0me-7U-xw=_d;X@uOu>M*5lHw8ngc8j?db1Y%7Z7|OYnZoF>gc-7=*^Zn zp8c9&brP2K5>narj1$&3CS%*d6ttX3#Rs!1Q5z*R4H4QW2*(nf+mwx*hz|wP0LrGT z;q6L;Zy+0iv$+UfFG9v%Lcs~HJxr*YBhbs-zsCX%EeB1dp>M4h=hmg;?j|p=?HLRa zVV3cIB!Zt=4nTr|8;j04T(=-fu= z-A5QZLYO;6@CN!2eETvs^xwdS*liR9`%tvm)KvxXY1ImxD&za8Ou^uL zow#{r6ur6Z8L9F_j%*j=#%Ll1z- z1>o4oIrM%xjSr{3!zbU~!G^E}a#UtAZKGK(xOZgtpd0bzDOMe3smsPd^ diff --git a/assets/voxygen/voxel/npc/hare/female/foot_bl.vox b/assets/voxygen/voxel/npc/hare/female/foot_bl.vox deleted file mode 100644 index fd7efbbefd2c38a7a37ab33d9e347fe7f0c6f09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272 zcmbu8e@xVM7{{N__j_k7s$m?52L{&x$$_&VLP)YBxD<>Gkvln!xu%O7a~5k18MEo7 z3mprQPXEZrnq%c8br-Ak2V;#nH)oElSq+(*bJg6cRr9}B&ll(B8mqOQ?Y;N&JfG*s z=g0Gjtli*Gibzv!!}Ch=gG;2PAr`*RF;pytTXBzKLtCsNrR>O3g|QYyjIA&WqDI_N z<8nug%Z?baBVxOhT@kTdQDeDUjV-Sl%T~5qMRhUicPTrtHQth&Vi{dGTGJiT;+kio zVp*+X%uO*)jOJTzh1F_|>c*+7b&T4!r9F-6x(}^oG{?A{{_d#Q3iYpB^-Qhyo0F=l zDjc~oB&K&nxZ)edb;WRxFm_Ow92L%FF%WT!`QArz{wta@iw1Sso-@Q^wk7s~LP_F=OuqxOBFJne(N*qdnuBg>#<^ z*S->Z41DO})CC_i1XBc z5!SprLCeW$LZJ{>1SCztpV-sF>}R+4H>>mYZ|nLA=l+?)&fMLxop*I+(2+a7`FK9x L-8pyb^Tf(uyw5s- diff --git a/assets/voxygen/voxel/npc/hare/female/foot_fl.vox b/assets/voxygen/voxel/npc/hare/female/foot_fl.vox deleted file mode 100644 index b35b5bde3e127d64d8b678e1b9f56174e7f8baf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmbu8e`wTo7{{OQ-4>%&%yzr&Znj;wE$?n&ZmqfLvRm7wH=8!+o$k~jF>%Kb+aY5f z!_Z4<%4p8(^p9*=$S86CV2z?b#*iU`s4NRB=1>u-2r4rC@741?5hO+-KJe!Gyx*Va z`8=N=&nLWky(=Xm&Go@m>Li&V(i)5eo-&D=MWK>Bp;+G*33jMAtw3Q|q+2XTSgg`* z7{+fZgf*dC4C^|>k`Xdgm$aS{5=%zdFccbZSTaL~VO3Z{hNu^fH8M3uc^Xz7TSIG> zzh0j%uC;1vYB24_kg($D6eYHM{AIH-IoX`nPX@o_zmVg%e% zb6cDgMctJ4`KTWAQy8=19&qA2UQEUL1>|oON_XqpDWPsckhNMro`oczLC)IfUoel6 zMR{C(wGf(~Cn>_X;(NtyMY2~IJtRzy2p7&M_Y21Y!dGjAnXN)Zd2d)4>`=W&Xz&W{ zH9}9La76W%Dksr^n|OIl?LWDB{TIqh?9^2jv+^|$Tf&R!Y7!Eg zgy9{+#0Nrkk&~dWl#SI3i8a;|_SuP66*92AjIs8Yh`d$L+O`dB@9ks%!4HXVk1)8m zi?NY?OrJYSc6K%ex$|(jTvT}7R4;siC6!(Rbrr0Bqn5$<<}><txBdr|Nk9s(gc$uk_4gCI7E3pGP418|m%oPVS6hHF$`$CIJbv7{h{yOd)k3RPK z?|d=FZ0a*E?>)%U{yjJn4$glnT-_j?@Obcgy>yoJ@aBrMNFq*NERXTS_up`rQ+ubV zh$EWY_5J7*V-Cm&Ncq^kJkF{)AOFWxnj2UY@a7olG=n2Gx^RrVF15-mHPS~(t(N15 zaG)e_!hp&Vm@xoIzw8VZRwfmOru8aaZ0KT(R$5pYF~iOkjxJDoFS0Oly37zjlU|zS z)BprZlimi5KEi>_gfUO%?%e!Bi}+b-Y;2?ZUgx5^;KSZ2)~7ryjauj!v(Y_O&YDZ>SiBdkJS@E@ zz~(s+yJUVWk4Qd3%vyMK-D*y6DB{iMO3C)enFN>?{4DrQkQ@SM-Ul<&;N=VAd%)9P z@Y|i>;;Udt{GkAt*e~%xu+;_jG=hU|;3|ltA(SD|;k8ozBf$l<`YYJD>Znv|>m^)d`M=I@S@q!a5BnQ9(bvk%J3%f_MgIT!H&-#$^AwlANO5W646luz;PQ_@u_Ru? zOP_%^_kd@ePP$w!_EijW+m=}(9%E6oi0PAe|KW&DcBib2Z&W3@Y2!HeA3wr1J;l8G zRTa~r5{}EA{qz2fI-^&2*A+(l$U`Tm89$TayR#Sh;SURZ=Cz~T^wuP|elo|d^9%HN zJiG-Gc>?}HeF0qh?(X+3$$tG;ULIlgof+ELyL*0qetvcbjpV)9N_wT({ha&l6>9Mp DtC%`( diff --git a/assets/voxygen/voxel/npc/hare/male/foot_fl.vox b/assets/voxygen/voxel/npc/hare/male/foot_fl.vox deleted file mode 100644 index 095ae74132d6a0b6a44b1e7b180c774ca41410b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmbW0ZAg?^6vxku1+rFHj$<>HPNUY$xKx_?QdZ;YY>nlXsZ&lR5m^or)evHX*vn+} zf;G9bQwx>7AhKIo*);6Z2OB~nXnV1UAVgwW{Mv_zzWut75kyG~9r)k>bN=_-bMLv& zxt`VQEfEo^Ds%s$NNOjD)VRH_Ntℨwm9QDJ?(*PX3cvqWvs>9>h4!6SNIqlmsv zbQ9`Sv|`yUdi}Pw%YP~pl~1$c;$k#=-6gCzH%OM@J#P&L;_<36{hIqW-$Js}h-tG0 zOM5Q%?h?c`5o!Jbxi}3OG?H8;r0o!9goGb&2#L+YIxKAI6ZSq)Ypcy<_^f2NIVg-eN%tGDcA9bYWRiD(4rv>O>;o!yL?|5)q*m=8 zNJPR@kbVP4=S-z{ek#wGq(kK_!Xm^JUMT#h5N;Lveih=q!h@U2cM2C>!e48J;q8J~ z`K=xyv{mUXLb+XNC>B~OgfmL7E->SBSqW6zh&1NYv)|3tj#b1$>lk?!CpXJTX?`Xv zm)U6a6wzEM1UCuYdxU|LLScp(w&&&l;Cj~@fD=gxh99l_io``Q$}t526nc# zaqQG@1a^7}bu<(0JxpJF5ss7url(BBVzH2Cw^BHFHjDD@xJvU_{c{PSLo?{RVCCfl z2g8qYIji>cZ5AHh5&nH91bjBm1Q#%Pt(-TnYVaRVrt=R2H=mdoCiAQM4U@iIe_LG< zk*0FuN7gagoXJ6jG7N_N^uX%{S z3HF}uC3rc?iT->1es_q4yN;LA} i6C8VI8f$&`$xlj38tXxA@{=|mkEeaU=JW4yV&wx6nQfp1-OpSE2RWo|on!N}jG9r7q z2y; zA-iiAH_OWCEh^$qLj&)r!Irb4@u$M$cq#3rTcJx>76)_$Kx3PGQ>4GC`3WMApuTp7 zZ591E^HWHED_(8WXQ#e`mOd!kJ;#1+DU*k&<~CEO+=Mr6;%-Q|*edk8h0Zdev1%Rr zbhdPNF`UV?3nL?2INedijmrfL_SEB_^x(Q$f#5`z1(~ssbO~~N15%&IvA8gt zi*j^P`>zN=%}g%{S7$3}_}B_B`k9|^=ND1EtqZ;ixo5(YC&I+6p8G-gNgXVng3lfB zRxk9UhtSRff^`L4J2A$MgLinj{SA-hJDCiMoFb!$lBpSFsd)+#uNmK?{=y8YNQQ}% z8uyJ7kH^umu-72JVWZARP7$;nPRh&6`Emvd&3$BKjOP0d)Kyl}TwAq*oepFqPsgqD(J)O_2Th(2m}K7c9b&EQqAE;7jtuSOixb}3HO@zZ?VzC(6Y*xR7 L?%+TEl{b*TLsQNd diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox b/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox deleted file mode 100644 index 7620a8fc53572e939c28ed19cd8388f7c782959a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1248 zcmeH_-Ahw(7{{M;c4k3=VpJ4JW5`SriY+zG*@{*U@uk*c&9q22Uus5gbCwArF+zK} z2y;4#k2iZAZ;ioXT<~dMFmUt!kUcei-JkVJu6DC4+`oDZ^AXHRe!t7{j6} zs)k)>*O(eBqP{p%Vmd|)hxQq|Rt!^-5{)}khC?yzoO8smebdq!#kADdGtCl>DPq^E z8roOHncBa1*G`?OXm2V6JVLIafh%q|J>}*6sjuffUTixlntv$VOSH)YdxIShTErz)(GR{>p0$7&eZu*`n&50&G_+*RUuf& zTS4YcBvXMLU4_&+Ih+(m3keRq*8LZSh*oA6gs}(J)PHP+r@cIR(!nnh`nDeUDij_G z_wNhS5A@s*!cS`9^$>jSgjf1PKe~x-DZz@+rg`h8BAHBvz~u$b+*u$nF+scDW6B9RE`beecPPAC+@=kw9h=ON}xaH;D8vjbOoJUY+P&37y&Kh8rnF;{}q1EK8PU!Nr&uvMg%6^}-nMem-w^=fXV6KPUfl&hvlH zc|N)hAI+T>k=8nIn{x7-S){}3YfLhTGLwP|$#V)vkNLb&$)YR zYw>=(sFv-mZWrC&3}Da40F;`}1)(h?YdCjnn?3d zD!vQpe7N!=4Pl{uO6Xe@&OK0T+Z{Lqc@%`*R75>w2d(6dJ8;kEu=mbRGEWEv7nJt2 zuzyvMH`M+k3CL6mvSej!XBrE8GI;oMHZ<>GN`w`KpA>#qm^v#gUJ=$7guAyC_Xu;1 z!na3+&9{U=lW?|6mg2LQj=2+#p<4@%C~DfyO*W+KZSzRZ6(ClIekZ);@TX zKjs4z=iAs{nnTMgMV#uYWUyI?bPKZ~VfABSX{?9EcUrjAT}@Vc8eMK1f%0s|n+l2c zl#rI3#NpSf@x5NhU~d~Er+rMkH%N40l#Schn0z~r@bPRC6BDV)-$vuU-SpHrDalTy zrqsp6rR^+!k;l(>-E7`3<}ZCg?iW4^A8<*>8bghSufzoNWz_yLai%>&Z^{CfA4p?V)Iux9eCXZ zoT%7Mu%Y^?`OC`6_@r`{lD%`(j$Onav2*83;o))NdQlNBmy3b?VGbQ!LLwt%1T$Ef zd2)y69qR2koxEE(#ev#MPF@}*t0$BD-xRXqvoo2S%YXMb>I|)89rp+hz`2;LlV3&#H0R^CW% Pl{4bc%Eg4Ay4SHS?I-G>=C;wxjdU@*GE&ntxk6PMsZ1n>k&bQv6fQgSbLO${iYY znwtwZ=R_N&#_{(l*b+rL&UH2`~SigtPwhDrS^(>9}SQ_tSY3d9mOQ(tV zI!NuvAme->~MukbObDCx!hh zg1n{s58053?Z|?ikzEPQ?MdR{t7%a85)&dUD}GV@p_n);%zrMd&IxyKYU~weYJ?w- z2pjJRfm-2gt1uRDFx(+b288xfVX#`bqWPvGCxMzwhMIDjJXJujrG&|zDpo&wn?Gj* z9 zTr7v*D8v6|CA}Su44w8f_CYU;bHl9PzRLK!nFNog5fc+bdDaeU_U)#<+(mv`Jmm#$ z#xCt-{_9MBz3XA)ejZ=yo{O`>y`O~Ne-?%Uxm*bqvUa_SC%-k*e>tAf@9f-skje(> z`1L-*^Pkjv85FAAo6p~O=;deTccr|5Gbt8N`gSVZ+i59{3!m@97I%35VwV%2Cz}(+ zyXmhkduIN^!a_bPnI?bl3>706Ne!iP=NsYSap78SE^fD*o~%I*9b7;{LnQSlu{`zk z9iDgUx8rj0e$E63D#kf^d6<;;WbS{T!?Hh>@r(@qyT7HgypA>BqrV5vP0bPdc9BmO zZu7;hb@rVZ;lRad>c3i{`Nle4ub0OHVpH%p5$nREAD^D@k$zwQSJz)K{GV;cR&leM Nm499>Z2bIw`4{VKF=GG# diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox deleted file mode 100644 index 0c0fc3be0447e8503b6192f46bb256fcff30b1bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272 zcmbu8e@xVM7{{N__j_k7s$m?5fWdV@a^Nh85R&W&PCb+i@$Td_=9(^U%;{KT$e2zq zUFawzI&DkI9AjmY(#2~1LCi7d=FE|6ZH+Nk&A;0EqqY8f^?Y$|uCZF{+1`6U&+~bH ze11Hi=++&+l!&x6gkM&YpIstt;dtl~$562pZpA~29qsXOTG^4+3S%vc8e3tO#f-RP z#^sJ0mmM`?N5yt2yP{&bV#absj4i(!%T~4{qPiIMyObT+8gD6EM%RtjbVs$g=9!pS zRz!@^cqc~lEw{po7^Avz>S`UMwry!oqq^=xYZ=WkE~mdcCbmNT+cv(`p#2u5wzd{W z?hFf?&dyTo`IFy09%g1*7X6pPU+_=J3VO-g?ZbDdg1~4U5^^J54dQh#m+)v($X45XQK)Xoq2<%~a*!|fLep!rEg zM3_>1ulPkV(ko27E6j`w*RQA@6wZf)FSiNvuM2Utd!xe89`*MKjRB#fR_JLG&Zxh& zI-f+yPhV>psl8Q<9SHMj&laW*$5@#CoQh&E^;Jb|ezA*@>ymtHS*h!ZFHZ^V(?=RS8nAoPtkuqe}7~xsm?}b-imQ|Eb+h3fA^C#3#kiy zd+ZeJ29A=K%;VZe!tI^H#j-L2fdHMwJ#5)Di6r~T>CR#5^u0Gcl&`Z>Sjgeh5!SC8 zX3xpvtmw$)=4Yi$#q$`}JNx_nJ8@2}_O=^zcf!Hb<0LPnd3*9I?|(DLa|Z@ke{_`1 z=cZ}9JV!7X`3nh7HWdH> diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox deleted file mode 100644 index 5690feb0eee4752833d34472bd2d404d1b3392ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmbu8acI%&On1BOZnj;wE$?n&ZLPWGvRm7!H(fgC-P~zIV$zNw$`NB8 zL(xlV%4*K*G*Fkx7-cS<*HQGx8Ztx>lO++v7!u)MgZ_xrPinMB1B!Zz@SLN2D_t2|Q&A4U0l8c|x(XI}+?wHlsvgSY$~oMp&$} zWEjSh8eyHFZ0#~EIUz%R$@)1VvE+meL!tSGB{yUkR)r;Gh_Yy|k*hhXv#{#e8rr_` zjpl4|t<})bfEoA4giYt?sIdLX?=~B=v+Y^`O7JWG2?c&Tjy*11hpO?8HzI*tr2k3e z;!0%BPC>g+yiZs)D!g!2$mZWqYM}68)Y0QRu#EEaBoSK`fDc&tq9?`W^Leq>OJG6d04@o|QOxqYe?+6jqgJEH`SN#E@#VhnQ z2m`IcS@k>WoJ0d|;vF7Rduy3E5af%2Eo2UNu{d{~>IyqewdHJn-NWASTKe0B#9PAn zyTZ(eLVcN&ps$kM^=pW=HWK#PiPn`evayPE&x=I1HM6687yAc?IC1JD;`<|v9_uGP zd7Swh=gH5{r=)NNE|-fMubcWc&+}@nmq1euTQ@W^`raz0K5_HYEguVasyU}MqkDwg z-wMC{AjG2{&L&=F?n(>4{oG0HWC0_e*|>Js!2;#~dH+M9wWRu5n0>#C2NTi%z5fTF zr&&y0;`?K#ST}qWN5a9)PlbECgv%ZeUayzFiUGE4nnn_Fieg1%&OE%sLr(3TvN8@= zC0W02jNX&SDd{QZ&X-kWA`Zs%%>I7J3~kJ6NFU*?c9gyNqeB8ZHA5WfyTh~Iwx&g!&C!3z)1 z^SHstPfV^Y`?8Wd?{cH!EF`AzfwtC#3%0P{7O{y6MV#76Zf%?y=5RJHOewst zI@X}}fiYg^DSJ(VrLjFH=%#xbdfMm>>}1NnG3x0#N}P)h{p#@ zE<9@+a={*%J0b5@Yx1O-lQUrd*67?B=5j6z&apnmYvml>|vy5e5tQ&mUGtcBTu%07NfjB+IsghH2l+ZWfJtZOTsttKWZUgO*xZFF# zx`zETj+{E`Kzu&%o%lU#rR+~R&X>JAavs=sN({PAMU7>LlWQG-G4cbg^!E$5J+lXrG?M>iG$*Euu2B9sJBz&qi}@8VYc`mHG}jtgGiD|m~(e`yM4_t$VHYheDw zC|-E7fu&i&sojFpdjuZ^YonVSIL=hI;J_=%(Xt?ng@B4PBqX?fq-9wLXj;x7~_6N9&mX z=0>dCIfR$?ZNb|Qj{@0d;Q4<1{TGyT{Wv>2f|a>#xcb^|eEjDFXoP@9dR-=+!!-Fg zL!9#kc{wfET^Af3yE*>j_uu*-{I8yw`UL;LhBasmuR~+71H0-SI5<|t!L9$rzhj^e z6OGL{vg0u7B{jr;dqg3O)8x|8d0W%>FHpXuZ73=H60Z4r0xT0rrg7qH>zdi>^%8m>(D zVqs_q|69NGD|0=1;2KW0fTx##hPj_y#&<9M3P1Se2l^SJxD3pn+SaV-DvNsNz= z<0Gz^cnbaj^?~5Sx3Bm2A@}S5z4PCOPrkDo^-G73;L~&Y_^Ev}eY3k8V{Wu>;w%3G Dz~`BU diff --git a/assets/voxygen/voxel/npc/lavadrake/male/foot_fl.vox b/assets/voxygen/voxel/npc/lavadrake/male/foot_fl.vox deleted file mode 100644 index 773fb551cdab93fe10614520f538a1210e4da179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2748 zcmah~TZ~rK6<+&(IsZRUE(0@zGt+^wGefK8QW(Y9u|Q-*Y!IOeNa{Jqxk#vl5Q=0X z(W$1?*itfKsEI*sY@1STLx89+)-=R4A-$NUFHK{7X!>gU(Dd!=cObT;A?ZoJtbJK) z?X}jo_C9;Q{%HSM5!rFy_(K%(vn;Y}eDBs)GvU`kEFcQv(Z}|VANL&adsT@Tt7@lp zZ5t?48f{CfUFDT8o%Ut6xy~ln!Ne-+SSJ;$B%zGr%cw#X#Fl|}QJX3%TPd$f?Nk*_ zs*_H&F`7P2WtAa5AQoA6f4_x!M)UnwU>Ph7Yoj50KqFyu3Qd+_h$%WE; zT|35a>E97HsLBOZd!k@mI;z@4t`jaQ`r|xNpVB49l(|Q^tg2*FsRGAV*Pgis%B+25 zoh}`7Fl)XKU{`r;L=&bIuwD%3wX?YStT0ns^*J zCzr-CCP%)>k#+RNb;@L2t(cE@TytEb^p-tiBkM;VS%*ZZs7qlTBjZlSGavHX=&{yG zhgy@DXgDUKrL=)|>_HPbj-_Vq+A`lLr6yONyh_8b=lSF#n#i0PJNfbrPoc@*Gk^Ls zrq--=V*J|c$^=t+=4DxTn{=(nwPo!*Yi6lySa<7%ToH+PCDNX`B$G;;OqEz0ooLIL zEICN5YjUm*j+_`r?isfVwWB{r9xdaxmOb3mI*`{)?i?g|@vPo6uy*F8xEg$L@?@UX_vc+C6Y^qw$S8euO%cZJt zsm_g#%~fGDbwbrLf$O<$^L;3MD6^++Gqx1j%Q zLS2x*On*hA=Ng}lex!cn8Ik@Y_apZ?XP>l*?6}XjqeZk`qz}eR?lSweMgQ%_PZN)) zJ!Rn&$Ej?4=E3~3OT1UCHT%;s4u3rs*4>adzH`>_9$VIqHB-%7)AWgN_#l^>?-V)n zd;=|eAqx9~Xq#LnzNIabtIT(`U~LP&u~{(=%7XhX%~}y{B5T%&@37;W>y_bq%Qv); zDV1eHwPZ3R#j%=Dg_^L1Oxl)A`K+ddux*)iTrmd$-jV4-vj>Gjplo6{4yTe{$)Jz_$JI8+m6ep z#&P+~6SzEo7#lA?jfG>K==x?q`k!5m;q!MvwmQhc40(MKAx__M%Oz#}T@p1&G53j|GPmSR0 zwBYDw!LcoZb9)%;`ff~b9l(j5Lpb~7TFmU;h_h3h@xgb$fxo{wjnykVanIU5Z2#&I zp4_t$2Okj3J}x+aRPg=}1YOHkpl`(hKHoct;lVFq$>POWv}h3)ELeb6QQ%y=jgvX! zK#X{r^7IP_aqYcxShA=CgM))O^Q{5Q?CU{6-Q|lvhdX-~V$JXXHr#PL?p`~L)8AQv zb9eXSwQZ~M?jvh~aux7G5B~9U;$#m_Ob_AQ>^fY1YcoFm%Px$hgpuL~wugYdtjBTY zdAep@jtMpo3l5ClI{!lt-u|Ebe{p=r_56F6FTlvaQjGLV^5jC5jpeGgu~e-M`r+=+GT*5QX6&!e+*J2stq9$m9t`0x$EpY{nZ z3=Ls;co7a_AJu=L1MT$#VY;j`WBo!(xY9Gt_wo6ewq=|wC*unfQZDz@g;o!;&1SyUw?$J96p76pFfYI-yXyKD^Fo; zYz&{U#Uv8=C(K8JkKer!-^c8)|F_Ruc>SK;EMMEVAD_*e&CkZSlDAsB+2-c)Ep+AI DNlePc diff --git a/assets/voxygen/voxel/npc/maneater/male/foot_bl.vox b/assets/voxygen/voxel/npc/maneater/male/foot_bl.vox deleted file mode 100644 index f08368c769db8e1a87f9ed3c5cae087bfcc92705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 zcmah|ZA_JA7{1@<<9$ydgmL&h2y_sGBOT@A01B&PK!^wpKS&Np+Hi8lOvjo-I@lVX z1L#yn4774!jj?8GF%GNs!(4OD&ADc+wKd0FYyGSrt@ZEfelQ(1w%+a9{oLR8eLc_H z_UgX8Ng`_A*4V;=I&GrejiLHAM&Zx(51wMVuRYXQER2=tG($?7mWl?Iq(N!xsI=^; z5HxMu+HXlas+2XTg|Uf2rR9jyVnizgJ}Vh;Y#q=_1(a3+M{B>WS!bJ+oTpVx+bU{n zhO+(2X5HZ!M+a=BVp7RrCFQVWD6XM7SF&A6j#HXzGPswLVnmvr+78$@gQaAfkWN%8 z$L~07lRBz+POXfOYYP<C6mGgz9l;|lOIn6@lyTJRo{@7`iaVfbavImh9iyBc2JM#{Vz zqN=JYL?RJ994BnQbPM_Jzwn3KjY~HP=DXS$M@!RY9Nb@x$nhq`M;j3zKZy9$F;vEn zA~CQQnFsQacXA_&rni9VHK_M#(B)@Ax6+W@Oh`XM$Q~mUe@1Zi5)y|9DXgbmA(S^K zprhT5(7P!(y|@l_5kl((;f-sA6W?-fYZh|CUaXJ!P_Yn%r_T-V*(~^Gb5U~pd32|g z;?%lY6i*V?fIxe=|9}fLkp!A|W7N}wxy`AVaR-4N&tZZHi;N$_Vf?~!qMvZ>J;Kd7 z!ky1q4-zid6Ta9*cyO2yZXoox5yrx4h#eqIh6!C&gyVID3v7>P_aTz969cVl5EX*Cy20l;DG!Y@DxPKB|*37VX7}qan;*9KhlyBN%_vi%5qD2?+_vNLhd_sZ%;L9`lY@5( zCh%hQIJ(cokkOTnd)EuF7|O(WULOA2-^A_QK9Ba@chT1aoS2%!(8minH~$STetjQ- zW1~pA{u>gub-?p_1i@es5BXOi7XyDn-X|=5`Dnf+eqaCR=U;I7KU*nhIy&)KH_pfB P)#Pfnl{qWVtHjdZXXI5p diff --git a/assets/voxygen/voxel/npc/maneater/male/foot_fl.vox b/assets/voxygen/voxel/npc/maneater/male/foot_fl.vox deleted file mode 100644 index 7cdb03344dc946f261ad78591190ecbc87ac7751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 zcmah|e@xV67=OO+kMCU}gmEC;Am?JO3CArp}23f}i7{z<3Oi_943?5@LOJ46 zI{Xe|o6>Q`b82aPTwAMzFjDD+k_?uTrPT7c;C_PrQrTRe(nuw(lM?C-8cbZ|Qs#+$J)xgQH>kDz+t zFw%o7k+-i1MMu}6EV&8Ps6qWtgDyP_x{-s-R>G=7g!~CY`DX-YKOsFv$YMR`3Snbw z8oKtl5PmlcCl*(uAxdbQBD^t682*-X+uSIKc(EqxL)Cl;o&guUr`+((6e4i*dGuyg z;MnSVlur{@fIz#r|A-Sbl>wS_VcgS)%Nw$B(G>!=J%=eGEHZwGMDPpCsUgDbdxWLS zgj=7p9wJ<7Bz&=xuzZjZX(9}D5+))!NbDm_M+iMNguw>FIkqq44+4rAv02o^sX!{nP@M7umlOG`s;)=I4R zWFk=JMU{UoHdmBk;#fXrFM9FgEgzQetiy-gbAE#Eq-<`2DAL zG@i`F+lx84elLJ!6e7%gr1tM+UIq#EW&hs4ZKE5JMsI5WLoI6`?f>aeYij?3+-KnP zX2VyQf!eYRbkwAyBfvG9GE)0j6}ZvtTZ6q-ehf5hLZ>eWk&PalYAS)*zp}Ct;aws0 zAAAM5C*DV1EDtw7B7EOPxKdh*tXwzpi%YPoumltvLH0m47SBGo!=r9~I|T)Jr(_B* z)=r}LWCFQ8t8nL92^Pb7m@F#7fBT!bmaTKx(|#KReZcV9%ZPnEkJEGC;QZHj5j--E zjBCFkt*#56*P{r9Lb%Vr3OO106Y?(M-j@&NyT|YA|NQ(Hrv9_X<;AYOc&Hoa!}F8m OlWdRYJbr#cEd33_(p2mK diff --git a/assets/voxygen/voxel/npc/marlin/male/fin_l.vox b/assets/voxygen/voxel/npc/marlin/male/fin_l.vox deleted file mode 100644 index 876f99f1bc59468f15720a3bef6481823797a9ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmXZaF>4f26o%n*XJaSA`~#U*8#!2M6CIH)RH96bX>8oZinRuN$PQuTyn-X#=GG$Jg+}|yBYx=17KXtSlC#k zj0KNzV0euA7@jgJJch^c7#_n@#)rr77#_o8c=AXMkKr*qhR5)fF_+0?P2QByGoOej z;)!@7o`|R14m=T01QEGlWbtx~@|Ql}=9nHYk?o`@&nd3y)QT>R_NL-!x={Qb+j z{^$D}pWPGRza>|kK!qh0UpJpcodJ~DUSvo1*~`!h~g=a z3yUdVR8CR~Wj^^4Qs$$~N12Z@A7wt&`Dr0W@?^4x4UgavJc38?2%hrz;SoH7NAL(9 zmL&9e1dremJY0s*;}JZ9N5F7tLeGN2mxU8Y%7Ls%PZnfOI?|Gc)I>%ykQM34f-rOG zNJ|=06B)@sR-`8jGAA8rNkeKM$I*vj@b!A_ec$_Xx%88h6Ysjt+qU(lX}qp$&K3Cw DVCQlR diff --git a/assets/voxygen/voxel/npc/monitor/male/foot_bl.vox b/assets/voxygen/voxel/npc/monitor/male/foot_bl.vox deleted file mode 100644 index 59df0ce43601980e4d214fbf2015dd1e01893e7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmaize@xVM7{{OQk0Ta|6vqK~1ayFLhl%_M5U7rT@I)v?NRJJwHCr^Lf7S z=lgj&U)_^CDIzU({#K>rt|`*)4>UeuIZ7T=u>FladjtN@t)LQ*f-YKI7m1mo#WYP~ z31Y^@ka&V-#1q7b*~E+)%C{-o6eDia%($jY+)#C*NnF=771Nb3Dp!vg3Z?~Jj~b># z4P7FdDRa6e5mT3_t}EM+IaAl7h85GS9Lv_CHqDqbG(Bo++MKznjYxuKMs_v5TqlZ? zB~?{bghC|npqg}voOA&g{fmyE*vGr z=OA-mF1g2x@Lbr2G}@59$B|1i?Le`kD`AZ?OPuLI^QkCzxB9ylzQT^IR z0w+@WVDV`hLPFbw@aC*A6j!xvPO^h;@^$i&GE&;c=&WJK5R1Q!v4cHRBvOeUgmcbYj;ESPWz`o}0_R`&)TCw@2CAevAIY zFf=to__KLFjDE+tZ*TMbu@RE5{Yp|@7p^x#_(Bb5HUE3{Ih@8Ct!I1h`T2RC@B8!p zJe{xY$(<6BmO5XnQu4qQY4`aXpNu(55)|SUYzlk!`hDLk9TSg&P0UD~7|}S*h?trd zHFYgw)AWdLXpwjoH*|>_tG+~aWyh;J!;pw>6H5#UsRm&qPQsdkP1h|`(=9{OEW^-4 zx~Xys@nTx>ni)2YSX>L4DrcCQrJGvV)b+5TD__?vO&7})J*?|mNHbJVQ$mKCW7CYV zsTr0{S6acQnIW4PR-BmOIL)+nHN8?NigQe=s;USEgWR7Gwx3@n&;Ecv?RL&D2{F0q zTcEXhEBkwD2o5x}FzRDrVm}Mh$EaL5O0w5M#=cx~j~7#PVH?tDL;9XTEcECk` z&`rg>7iYg6*H|X*nH)Sfo+GVW$UmWaPYJcx1=+3U4<{g#Nl3`fXo-{At*P97(Fr@A zWm1Gig&zX}epPyMP?-BzSeg}XTFUndml}nyb_pwogg}!p*eQ$$9Gu)IOa+AADq)~O zIIH4q<(UK;T@1GsGIg+&U`HiWhwE87^#;Gq1SrmPP+OWq^UH-C?5w13hcMD3TzE&g zenxP*N6CABkjYa%=sDN);Gd0KM2Et zLe7qqv3#|jKYnhf|8z2Am+e^53|7d&ukK@&{{eL`144b#fAc@GbJJt~UktXa^3P7+ zh})HlJ12>nq9i)1Hqhbuhkr$OCO&sQ-4$EtZ`eks+d-h*$yieXG5%#`W%ze{={xi) zHKXs5F_OWJ&xE^O!j-~8QqnWY$}1o(rvMolCbd76#p#Ft@OY+rJK5R1TQJE>H4_{- zeUkLvG;UujV9}q!L~btso*%2*xjn?*_FMEHhN0Vz7h}Y}ozFHMYP~b0&JHoxMAAa9G^}hZuuU2q%&(`XTUEMtLW64MMdV0Os+B0kI Hb!z2rAG17; diff --git a/assets/voxygen/voxel/npc/odonto/male/foot_l.vox b/assets/voxygen/voxel/npc/odonto/male/foot_l.vox deleted file mode 100644 index cc45052882acb2c0c04a7566aa6b4ad83f18a795..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2952 zcmW-i4Qy8B6~~`@@ALiKw@8*{V=|+tM3GiguwX3$1%yKRvbIn_`LwLGZ|8kK)>9WO5&HnqpzR9oubDw*jbIx<_ zxwmce7hgIkgqShi+#B?>Wq!(OpM5Kwqv)@AkG7{BNUB7ZXi=6# zY5GwOv6_BVuSFKLD5kt8jVLH1%Gxjw)f$mG+TMs_pq)~srH`eL6`8T3XsswY+Magc zdP+NSj75|aMNKtS>zI$WryXdgRFjKK%F~A!&)PkGsNS<@8H@f^D79p{$))kd*KRdR7$_HoSlQDu|FMVrLzbzJl$Br)eXE*fHqlQH`pXMuJq zj3ZR7dqHE(8^Gp5ublF=v@RIxZNhr8=tDaVe0Lc4Fd88u}4U46$5urcw{{ zQ&Xz6ai%PNsK&-6YZ;4pt_70XxR~QCO2@jD%CuunVqIKzF3vnPkd$lM^PZ10>vDa+<7kAUQ#X3EoI3OFD2hW+Dc|#N!H3fXvrCnJd5NE z$YRj4q>bc!%Yr4&(3cu2YgY0*KwtLHQ-hU7GP7~2kYE2h72xlky+e4v>p`?% zR)hb%`a1sg)G@57Yrww;594UlQhd}ufOAWF@b=t1{`cPd_-TJX&Rx`uz1P>{zTsnW z;m{$xvbF=8XHLeE!Cm;IzZXBAJp+eUufT7nG~#DB*5l37ConK;3X0Pv;>=C;Xl<;+ z!#Cf6&vxI7qtnOZ*p?0WZ2eknX|Bgd*L@Rj-r94watUBzweI{PJwH}38wfKD5 zwOBXhDm=1aJWj8ghG&;I;LE`t6q+VtC|iWLw`chD_L2B|-)x-iYr)T#O+ee^8vJEv z4|XhRz^8{cx7&mCNh56}GoU;J?^aN6P@C$7NRXO?5+cfLhNVC2Y= z)Nf%-WV)hRfD+;Z@|`_T^JaegPqUZiKAy9!5ZssYrv=t3vuvI$FT0+0;=3hB!O`@x^NxJ!29&j=zY}_iw_KrLDMbNgMi3 zoyLT&JPy43SM&}(f{uqD$Hp^%z_=%0LOQDvxwe&z`4q;jE#b|HE8cpf!}-b1+P8yI%w6xb2f5X+uL7~g}t2i`zW zc|S&9G84mVH(}oVhj7^?t$1MLtGIK`BY1S+6t;D}jCIXF!H(XeXqmJW&+qsx_T-;O zZ{v^9aP3sg9(5Z!YS*KE>}q^}+(s;FUWB2ICouV%IxHG98MjYbfWqn?th)ME?|pVH;LVxCvi<@lU>`U*ea)I*y%t_M&gY-MDjo33sf$11;?>m_L6O zZkaX-6B;I>zIHS&T)2Sq=g;HBi4!<{_%OC?*@E8QUbMEhV*2#y7&U4Xh7TW($`|1O D_eNTx diff --git a/assets/voxygen/voxel/npc/odonto/male/hand_l.vox b/assets/voxygen/voxel/npc/odonto/male/hand_l.vox deleted file mode 100644 index 47280bd4f0ac51f53972c330e5f0d07152d63762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmWlY4NTN^7{~wr{~c)4maMfh$tfvQ(l?f+h^b3^V@#k=eIq3OzAlb z+=3va#u(CM69$!nkY&h?pY1JVDP(+PX3FH4a}6%py;>+Eias@> zUgP?DBLf>!XiU^{bYlXS*Xyt+YIvHzoU-U89LNY|yf~KA1ra=VTd^C$@z}Dt*<$1I zMt^>bXO%;>xFyZshAos}Fd(Q?1Dkov4(CK@y7 zDhT54@vSuGX?W3{3d1{jxF?8*N8h2pHV$`*nn`Ccv7z($ZLpbI<1)@Tw7BgC?scwa zV!Mii*0-@5m-EPDm{4_+_4m+yKWY)?vUDRQv>G(c`-4(o4l*rt)Xo9N?5xzT# z(AS3W>@tDzkywV$6S%99=sY7Ua!u5ZjT2U0$+6qN;&30pvi~p*6F(4ge303RdR{ga z$(bhzDXnI4mYMmk9!wQgWY;y5bM_X?3Tn``o=2T;MJV1${m^YPd!|tL-eK09S9xV| zG&AR_5b{qmE7Z!iwrf~xJ|%E|0)CoC($e>_aK4c}4VT!m=>P}Y#%M0TKv~Miv^oaJ zip=9|>$h}Op2ea6kcj0mBn521qN&3iT*7-H4P>We<7pTnYMGYopeQy*W?(O|QoM9M zmFhf3H7)cQoS4*M{2b9tVb~g8Jo{7L(&v2n)iCW{-PG1^V@q8%n@cy7WzHf!J&|>> uk%UErqtgU3Jw46T)D$BlBlPw4;c~ffI2;&_M&jb)2nYzk&(9C<{{IgJmUpHA diff --git a/assets/voxygen/voxel/npc/odonto/male/leg_l.vox b/assets/voxygen/voxel/npc/odonto/male/leg_l.vox deleted file mode 100644 index 771bfd55c64cb60977c8910fc75e2c2d6caef470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2476 zcmX9;4Qy8B6@LHUYjl}pF&l#s?XXd3iz(P*DYO)j7Rpa8EtK+8ek=~?H}3uJT}y$) zjvq@^XalPSmw_S(Oro%&KsOyoLdIlcW*IY59d3ybH>S%LHZXhkTz8X`^WOK~_nhZE z=Q(fvoCWvy3L$1qu9{6J`tA~x_Ob9fa!Msi*~BQ5bxJ4F`Pg}%SfjJjsL&`MX&ppH+r%pV?}DswDiqel!kO6F zAZr!Z)^Sh8!l+mqoj7eGL2nq_X&XB4vYKAn)Kp}QjHOet)HYUVRvX4}ku;2**3JCR=vZ3A+KH1`Ou$+L z8>_%ZG9YepXamQ6A6seYb*zK5hn8Ffq4mV;9WfcM`Hy#z@jldCEAH#Shsyh`VqT+z zP+Q4(K9rJpq#|#QJf|3CR(Nt|1M){4#!wH`h-U6|k3BckiFQ6xv!@t7yhjv)+>Lv`_52Cm+7vQyXIE zTuH;e8^+e@UEmVIcft8qHlQv7a!5>!qZGNLPl9+P*H%)esn;~#W0o_f1SyYOD^&Z8^szzLI z@5beY8GJaa1^@l{8h+B=j?4E}W8b4C*fJy!H;){_JFA+pZF(7w_wK@H?XCFHjA=Ns zq6xn)ufR_yl;Fzw0d!ZEBRge0E=(#xT}2W0JpLHI*u5Dir;fwv&Q17Y<0^Dkm*Dy% z_u=nv=P z!yO?$UosqjYny?KZMFE>qGHsS72wZ38SGqGiqDU1!~Rt>arS#Wx2GAq+gos8MG-#T z-GoiGdAP83F8Y>^!nH%|v9+-fU+$X)oY{gK&yK>415e?2+f?+fD8R+`JWLrk41Yb< zg|@oUc%!uly-^iD**yUlp3cXMneQS~HwK^ehq!Wj2Y%RGf;V^6;ph8W@l5krobAd5 zjt|4{`f@RNFdx6_8;k$EGYwZyt;d<3LR^1yI&Ph-z(a)(W9{k^ym5E|KE3<{-2TIM z;Cz6;4~)dcV@omo+ux)O#qi<7>A!`X`@e&ipDV`Nrjgjz_9&J&;}pO0O=bFsNAAIJOGW7)Ftm^phC8kZMfR?TDB-m?bX z{WH;XY#mNs+>e#37huE7W!QGM88aFtqM|7uHJQoi>EDH?cW%V6j!9VjS_g{iOOdmw z28aK68ml))$Zwg6$Jx`7yE52z=mm)FYjM}IN(`M{j=Z=D;FT3%|$ML#J?0Wd*)gzl^U#sff03hw&Pu_Te%l6cArDnnzymK`p4MW zdJ?r08*yUiZ_w9r0<9I#qjbz<%*a`c=E99=$XkK$kL|$x>iOvJ7(m(RBFrCEh9wi{ zB3hBb@`vZ4rJxaK3wPjfRXgenit(q?E;JQS!k4%I!706iU;Oe6diwUEZPNy<+Zf}? zRZpU}p%!!IRN{##6H#0`9wmjjxOwv?1_uW*Fff3lM~|YjvlFeYt*EQ3!_=u$k&}~y LAwz~By#f9QxyBM} diff --git a/assets/voxygen/voxel/npc/owl/female/leg_l.vox b/assets/voxygen/voxel/npc/owl/female/leg_l.vox deleted file mode 100644 index 442bfa1e25f3d9c4c6e16c12139c67a763ecdde3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmeHHJqyA>3{7%%bLr?*M{yGz)XhqfQmUdLe&FJy;NtA)Is8iS7GSsMD(`DNF;d$O_c0Fo#IcRoT>weYL*CW*Y&-nsoef%&0 diff --git a/assets/voxygen/voxel/npc/owl/female/wing_l.vox b/assets/voxygen/voxel/npc/owl/female/wing_l.vox deleted file mode 100644 index 4a4c90b75725c804eb21ab2e8e1415d526098026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1364 zcmeH{JxW7C6h`lz|My~HRuD_E6D-uqBm@Z|Dhd)4Z0rOZYfCFj1#N87y9)R823|Kg zF{=Zv47w91bdYo{D>(D4jCuHs55VJ%`ksfMtC(@Bq%2Gj{ z^7Z+kFK%-w-EOz^dc884Otx(AVEYFC@f)}r9+uJRL3vsX%IIXjET+eQ{JcMw<>zZz Ue!P_B+e3N2KPtc9gR=esR%cBrvj6}9 diff --git a/assets/voxygen/voxel/npc/owl/male/leg_l.vox b/assets/voxygen/voxel/npc/owl/male/leg_l.vox deleted file mode 100644 index f44665c7a1c435aee646f9dba385cfbf2e986085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmeHHI|{-;5Pfeqb~anuc?d6%fJg``C`b(0+j@8AZQJ^$X?$JR!(6=IOJ8%~fZluh%Y8ZLeE4pj!U+EC diff --git a/assets/voxygen/voxel/npc/owl/male/wing_l.vox b/assets/voxygen/voxel/npc/owl/male/wing_l.vox deleted file mode 100644 index 4716787ed8df1e995eb14958b103ab3573c59e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmeH{J5Iwu5Qb;=Z99!`z#%AUVhN!r0wj=7h{Ped#;$7`?vOiB`X0H5`PMvYigaY8 z&;Rco?|404`{{mn@g^d->&+b^S6<|Cv%g-|6T(3C33ku>%}O!EupG6Bmr)#8DO{XI zA?hfh=D=wd3kI){%qS6p$>PD`Ef{F+C=Db_4O=9j9(AZiTUVrUa}sYzo(Y45s!_{TRbv;D6^&$7u`5Eg zDT=mSs9L+CdX+1RSGkyhDt#ff(8{_hwMP0f*GOO0+Ei65&nnW>*cC78*H6u?wxJ7OE&0(o+;6=L@?kJyjKYMHL2BBcUpKMY1AURTQaJnX58agB4X{ zP!&zEDkK!GUKLuYy@J=qo1$g!{{tDfyFJ{qzfWs$5`SI3%J0XASRWF`AMSnz6LWb` z>*89DgYQx*`S z3IEsT6Rz{4Al|^O6DI!r!VKfH_;q9vlcx&VTkVghXFI#zt6+D%nd-6#j=UdAMbRRf zYJw@r4&dR{WS-ti=GpypZe4Y8>adBa>nrIwl+MMmNGfbPI^1dOXwfm?*+Oyga#pYL zC$}V!l=KzsZnxv|tfu|cMg}JjvEG)&)+3QLjao^{4#!laBi#{AyQhO~ZFTrGM38^7 zfe=d=zV&i1-wt8hQH8E@HLK)K7j-yjI<^n7yMh;s6IfW3%3Qhk)T#+)<(gTRW1(hjoKSluJ$HV@={|sU|6v*?ZlFJQfjJ2#Ua}O+p2yLbRkJuF zn+46iSSmJ=S=U0=+1o5B+>Ej9Jb`%*M9EI-hwhNxJ4ImMU1raFnYoLjnDwd-k$0Ne z1_xVR*KutA7{3Macn3AICUqaLFEF#G;W8W7AK;*Cj28PvY{?(e<{Ts=JeRX=U(;22 z7N==1VN0V)^3BH@R7Z9|DeveT$V|?}(=bBhk`OZeBPj?^qpH+F$y@8F49sOTsFmKt zS}cK~d>__AQD_9u|M^Y6(r0}3`7rHW-PF`?Wn*168_G72k)1(mY65Fx!U+vqjxorO n>FH^vrluGf8KJ+wpXTOfoK7cZvzge~SbTkb@%Hv+<^%W-H{5;T diff --git a/assets/voxygen/voxel/npc/pangolin/male/foot_fl.vox b/assets/voxygen/voxel/npc/pangolin/male/foot_fl.vox deleted file mode 100644 index c3393fc6fbe59d80d9af4710e69821b7b00c77a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmWlYeN5DK9LIkTN3&^D*7~F2%t)z_Lw9!^dLA4cAkPBg9na5tba!wW;_gIPqJoIZ z!=Mwj1!^duPBBn{(m)yuvzco%muOmBI*YVbR=QsO?!CRf?|t|Fe7@UvpM9)p*^9k` zAf!eou2oF9t`daI#N4=fzKbGR!B61@h3uT%#2&?cdee8vqC-g?qAWWFQL+o7${|RS zLzE<^DEirz0=p>5c0oZDlw4Mjgla)hIYmLG^htJ6B|1fw(j&@t$(M<;lKJqni=t8| zDw!;3MOh4!WKk!{QkW!3I!W}otd&GrCkYCoN^u3zPb&$2+I8{fXhHdlPbj+GJ;Xid zK3c+(`1{H={x~th2ECC#y#ov<=JBAWjqABCzE7>>zq|MNsHTSN3sUF~GjKH^j@kZx zE|=SAj5jgp?ch<3n-7xW=r1egYLuCis}0!Qb&L0^THvsDE=E?mg3o+PF{nS7ETj@1;(kL@m6bB#RiZ=^cS#JFAQJ7}Y`rjlc2 zdVcOKrYkA7^&f&MQB}|_#Vt;io zL%loL{eA^|>MT^3M{;yuI2FZ9X!L|pniImqYbiXvmBO?88Qi+o#_1zwW^Syew>}*yuIJA|Ll9eQ{4JNNNl+=t>>}hw>Hk3^J=}inz_prf{&9Iu&06- zOA=UIoW^`*?rBvO2m@`{&z>SEE&|)=1%h@r5S3?PMXnXk#3bR)N_y}7gxh-v+rcB$ zPkoE__(kR=n0d)sqP%$mZFx0IGjmwf)Q7cVGg-CGWS_guvZ5^*S}zcq??NcuMcv39 zGWuo+?Z3<11urvyX%ur_RU_n|VXn@_wzeC%wtP&`qImo@4XjN&!0U@F?5)4TrVWQU z+%`e8^Ae7f4{3D|lNpi6xz?}gsyv6=ydUH8Xp#a8uxV<^2`S@UZ9Q2jSq#;WVOpjq zE7(L~L^@SvE=u2CPi1Hx7PuEd}TVs>_xnVA{J#>N;J7@(=C3Afvg#bO~gHkQD^K>Ypv H@$LWrpX+&c diff --git a/assets/voxygen/voxel/npc/parrot/male/leg_l.vox b/assets/voxygen/voxel/npc/parrot/male/leg_l.vox deleted file mode 100644 index a785b52604d7421cd46cac321c3e9aec8169d42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116 zcmWIZk5HJ#z`)?^=;;Tf7(7@Q7=k^cTzNnoAYcMwW+)vI8RaPf5(ENPAZBD>c*w{E z#Ed}9!1xd-@G!{T$&mqQ1_*e2d;cHBqhWwA4Lo`BWHgN+EhdN}Cdj~m!p9d6E0yL=?!|eqyuFcicG~*ibIEk-U{W@rd4P}TpGzxY;vj4 zrO8le(m9PH)1?ZO->h;P*MWU6H;C$;wwjt6!r?IYqC)e9Rf=?f^1Dt)D%DEbu6UEQ z`6}o+T1R-$M{>+dGTK9O@+8jW+vK?QJm<;76yApM-9p5(8R>r-nRy;r)sxdIJnIv( z{lbo`LRP=s zDHzaU9yef{HBotEJ9$Th;?t^kT&Q0b{yiLj*j zUh#_}c1l?IR7lMUH?OJKEzEd?uMP<7ZwNsZp9%;QeJZbdHClzP8eyt}SRm&Du|)>bZ%IDdrH-lx)Prg~>7wRS5Lqc5^>$;=NoZLHra~CH~BE#ekS9&Jp=M!MVj1Ha0fc zb#jb7Bh&aUF4K8+4Y%9PJpsv5@CTV|!rki+zHemZrzfu8Rqt=g?&7j@FV}Z__}0^g l8p-=}_sIJkYNpB&|1PAq^zk)S`>5`p`yR&W4Ns_%zW{x<8KD3G diff --git a/assets/voxygen/voxel/npc/peacock/female/wing_l.vox b/assets/voxygen/voxel/npc/peacock/female/wing_l.vox deleted file mode 100644 index 19351f5f5001caca73ed233b4d157e5c819fa08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1236 zcmaizZA_b06vxlg7bG%~xdKv@mqJSm%NUeV-nNyoI!bvR%C@=@AuO)o;v@zOAsQ%| z;({U);DZy<5N615BZaW|0SO_?59|i8sk?(jPcvgTTqf|oG1A|=Q-#6&%Mw8 zKKC@$olYAQk(zREt#a~}L8Q^^_w0!T%5(~kDHs(_pYeN#m5*3PS7%JzJ0vA_$(!j=~Or7 z&^jk{-xU%Y%%lV?WcFrL7r=6Vjj zuLc8}tSa$Sx9hd*qAAhWG zSHC%S&;RN#Nlm7$G@s7n#SiHZH|OGXI{CmgNp9X0rGxz>g_5}asc`Q_Vb*TP;c##v zql@awc_h?Bd}ln1<2(QGO|!Z?DJi^V9py;r2yIs`^K^3}>t9$|^d~W*&g<{Iwm5WYkR$z*_y@x}&jx0?q760N}R z=r@G>w|2g-fAz;l*6*wPH<4e=HP=yY9ro~zrxrDo+jF<;eNHt~xk&vXq{Q}cO>uX5 O|LprKjx;=iBYy(y!X}*n diff --git a/assets/voxygen/voxel/npc/peacock/male/leg_l.vox b/assets/voxygen/voxel/npc/peacock/male/leg_l.vox deleted file mode 100644 index 5620562333ea28967515750328d25483e4e6cd0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcma)*Z%mt26o*e?GsI3rSBeyES^2ZJECX6bDX^^wb(9V$L%XeR1PF_(xVR95gEX2^ zGR1|7wJChq#?TOE$Z#Vqaq$Cb2w9exW#VE?3|Xczel^4xzdhb=bICNBp5)2NIrrRi z-`{=j3A7(7jEhKXgSSmN>E0yL=?!|eqyuFcicG~*ibIEk-U{W@rd4P}TpGzxY;vj4 zrO8le(m9PH)1?ZO->h;P*MWU6H;C$;wwjt6!r?IYqC)e9Rf=?f^1Dt)D%DEbu6UEQ z`6}o+T1R-$M{>+dGTK9O@+8jW+vK?QJm<;76yApM-9p5(8R>r-nRy;r)sxdIJnIv( z{lbo`LRP=s zDHzaU9yef{HBotEJ9$Th;?t^kT&Q0b{yiLj*j zUh#_}c1l?IR7lMUH?OJKEzEd?uMP<7ZwNsZp9%;QeJZbdHClzP8eyt}SRm&Du|)>bZ%IDdrH-lx)Prg~>7wRS5Lqc5^>$;=NoZLHra~CH~BE#ekS9&Jp=M!MVj1Ha0fc zb#jb7Bh&aUF4K8+4Y%9PJpsv5@CTV|!rki+zHemZrzfu8Rqt=g?&7j@FV}Z__}0^g l8p-=}_sIJkYNpB&|1PAq^zk)S`>5`p`yR&W4Ns_%zW{x<8KD3G diff --git a/assets/voxygen/voxel/npc/peacock/male/wing_l.vox b/assets/voxygen/voxel/npc/peacock/male/wing_l.vox deleted file mode 100644 index ae4b42a018a6114ce7c3da0eb579cbf1d99030e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1236 zcmaizZA_b06vxlgr$r(YnJXYgffZU>AY)KQdD~XTy74mJhO(`0L7<~DR2G+2DJ5SSMe53Y-d&rH5`)4M3MPfqXMANtN^eT?=EtA~MAK|4$R@hj zMc2ASH~7V1u!~UwV$%F#)Rb*dwxLVHRD77BTNUdTT@Q#+SGL|I23_SCRSlzBGy27( zw5D=2-KLt@G=tHuX}Vq0jegB&3~DAlpqY$82~#@Epr8j&9zRm7dTvQxULFez3p^Ya zO0TVuZ2p7a%x0FBD%q49Wph+j?5FWuA)Rd%%ng(=H{8hF=q229uM_2oVYfGy#Lm4W zyp@D_O-Rd=$iy?qN(@nz!qXK(WQ~w8LTs&t1izJ(&NOmE9^zZgSO+bnO(v3cCzaT6~0sWSz#m~%zP*;O$m2zDc>VZc!hB&!+Q5H^B=fEWLY*Unc#eC&y5fok+!D z2j}bEw3G{d=Y;V$g~j)U+yo0{X(^m>WzgWxq&_VMe@;Au$88Lsu;VStqWV}qzM5iM zUasP`rW*R&n+Q!^W^MTzp^wh8bp2H#A|gmiO4>q}(@O3>I|bQJhWejl<`XO5-%VqE zHJ#2kgwUk$^_Rj=-wGXm2V;FMR&JE=>koCbUX5b#b2GQ@#j#G}zxWqexB0gnmH*@) zeWYiHza?_l|MD+LjHkIUo7SWGkMIvQWa4tU_`p3*X4V9S1HHuc#c}6T;r>g)w8MeZ z>EuFk8z)L+ka~ zbtF@>FO_;%I`5qF(%)FkbnqhWqf_*K7UI3xWi~c8IB;ozL%rive7s2A%{4q84-W+- zT!G)w*MtYRxBstq`NzlZKTz*)EIXg;?!(+Z=;a%46>2EA=59wP+a~k? diff --git a/assets/voxygen/voxel/npc/pig/male/foot_bl.vox b/assets/voxygen/voxel/npc/pig/male/foot_bl.vox deleted file mode 100644 index f32ab20fb3251ea784c0fbe2687224395d1303fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmc(ee@NVQ7{{OQooA92F3)p!F1>E9-JN5lXZ|Q#=k&In%WcjwJxwe&w&QS(BQ}*o zSeK(EHnGDQwA>1jJZGC+QuK$(k}()#*oa`r7$f>C=#Pm0d-Z(Xf3f-RKJe!G@&3G@ z=lOm<-%s2AcK5i5G}njssga+vL|Vg<&{Jlh%c9VfJfUdsh=fyW%~h%}3^^%=^r<^< zD8yo$(cKE`tRdF4SgdKoqOoC}F^sIV7|L6+W<`C&{%kwi!dTj@5+vmhAMw-8<{ohSh;;YHCO%65JaT_MBg4v;ANG zw%b`+YQ|ib!r!fnyr2VTj~n-38NSI{BxFNkPa+qeMV1}pH4BBk!lqGS+hrjqCOn-K z@-=p(h05k!ntJnyoXY2uh39BY2rVh$y*Z)(mTFsE6h}RjCj3-of)vH=ct%|Kr%EWl zww1yzq4bp29vA8s1$k5Z59A=JXOMY2XSQx&`lSMHzg7fI&!hLkg5p=j?}}8PF!!0T zG%Z}eqH$2T7!tleD6Ae4A{zI#38RNJe?n;R3EefqiAG^U^DUJwq9G3hEndbCSCDwC zn(?CzEPeboe@sOw+w7pOqJ+J#dpX=zO{_^sz9US2AS|90s)}8N{iSqOZ71GXOPk+8 zw6chi-CM|XzewajJ+YpBB#w77Ja~kG_alrB#mG#bX65R6a&vRpn7;wH+fBL8L)G>d zc%{NesIHv-yJ{KzXcKc6Jp6Xu&+5%GzR;eTDdEPC!u?-_fvA^>WPs&M4g7VdmH2QT zBj4D$a?8moC6E341AzdkjtCQ-U0mpS7iZGRwXcNRokH5{#pmL$(}Xr~}v zz{0r)cR1+Mf2X*Zkb4_DULE7m@M$)77jpC4Ei6QwjOm&E|NPB;Z|s?;qxA;yqtJhD zn&j6RKApeH=Rd9R^6@k5_;8ZFUoO&md4*sw$e;ZnIST&4x+2{D;lX?i4XyF_`Zxc1H-Wli!?oS9#bTPwW2Uj73;nmS|v diff --git a/assets/voxygen/voxel/npc/pig/male/foot_fl.vox b/assets/voxygen/voxel/npc/pig/male/foot_fl.vox deleted file mode 100644 index e96706c733827228c74acf48ef16392e8c613a7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 zcmc(ee@NVA9LGQ3?`cR@xOtwtbLn++?d}{aJ@ZG|I@8;BF1I<$^fa;9n8)E7M{FvG zur5bSY+{Eq*m7%#Z0Fo2H!1qVWXKqdF>FK-GDbvy1^p4xf3H4Y_g^&s?E`N@wzw#cdMHi!smcT?irevwy6{hzP=0$Gg8sT`OFsXV=rHg3D!(fY-iNh5n-l=Ayw}GWk-{rUIC}mq5)K!$Q_YE(H+p38* z3CZ__sgH!kGeT9di?F|xuBsix8*6FvJBU^mF}iyzneLZ}9H=MOvya5FPDX}~F!*7F zvEdk*nNzIXI!|tHE}QZ<;C8zy_j#z=@glEQ_z2aNvwv4DW1nnh?t+J(?)X`~SH?MA zGczsR{Z9Dh2VpSkWilCH`Dz1y{M<@>B#+U{c5d8vvP#MS{{4YKfK*3>$<8h=^t_KV z>E!m;!h=pB?e*gG`REJm;zV^5XAZPe5HDci?Bjnp|Zb7v?Mvuir2K0RE*i AWdHyG diff --git a/assets/voxygen/voxel/npc/porcupine/male/foot_bl.vox b/assets/voxygen/voxel/npc/porcupine/male/foot_bl.vox deleted file mode 100644 index bcc79d927536bf6b31b0af8d015df9cb7185b2d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmeH_-)q}d6u{5D-*3LD=)>r+voU2QmexAQu$isZcG)^N7s5=jTWQm^6Kk4v8g-+> zcUUVjN6@V*MQSsII!CE92xIKUUk@_&FepA15&9rXeP|~_6G14*$MY?$i25gZ;ln-m zoO^!W+nesIpB9nB`;t%VCPzXdJ;}_0dxC>5SMij)l)nByTosw`OgqVy#^> zPH0VxyKKc>wbos;CR{N#tTx5C6=TAxGb`2!SHybD#=0xkgv!?S6pi7iZ0xGB&Wd&2 zRk5M6v1Z+fR}rImLIJ7^d?a++I&Rsj-C9S_p2k;SSL3S91ir>AiwS8?uWTH5#aOGk zHJ8?G9F65_JyzC@)?|#Mc~y2~-73box2@`|t79!s9#crb}xp3`F3xI(&4B(pV=G6Sch1UCsHy`^XKp zlAP|Oal8q^MQ#Z)XOTi3^6XZmHN>&JaAskIBR4euqHt7i7Oo59SDI=2F$G@?bM0E1 zKN!(&8{rpW;d9~gW#PgV&HID!JCDMRlkjsle5(!pHVCr`c&mlipF7L>L+|tDu5Y*` zzfvrsEGR`~gknpMn|o&9)vr01Q2mx7ezwSk6KX&3Ci#3GEsNk8WF79+`dCno1`3yk zh6a{jge~SGGI5qY7u!fBl&%i;x3^Fz6xjRrb)G-g&-m$=7$19uSX~VdJrE^Qvz37X zpLE(Mk??75_Nk5NyEsGSayh1^rYMz4%+Ag-IXQ{%`((3OlF20Tc$`QiLMA@Kxq;W1 zIq@!6&&;v(;dd-8EwQ+`xZ&H;(LpAYVRUqq`T2SM68Z-JvpIuz^1YnuJIEWu=}q0= z=M&8G&iU%6pKQu^bls2KPw(zJQafw^Wee_f?ufE~*LEIj`fqzr=gy745RFEOZma%h G4EYO&X&C7M diff --git a/assets/voxygen/voxel/npc/porcupine/male/foot_fl.vox b/assets/voxygen/voxel/npc/porcupine/male/foot_fl.vox deleted file mode 100644 index 4c6da457e0868cacfae9bbd3d5f3b21f18a1733d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcmeH_-D^~55XR>{=jh z7$ah3X*ITl60;(tDk173h@+LnkuQSaF*g|VExv3vz%`3uHY z@AwN!cx!A^Fk#rJ?vGbPdShl0^>DsSe zq4k!f(Ag|K&zA2R*XhjD_MlXtLKv&7V;~fwv#5x7wY5B^8qa5_S&%YPyHH`J^g<*Ujr9KVbBW2{w~?Oy3^*t8u&t8;8nNg3MA*Zjfo zo-m2xV*Y9sdSgOoSZE0e-!7d)qt2FT55NH>oZC;Xw}Jlt681I~ak66}sg4?=Lk(2) zRU$aZLqSF@BvXp)n2*%>*p?O!jd%0oebt{3wrXYOhR}DpirRl-aI=f+*W{7hf(K0>9%Ecr4>pm;v*?Jn`SOC;h_ zRpn9=(08#rNu^Q@4i1vb*{II`v y>B7wVL#%1VB3f3K5?faCNzSWjSQ=#g^2K~p`T2Zv!?NkW5DW$hE-3o1hP(&=dIs76 diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox b/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox deleted file mode 100644 index 3003b6bda13f49b6a15e2edb521b7bd40920fd16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmeH_%}Z2a6voec?;Tqd7)CY@SR$m3BLt3VmiZBV4PqmjGLET{jMG#@iwdq}f`|=K zR!Eo=goTKi1QBlfT1d1Aq?Lr=B8u8Xv|;e7w(j-gEAIJEO6pNfBvj ziX2lXtBy!}Bz|a~Xl&c% zVmU!0zMxndYi`sVV+W0KLSpQYC|`vt#Oq!6zL40;H$LrCo~W+zX`e4-Y$qtT=8o1K z)m5G`IeM?c&M7yJ_NuNC?|vy0ouTc>fhN(NJbPOxP$JCL)-qmPOmAKue`;#@Kqa1? z7d?M0JWLl6E!qKH!aK2{wH@?qTdzyzn}(kt@c^o;W+^M}$H{S#oMswTrq83kgu{JM zyl;VnDk+mKRB(%>t5wAF^SKifE;b9jVWG2F*c;l&0i7+=9bl-<&&8H}Vim&hZ~}*Ca{cIS zUhI0!L-|fNi(*-kRSb}=O!BsV3NF23tU>FWv$%;YH%{yMp%K#QG&&aEGsth)s`Ig| z=Mn1cNRG0eu&{mt-=@#KZ&(3kyt7PcuF~j_bN45{dQxa5zjL5Fj2NV66Kx tQ>Sn8ba0lnyYE?BTVrKqWxcnqu8w#-PAZjRZf;J034MeA_*cGx`~{F_%P0T< diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_fl.vox b/assets/voxygen/voxel/npc/quokka/male/foot_fl.vox deleted file mode 100644 index f31a66b8da682667075a113263baa9df86de9e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1204 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 oO;LlDO@3!g#Z8m diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox deleted file mode 100644 index fece0a7a90c11c5b01fdeee83a8fc46f0a770238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmeH_-D_M$7{=e3IcHbUi;`lri@^{>YE%%inh;H!Hd^fx>PBlzvT0JWZnmlJhb6)( z#(>naNE?+PF%L=T!^AKB3=oCAU~gz|3Yx!$9d}a8M=&p345ecR24lzDaDjaqSG@cjEeB#X|PIzyLOL3O? z9h7&HNaM^nB*+vLi#gSqWgo~w#m5-GRbr(fK z_0)q?9j7|ZlygBn2i29oyqp&y+b|b3OkO50QxB%InY>KBn$I*Wy#wdfyVn`K^g;Si zf8p7YgFBb3`@Gd*&||C*4zk$Q#dKR6{|pT9J$7J`WvZXT@;-Xz_hLlY zZNt_)*6hGu+Ku(coTwV-HfMP8ru?^zV^TJ681vV98TfG&zBtA8>qY)zMyKt8UyaSr zjH_3TOV?EQ2jfp3hnr{M=P~$J2l`_QR)^u8KHhryJQojtz?YAH!xj6TRtvEyT4IJ) zUxi!ySKy7WxiGB!t`54%83c)&(@fqYtYrv&O;B}N3MN0lamR>V#4rnLT_)v zo}At#OjD^;SXx?QV`GEW)m0W37fF(Ya=A>QP#~Yrlgs5O>U~!qEsp|J3Gtz`nrAzy}|$dSMI?616v=|r5s5ddoxMN0R zV@%u_OT9yLXIxd|MjSCQPOUq8EX%E2N8HlfTJI}YR7bQgPStY7jB)iC%cVR;#_PPL zeM?-b;a0vYcJ6d##rm?k+j6czfiPEE%81uXYgQJ2N=kT75gAi)cp^+k^9bhcghpXS z98gmW+S}G@llZ3LCkQ`=;)Ap7+1-xQZ6od~%2lQg@qu$=+M&^z*iyt zRG66&hUfLWAB3MAf~9WwTmx_PKtEbw$`7}TxOs7qp)(J7ao{!6@||Q7MOu+mbdW5H zuzYL+uD{}rU+bHb*x@9@o!UQni)b{8u0`e=b3M{XWK?l<8at_p%eaXBjD4k9d3K|tj) z2oYPT#5o7lDRwZC(zrCIW;6fLOwqKqbQWo=EOmYQ(X)N_{GRV~d7r)S-k&Ko`>h^H zl9E@%rwAuyY9%QnJ~w9GTp&z@l8fLaL3U1Vyr(P5^TQRhukOB!R54D;iOwN>)YDT2--wEY7N|vC4BfNn=%HtyR&A8qHjd zlU1Xco1qnXt>|~ME802T*{Ts~_C{d*yp+3ryhesVn?p8)IEiD1Y`0 zGa8@AgW3+R=9;;cT*<$8@9}YMEmvPnqCZg2Ww#h+hlV&`T0&E71S36NJgT+uVL}W; z#f4msG;nmeo*UESbi_rnIVyw;;d+dQAP%ft#*^-yj7BeItht^ib)_^X>3Oi^b#7!D z8C{)3V_XmeYhw92Q%_Z#KTq=)Qx^FSeQ8UXE{ftrK`76A%v8mP;MkPKt+q`(Uh^iu z)+BJLCWBA&gE2+;@nff%_S{e&4>fV9G?9t-Mc;uEx@#*LC=TN1?n3G_e7MkNeVUd#;oaMTh4DMj}2Nkr`8>uc0 z=g8h*DhfSmstKeh$A^bkl6ZPEiRbszxp}37)noMo>}aOIJ@CJ6nAj zacpJn+7J>`yvZx_BRPE;EuH0bI1=eRzLC*OhgesZ&9);EG)BTM#4}!gZ9elC zMxuMe7b*V)&K@aj>$rw_%O`j(h{e^vk(AW^yuHB4o`xwluIuAq$0V)g=O|11h<3{; z8DV*xYX64b%2QYj`v_gUf&}-~l=#_1oB3SIzp;^FIy!DuuR9UYCkyF0F~uFPEk{{b3aqCfxu diff --git a/assets/voxygen/voxel/npc/raptor_sand/male/hand_l.vox b/assets/voxygen/voxel/npc/raptor_sand/male/hand_l.vox deleted file mode 100644 index 154aee760177b9064d36a5bcfb3acce67a0cc73e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1672 zcmW;MYfKbZ6bJCxJC8fFyMU(Yhla+qprl0?%_^XXf-A~X1#x++2nsF2s)$)cNJRw^ zl}E6M*c91a5KyDg#fsZ1uR_$?SU+g3qSZF3#@1@n)>cjbJ@zKQocli~Gk21i-INt+ z?=%a7uxwH6aw11%piiD)D(JtH=X(S}w7(Y%Eb?jww7-a4wf5lLXZ zqK@@SIyT6u3XC$57#mawCxXa&bs`%Si9{5_MdlGCHmD;aktF6(2q%I}eVKVgA`wMq zeVnL7r!WsA5|I_wrx32NF_o&0(~O8j;;c_53TI=Ss!CN*Suay*uChLf$SNCC2q&t_ zoH~u3MWdO<#$=*sY@BP%scNj9>FGK>&Ga68;+RG_7spgCj%!?WDJo@E99LD*p%GaV>3r&G)YC+lrcqB% zJ-tZhitVaibjk+G2FeD?2FgatM#@IIpBGgx>U)V@+*|C_OOi(~OLVR@rdK4F#wDko zXsYDWtCB<0D9bX<x$Lhh+`8mSMx~WkvY+-hF&pR)%Yn63`YLhAX~H@T9vN7xVK_9UXz* z<|aHYv*Y8qCFsu0#+675PRtL(%~1~;Vj{71@m!2A41?7Yf+I`k;n|_x=#QF%ftm_D zE6+zwLKq&-dJ{KSS<$~b0aY;}aIT5Q*Q>%%9An1wteGf?d=IUOb1<5-7^l~U<7KlA z#j$hY-ja&jbzAUs&D;33G!B!K+Fgxf`SBR~kghwDheKsW zaOQ^K=R?`3NS=Z5szkJ`4aEJBV&JWOA8inTEAl$2(g~fAx z@yoedlv=0bj6DR+#j$vBXgpG+Y*3@4ihf5%*H<#m*CF1?Kt0P#>2DGcs^`FMd4C>f2k8MZtTOY6BhjSl@%CO z@tbEVE}vS9gC&7*ckII6j|#D`!itjog>W1QMPc?-RF?)LCw&GUT}{CATM2miAPKjw zHsDmd1ryijqvKc-E(}MYu)u_-=0xnSHKEtN9qZQ3Mf~zWWab26S<*c0YutzicRU(T zZASm)V_091h8>OwR1f7LE`0$k*(M~}7NODIgq`)}@U2{k)h8H-LiO z#V{4cV=2AUsZBOicOHhYuMl0WDQG#c5@(zR7;#5SeMk ztc(sxWOVHmX=FQ6dd6V%)Lk-Q)ief8gyyn69F{Yqcr%fa(#Y-vMj#SUyPFTsZV4M-mjD0& diff --git a/assets/voxygen/voxel/npc/raptor_sand/male/leg_l.vox b/assets/voxygen/voxel/npc/raptor_sand/male/leg_l.vox deleted file mode 100644 index 3c18d354d2a9204f63d1317ff5ad44224bf1fd89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1628 zcmXYxeN5G56vv;p-_Vs=4r z#hgMTICpT)?NV@u5ZuWHw=?pUncQ%K5_!o~=t1ofa=MH=~xtkfvhDAt5c z=qR5_2PY(#cEP2MbLnJUI+T#qgET>(lh1^t9?~hLq&X;$EF-HF)hg)}1Si-`tWh1o zHAy`vpDF60Y?3RQLpeEDc1BhS(uATO%ErkuLP)CshmtIhf<^|MLnpNd`4Dk zbe2Z(jMWiLb8FJFo$-8(Q6y#%Ap^>|WOismE( z9xQ$hH&&W3vMLFUae;8Gj>T6i4XBFK<7xgPltsLQ-n1o{EQ-SMf)G5nno$)W4A;gi z+-lp1$E)AOFEt6cRFi>E@`I2W?uQ>b&1laJ!Q;Uu94t-5`1@41zXaX2m2eaX;-~IH z)MxnMLSq_w3cPXe&=xf2>G7g3891{O4|jXxq2oOa*F?iw?1#IJixIWN9Y3FLMU818 zPFMnAt%}F}?q#^J%@+sEo-msh;gM@2Zj82Jdx-(3+D!PY&w^bg{upod0*2l3O^+9* z`h9V+#~**6i^1*FTX3dRj|Zn>@pQt7`ikZF?&2XlyWWDEM~wLMOA|0T8^4at$E9Nh z*jw!lSO0eG`k(?W^(Iu8hQYok2o;6%(Nq(Fq8uMQypn{cHA*3Y5mVQe zq5ohy&Q64*qRbav)->#B^~JDj3)ZX&Mq-LL@{0VBoW2w-o#p6oC8G1#28>)fh_z+e z*lG_)(|8FIazbG&^hLTk5}mFtY-_KBdqWsj9c@5hW(Yj$(=qVvD9UzJ!M8FI%W0?c zyUb`hv=6MM0t3C7=-IOZCmdxMcdZ8->VV$I69L|y@Lk{zuU(CZ$TMMaZYF9bCJ|I# ziT*o3!eZ@3$$lG-UcU>r`#$Ex8S!%F8aneZ{7b8`AR`C!ng@_su?bmqt;jxk8w(3I z!_fXI{PN9UMLSVHdI#wPQ($<8mtLKVxeFpN`wd^P{NtGAnS!ky*I?f4gx9=Sxak{_ zlDZFX&og0n!+C62+lvDo6KE|zi?XDT&~6z)Mra;RwttPD%9F4d_abCbBoaJUp+sMY z9G_yW_isQ}QWjhdV+dauh%E1LtPV{>Rk0aG@2*6pUmnKwZ5W8JMW$a6z7J_dVNe)e zJo}A)rO)yC7iZAf(}$Y+t=Ldkjdi8#kdc#t)YLevhzdneNH7d~FHBEQV`^#&V`F0& e8X7`#b2BU!3rr>xqNAhX;o$){H#f}u1N;loz{p7e diff --git a/assets/voxygen/voxel/npc/raptor_snow/male/foot_l.vox b/assets/voxygen/voxel/npc/raptor_snow/male/foot_l.vox deleted file mode 100644 index 818ada113428215b504649c6d5da5ea72bb0ec25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmW-gdrXye7{}k+;Xv6OYyCxYg~$p89Vj4jJ%HSA!r`vm6pG7H5j%*mLI9FMbU{G&0gbR(KP!E zoyhA%zk^ND*>$}|6J8UuRH4bTgXq)SR7Ed#)LRu*FLrPgHL^uf9mOt=Hd%GFD4L_l zIf>a$;@M6XS)k~gENh|+Vd8uIZwR~FJIMXAeYCEKB3YcK0(Blf#3W zcD~IvaVMdIfA8Jrqna9qR~FE_B7mzdk<6Yr!KIR78lyrO=-_bnRj&VmZT2bv&spp(#Fq2g_dLR+^Eawed7W z`*M6;6kn$WP#Nvb)7+($hQ7t2Ik*3CR#_d35-$8x1Q zl}~g1NDuMi#|{&1*?~Mh(a4dKI7Z(UeFux_s;S_3kuN`YI=8iJj2jl2Cy@{bKM_6B)$@XI*G>#S%n-zp1-;)$m7#)M1>}adS zr9POor|R)d55%=D1>1MSldeqE32Sy`X|iYhbTUHlv6kFA?=-EUbKN%(hI~) zD?TMvEK1E{L6eR2@-1Z4wvc)DE{pTF643S;Ub!Zu!rjyjPm^MsLgE=OzdE1!i$W2X z0x9&Lh+h{D;sfyAT(yt%;0-uiJitv|%!_Ay$@E>ar*A#LU%QiF0h z+x87T6=yLU_7k`?j9AyT6noc_wWNrRKJ{e8XE0blLdarYGCV?97nDq8k%_{$)2Q&u zVbr@7TTBhH@9(FnsR^^$jL~Q$A|e7;S67^!o$c=`{RjTgr|bX# diff --git a/assets/voxygen/voxel/npc/raptor_snow/male/hand_l.vox b/assets/voxygen/voxel/npc/raptor_snow/male/hand_l.vox deleted file mode 100644 index e8550e60bea21a20e8f02f026ac13043910d2909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1616 zcmW-gc}!GS6viKKe>1~ONz;Uc#(g3A}ULu zBWhEe1w_4Y}RBKC>w6#^!ugBixmvg@F%f0WsymvEFv)-^V z43iugpF)K(hzw(j&xz5z6tr~2D}+L1W#`0eSZZkPA`~q%A?cV2Me9b@ZGvN158jRS zU|6bzM7VLRhrqEqiC}r^dFlyHV0D7P@**J-jL3R$BCF#?mKO+7WIZK9rru4WOk#PS z5G2-9BqTy6Seed}DU(@Gfe;BvX0@`+I$4D>g))UQLR46-q_9p|VeOoXd=>eGs3KoQ zzKV76YVrtCO`e){3L5G))N5F~qGkIf9or}KoK6-vULhorqZv6*g%Bl<<{~X|T1Dbq zf=nJE$sEnYITS)r$Ri|$JcV;93VAB>R2yDw%gE3TZ*0Ot7m(!J$ZkLnR4LwIonZRS-Qj zg6LFcKvNv_1d_wM84+FFdP zEJV)=J+6AiVD7{TTq-R=Q*1Z}ZJl^jYsH5NF|bCNa5ch+ldJT&H93m*xCm^G3c*yE z9%f?@4zFH`CtbTS9K9SP&GmRvSBmB&JsvE34Y$^sF}yAbjd4M6u8+mnYxSs#3&7L7 zr6`Md8%NTXW3ng;XYvhrZnK~&J_JKsGI6JM3m&h39lzBi;7W}NpXLQ4BitW9c39As zW5DARO*mGXh_Ux*-{BH;)mFk;9E6{{3Q%uaf~m$dbm#lxe&2R9<_6$JPcm>}4<7FK z#Y5-27_5ngt=J#;8kZqzxfgyt-+~(RVtir^f~_hZvt6q&wbKtrEel~WFU6ywEx0w( zid`jooNG1X^BybqmIPv~#RnMl!u4(+O!xZXa(5v9xfFxD=eOfRM*tq2i^bD%BkC(w zSH37vak3d>pLy#Zd1q?ERnu`|8c8E)9d@Krku_7NMzT z1&Xql;Ni6-JiVQS=d9{x^j*2orblTFeyTuQKL)%eU7=pwU zU*s0~BRPE~_H~q_eJBwfr#EBx$}wyx%fb#vIGV;vkdPe;V}T#iEs^LL>cq~rI(RjN zVcn?)1Z5cDU7wEr??zCzy9$1liC9hFbWx`TO?`*J?5n`_sVV$2GlTj0dCbnvf*EK> zb>1dy%C5%y#dYx6+lYuzdtmm@LKA0%dqyFh zc^rYI)p*O4jRnp9$f($g%(@n2oxO|2`P-mx`waeh7BEG7P(Lz*^!{lucn0;WI_Tbt z0Nn~Od1oLkOu>%!8?bD1!Dm4%JOUb#l6nYlE-+(%!vr>OID(_?<7g?rh_a-Q&}JQm zDKr;n+rB|})6>%!9UaBMzyO+?n_;zDVK$o)9UTpCZ*O>bc)Wa9=0A%1 Brzrpc diff --git a/assets/voxygen/voxel/npc/raptor_snow/male/leg_l.vox b/assets/voxygen/voxel/npc/raptor_snow/male/leg_l.vox deleted file mode 100644 index 0d9512347ecd03936aa76a715545915d5dd0e5da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1628 zcmXYweN2^g6vuyW&$TU^W38=?<_eV+3OZ20E3X%j_cyPXcjZl?c)2QK7ZH}IAfWOx z@QT{P`+_3s47->}X&{ZM+0s8WQ!uG5%_3!$rLJ#>*0X(f&iUSRe&=`Yd7iZ7j5n=} zvBdD$Br+^U$CxoTD{A&kK#xYu`k#!eZ?Lxcg6<@!hj1z>98wCWkd!BdjS)%->Or-NH1Zi)sZp#^tO=XY zQ9hFnPDn28f=e6c(#g1VC?Tl_X@Y(yp9x7lq*F>sb5I^xMph}RRnjR4POzC+qdJ0X zl6p`+Q`AG*Bv&+ta&oThjI0u*2}M1Wjgw`Bl8XLg(j;k8Ihj-rrASkXdQdI-jI7k? zEREtBt0S1^oJ?LnhGXf%gLbC5;|f(wm$Xw*ZaeP}j8aH-K88l6u$1Xmi}o!~k; zL+6k}N3}Y-pN?wCm*h(w?OkVE6>SJ->c3Znfu6hFF5EBOi->Z8 zhqVs_vDtV~-G*O^3%zzUs^td%TgtnM4Y>o)TSco1bgFgk2;l@Xuh1RyQc2S2o%(V7*6$HyCRq&ObK?@`^sB6L=l!%^supE~nU zYg~k}`V@5Kdg1=jt*FoT#f$Dl;QTH;+~b9Zj(5>t6$xvh5AM}3LBvvb{Bo`tRi=gb z*y0asMJy&eS72Dd2 zc;j-HAO5}=g}djr;(WU=9-NKF(-8w|%U0sM%SZ9-W)p6oFyPNGO~B|&_-$xDuAIun zzDh5+dUjy<2W4ogHKDRN1opiFD9f9VhN@*K$XtYn*Anpbb^@MHrsDRsHk`5T)!-m!i!TkM>g=F>vJw)|F&n zn>`c_!$pY842B`k8>!}Sw7WX6y|o7Jbs<=DvJU=fLGY+eMenzRDA`#7@A7!8q@B+1 zFr(q<0kEbrTpt_5&l3}vo}R|!X4q04p-d}LKpfY-76GpgHupZXhy+1t5NQgjbYyw^u|^r%_jig2Q?!vAOtU- zP19HU9G`!29_?M-sH)wDjWv~6U%Vd1Oe2z$W3VbB7y&_n(EEB~YHAAO diff --git a/assets/voxygen/voxel/npc/raptor_wood/male/foot_l.vox b/assets/voxygen/voxel/npc/raptor_wood/male/foot_l.vox deleted file mode 100644 index 9713b375289325c4c8b5239c709f7d6a5bd5f8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmW-hdrXye7{}k+fkSHMT7NW}85t`ObO!`Iay@|DMTEm$K~N|zCq>*rge58ns9Xji zY6~y%o&)9#JD5mm0?nz}%(cuEO>0YMk+#ZG*QXyn+h^bB`F)?~_rAZqdw&@zS#!E2 zNlK24UnWFKH%L-id``^tsX~M(B@e+ff~@SE__?x3M8pYHMRF?7-nDmyhzb}9l%lf}GPGl*JJ z#uQm`sEQ)`68h;himVA= z6Ys8xeuJnDx-1(+zd`tJPDLQgZn~lfWOt{kxC_r+JWr_VF6NB7sv5<4jSg8g>WXF* z>mK6F9wPV9dRS2O@6ty0~4oi`In+{5^JwKODoX2@2uQ?g574bGcj7 z&gC2%*OM#w_ttIRuc_hkb4m0rG;`52hRObZ&Xg3>7#q%DcPIC2?7W*0Lw`{L7b7ej zSz_ku_z3NB5p0NB#JMmtR!b0jmoDaE*EWWt0~v0r<6&(HO-W|%E_i{f=~jkTCeaWV z#Nk!3e3@>hGS0-Ky!n(yyw1Mmfs7YMaV$TCC*3wG;}_vtpUL&s^*mVh62Dd_aG^Sl zkMn}b2>0j54jXMbAw1}BKkhulJcl2aGc+)+lmE0K<)>lnIlfHkFAY(5lDovO}>H_>pRhq{G$8mbO|v z>%&<2VLd?^A$ZlL;{0xy(ruOaRV1=heABs|HX8LkNX_NUC=cV=sw`&K#tJP%8feGU zpy!RmW=e{98Kgsks3o|lSi#;6# zlvMFrS~jzroMe=5AhWiGtm8NE&EJT*?Gya-Y)FOMsT;mYs&fMW{##6YekLR2;`{*-gm&ND{nOQf#UvdtMQ52h@|9l!>c;gmB*=GJV2X6}p_tA{&Koq*LLa z%UM$^&iEQK{Db)+q=kauFrGgCUHqj_`0VpjboBI6UALKawNJMfz2_RUi`K zSjHp}i7*^vW!-{~dL8vT)~Wchy^?|LQFzXv2prwZ`4o}!N)q)F=T#)mBg&jlk~yy|b1sDl z3g;6QdX2(O$O`9C6v|Y}RF3ZCoU+Qf1uaMS(X6FeOS6t<9nCsAPft}(xt{Bl{J0*K z=Y6WcdlixQsv_@EB;KtOMdm%K%)1nYWN-jU57i7w0nq`k4S&?9g)A0ZQv^1b~ zt7{N`%?JMez;67&`3<4UXr#}}G$V{8PiiLuzcI1=O0X4oty z99p^nj}Pp`Q2aa$H`d~DO)(l%%(y@IW!zY4!_ev!)F+zYUXy^YR+>?fXvC9Mb5Iid zCJv{~!&t#$oLn1)XB~D_Bt>FyQx|jS8M857pN7u0!MNMA74>;WJnu>c&hEm4y}@|k zej5W-@#rWF!=3uMSUfKPznp18l`RAxJ51=PNW#4X3o*Vu6i4iDz;2s^hl87NW4IYR zip)6OY{O?=4(u)p$AzXKU?2eBbOvFvI~12X!|~7gCAf8FE6%nVasPAzo?Nt`wrnZ9 zmwNE@yFHjVZoyw)+JG?`zm3eq&8m@g2D9fLThN}4} z$eE1?S5xq0A_dRxrDNi1D^55qn7qCa-AB`L?qUqeNb)uvKaYznajUr12S?l zV6`S<#o|SXh>C>S7=)>*DNIgIVq|0l{r&xDY;1(X;egF%LwtNZ0s{l#@9&QnPk{db DC)~!C diff --git a/assets/voxygen/voxel/npc/raptor_wood/male/leg_l.vox b/assets/voxygen/voxel/npc/raptor_wood/male/leg_l.vox deleted file mode 100644 index ec13fd8ec75e48e415afd480f444c1b8b5b506d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1628 zcmXYx3ry8@6vuzB|IJO!SZk}%%t%>*pt~U8mFETI{Sq&41wo;B+!S#a5tgVRpz;`W zMQ!1IfPgu}E+$eMNMmX?b1gGP)7sKmq^+{l_3hC5Z=aoWzW1Ep`JH?I_hzJIEwD1i zk|N@g$*@=*W9e}@(Q{@3dNksh|H;bEiF;AZsEjobLNEsx%q}H!2+5pWGMiM)E(ore zQ)mR|4$iq<3hoesJGtO?M!u5VCM9VECz#}RrMOcn(iEq9(q>|fVuEYjE_B=`n6Ps~ za^Vo1e6oxSn-an%g|G`D=uU!q2&a<5A*FB%NqJJ(7@?G)9#pGHBcG9#8pRsLny?8S z?C7puc1e=L9sw222 zsR!jVMLm>Faz%3}C+Et}$SOgaP}D=&I9Wz0spvZI)Z6VPDrlN9yHp6MssL12Wf;LxX`GFMm;pzhh`H5mm1BX(fO1^aHY}R39h3v zbPg$WRI8)=>8OT$Nxsz4-gUNBF~$g{{(D6j=(*A3!tJuXXk8YMzs_C4??* zSO+m2my5eK?YNv{#`UBM{B!Fz-mj^_<>wO7v&?{t?$MYY7{J+*Vl>8tVaVEv`!yE4 z8y}5Y7>UnB%&cU0FJdW_+qsIm9cs}%3Ffc@YiuL)gKdukvN_oj3-tzD&vCS+LVdw zt()**?aTP3Ivy9Q)A3PWATq*y@k56hZ8^bsFwls@B?%aNi|P&(qpPL@j-mkk)K!4G z^u?HLNJV$P7jE}$MMJJ0PkWMp)4OnQj~DJa-o#LK6s$$QxYe)}k^b)Z`BV$4P2Tv> z5&&yu9PV_jz~pux95TNKvuO$LyEftKNGo;}8*sAKgim@b*j?<0u@+BY$Q@sGdt$2B z2j{!}@b}qh+&Hxrr#tkxdol)(#*L^eUy1L|_u=t3&A4{dh(A9!0TZ+E>*zvUIF^rn zRbFuQ?!fMM%F$eBLRCp9?0W-IUa%02)yq(ry%_f{CF0SwL_E2ZhHIDFam;4K)Rh(J zJ)DL!<6$T-^+BgK6+2seFyz{bb?btVknDxrLSH1MEk|=l8QNV5=s30!!xs)?eQ6f9 z*~8E{R*d-U5Eu)5kYK*Er8_I(Q;~p`w9|#1 zW;FKg2Wu|J-11O7Ta|@*wJ~JNzy{mluJ^_QgCAZo=;67$0pYnOEX~P4_4ot=%PP=& z^G8^$2T^>$hWg2`;n#Nxb7GB{o3W10JOaOxDlAIR#{8y!WR!14W^D_yPTYWZ{uUV8 zK8A0e8LV&@>PBuNt$zx>1Gg~y`FWVPC>*n1@&U^`j@kZZY-_&)^A;yO=f}WJ-+<(l z{djf0347|#VdMIPIMhClma;P_O?(e+mSLoaXDh430M6n!n^~J=@o{xA*rY=GNbT~)u`~z#hAVo{c$zO@D0TG!7V5V48_yO zztOMs2|oSoG&;I_P+hkT8*8hup=1Nnv(u515{p%lAqWf(fFH@qO-*5RbQFVw dgJ^1Mg2iHi$z(!QR1`csJmBW$hM9kWe*wxU#M=M> diff --git a/assets/voxygen/voxel/npc/rat/male/foot_bl.vox b/assets/voxygen/voxel/npc/rat/male/foot_bl.vox deleted file mode 100644 index afb9f7180119b7ab6c324a292d767c2e416e3419..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmaizZA_JQ6u{5(TqrhPRt+RCbT7e8yjKNziHpDlEaKi&6p5Q$k+p>=@bI$*N-k#_0 z+jlUjTSWF2d&^YG?J$uFufHTJWT;q_aOE-OV3pt7uR0{DieZM?4U5HQSWKH5Hp5hH zns&nsSKDGUO^Zz=NoV9q4^|Di>4W-Y!g$pp;|FR z`SgydHB8NASQH~%?`vMoCu{k`G_JPxbf9!svFI!z$<58BrKN@Ymjut%Z%K*$hreTE znV8s1NT#Nyn4X?yc6OHe`FWO>mRMO?VRdzNE#BVVPG@H)y}i8*3=A+lJj}?*2*F^G zv9U3<1Q8JtL`O%{*w{!>UM`-(Joc9sQdQbTz2#E%y) z@Zj=g;;RM6Tf)|Ep-Q<2D?#OJ#3dn zeyMhmFi;}gI3V0RD)`kt;}be+)qh%e-X^&1Lf*5&N9r%nwo+e`Omq2Wx{qYiQt77q z*b7XYdzA-+^=wJmKtZOR-G!Su;&apRve0%|dukHKKM-dT&ZSa_&AY~kt8K0t&!nO zCMRtZd6`Z+-cICNe=>J(y0|yJg)3S!Feu#mO8EUJq0AvvrV78I43K}mm5ps1`R)_p&LQ1@N(xS=lVd5T+2a{S+M0_6u z|3IRYrxk~?T`5pJN~Llbq8q^445{ZJy9bH~p)3H0CgE()5N)3Zcz<*f>*MXLBfP-T_3Np(mzD25s4Ff10kVKMD$*bP&) zX*x8bw#9Cm7Q2Y)FjN~xn8qv{4D}llvh}=#2%R<5Z|HqP^GT`}O*Kr}CZ=jbwPJ?y z>79cmyNXsD()u|$IkdF2@bHr0x%v&s)_?fhY9$!lM@S|oCz+a>VrFKBxw$zO7Z+Jx zUS?%wWi{U3-cDy{C%wJB^!N8OG&IEU@GzsJql}G>p(Tijh#)#Tnudl33UhPt6y$QC zq=3p&&zkw;%52!{l1OQBksT+AZXd3-W3>(j0+w z#ULYAy0m_u@|iNKe5HJ^{G$A!bTtV#JB8q&aOVrP3x)n-;r2n{!7-sq?Ixel;aC3| z;YGXPb_lu83m>b$EXzh+aT3jCo9RB9K}&_3?&B{JJog%p2I|<7ypH?~2YU)ObJXXi z{uQC^i1ySdjDIL(+iiGVDO6@|rN*6x&$W)atavV#yuhWs8!66DXaDXUR2?Xy{`FFt zPgc?KZasm)_n4lzO5jR0!J!jGMn;mDn7B&1Gl}ffjpSxH>3AoBo7a-Kf5*jxsV!X5 znt=h~?w7*vKMAENLd7Pb+9kZPO*oM*G-T<_ZsDyw!SS^2_gTReD{PO`er>wv1Ywu% zz>~E0{I-~=HRsQD#N*G);PlHo{-6J3c07TaG%_}>60&nM%Q-<} diff --git a/assets/voxygen/voxel/npc/rocksnapper/male/foot_bl.vox b/assets/voxygen/voxel/npc/rocksnapper/male/foot_bl.vox deleted file mode 100644 index c96f36bdcfb6626226359fdf5b3a51f132aaa558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2124 zcmeHGU1*kN7=E7Te(vXazZu&I(p-pRtSy%`aHVPHG}AW3HZo;xsgP{`)QJAzlT0v^ z?<-w)5ay&n7wldJ3fhz<;b&U@kFexCcj?!V{0 z-#tSk?dOa!JGTrzPGKHQjM+6fy6v{|!fy#t`3oaYjSeQh)EZ+gVWj4))P#sWsfh_S zb+HyCQihthC6pXbjuO7+oYaiiy7h#(x)D=1-qc+}L|YG(N~y8Dn|cVY9!hhq|QRbt31F&32&vPy_~ z5@Q~np$uu_HI2?@i4R4hw1t?(lH+|*QSvpWv7skdlqh{lo-&^>H|<_n590{)HR3tu zRoXmb3;ij5pbU8o)H6nOnnmY}7|OhwC(IRvbt`?n%R{h5P*VhJ(@@?m&q5tJ!MY+a zP6&Z#$piBT>$4z2t|y0J-@(z>IqH=h%>wHPtSdOiQu?x{z;_FdF~pF|7`~L61_?ad zECiDWb*ZopVGT;@tx1*ejkC*@^>{0pSeL04>OJi~bIumdk>^|?&SdIruFj>75Z2~t z_p~c#Ax_Bgnb4*@dne@k%=3-ZX|58e(?SE|@r{)5d<(C(5bBhBAl~Ley?B=icfpIz zJoU<+yf@^t24OCq9d)YgNm#p@%&TU~_fXErD|7Oll>4K6H_zEB;k_1KSd$8ELY=3M zy?W1>o;KD@i02y+!hKNAMmQJOm?^nIQzxvSc~xxgS*v>X%w3kUHumF#$sFr;oQbeD z3G9V%>?v^H0(UaeB(G>vBq2#FA>l43MI|PA6Zf}?_oxZ?IN|(a-o$-xqP;1hOp+{7 zOB?^0VDqH>55yGw=edIf=aR6l#M{jA?#O-Ou}8M>|80CXRv4hmV0Qg_Om%eN!nM0` z<=cDlHP)c~o;S3AWROm_W2k*4@YQ{|X#^PF1<eE>dG zVZshMeu32dg6U}x^TaeUf$22|abweY z;FZsDs-ODSX;jCjapn;1+fHC|auQ61at!7V;11S@d17~|@aXL9#E;Jbt@Z-U@srqe zVI3~jXuCPi2S0>bt%l8SUd2lvT*c-SC$RnC9t;i+qOY$HZEbBB8>?bysEYpnDpswk zVtE_qBKxqguzTdp-vIN5|E!aTZ>i_@!U*}=|1k;s$U;qFB diff --git a/assets/voxygen/voxel/npc/rocksnapper/male/foot_fl.vox b/assets/voxygen/voxel/npc/rocksnapper/male/foot_fl.vox deleted file mode 100644 index 0aa14f0820f0155a216d04bc8b7b26d421cb9a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2188 zcmeHHU1*kN7`~tX=lwq0R*>dG9Aj;1(!iCXnbS<$5ZlOI{%_#_j|zg9M9V2!MP$>n|UHwS9ro% zn>$()gzvWW&gIVYo;D<^bP4lE$(*;Di>feA(?>JEDxBAh)wz$n^R5iWGQTN&kjz+J zCghRmkm;y0$GfO~9(lG-(?{hs@kK)J-ZpSKpZ_d>?_UCM7s`|z-mV6Xgxeb}42Ep4rl2_#112ymoYZEb2 zBWfEWb+2a5{V<8-CgE%<8@Z2B7lzQ>8(qCK##g-sYBRrAo*Ix7HPpYJJ9Cf5Fu?QyS33n};$iJyj)+Oe3zSk>XNs788j7`eA zO0t?xc+YPMSzU#qPELtRm@6rg3d~jGp4Ln(o_Oq$jq=z3lp9L~=oVaDvj!8Loj8B( z9$fkMK75UpsD952-#-#$;~g04SPFb~KW>TvhPMNJTePQv^k;s44~%^Xta{)A?(NwJ z>l+Zi6&sjlZ{_+Kuw^gM`Oq{TWlA}_4J&X4=MMK_bm2n0J0f^_tDv{L13jHf=CSnd zMM!tG11~b*{TDE@LU8QZVmv#12Ttw23kPhHD!pX|exD?|7l``K+b@RMNXvfwg(PhVo) zZv?;LLE!pf;D=%08XNj`H!#%?ys;9mJ#zx52HwG^yYY7fHrj=a_j`w zpI?njDc^36QSgIE(-a%tyo#4TxQY$Ok7LV$ofsS(L|SX-}SxV05)iCg3UKmY4IL$R;7FZP*cI|2$*jHD@&bU4N9 zG>oLfl%xv1hSm<{oLXmznN&;5DW>H#4J+H$8Ip7wrj>1ThFA{G4%0|x8)h;~d8Zhb zshTYH$X4iV?W;yPQz3@>Yi+8(VT#9eNRdNf7~;uMeU55!)H6pld$&K+D!KtX8XFr) zrBd9U5_WvNhUNO3KV2?XS9fE_h1e3E9n~Dz-$ZJpgQbZWOH&6}nt6kUr6X*PxG8$6 zjIyH@1m?m>Gz%HJ51HSBthw=4ZeiOK`838i5$fDT?vQYQT6kzuaG#eAzWwln>^icU zH)jiJPYGQa;pL0M==VZFmxq#sm-1AQ`o##v!!EqXJp|8|QgdY+1^q(#JHlhrLi36s z&+GiLTqN@VvfyGMWO1%KpX*N*!_G&@h_I}JC+#V(#bd#tn=ESjA$xOUXw7G^o z&xYxHu9cpi9>U=;qp$Vi^ZEGghf6G;>L)KR50{=7iL2HCvI~I`i82Q8bEYI9I!=oO( zJ0&H&?aR>8G{wR9-=%P%fNPh0EcX?0*zNw;|F?CvS8w-Kh6iDE<{arWi+r%~4Ih5J z&ZE`!w2aTuae9UBFV=}fBHR{`Tm^sOSl8l)cVmA)>;3vK{@asx_HXn01UKH<-Lg&I PjkEjr;x>%$y0u{s})U9J{7Q|pX8V4j}dU+f*#Y zVQ6kj!c;89VT!GTy@n+o)6$yau*5bTnk$w=65D1UMg~kT)T3N(MIK;4>>P^E) zSc*e&8is9}hHaUeE2gEIrMZ~eZ)(4(y&4-DE0(FTvS-_~Eu!C+wT6ZUlF1~ur-bbv zuVTCY=1-T4m6cs&?LsU=M|&0f_cf9nX(uxgBQv$1%*>nAXAZL|;->KBQc91M6PODl zQ71BVKQg}=S#{&B*v!@^^Js`~B-F8yoFUJ}pu4ZH9j^AJ2+LiN?H?+TAk3r)*{yrAokbiex?uBknFB!dZ3k+_h01KvxAh|ZklRJXn)4f z!FWAGJA~9eVJ;yopAhPbJ;Z`#^wmAVa9fyo(9K|N5hsqmMtb56qD|H8elAS!^DT6D zcM}eW8GXG6pU=l{-(O-ZAB+8!ghC-s z*3VH{Jx}ArIEAS~u70ZL^^$Pj?cw%!Fv?+=X3p%kEPy14!Pa``v2L!>|8xv*BBmv(V26k&Mb0#;VVA;a*fBT>S!LH zqy6+UU60RI7PkO)pOaJ=ho&9HZeS+)n>~20Q-c8Ha@1?Cz IeDCq{4^<&0Hvj+t diff --git a/assets/voxygen/voxel/npc/salamander/male/foot_bl.vox b/assets/voxygen/voxel/npc/salamander/male/foot_bl.vox deleted file mode 100644 index 7290806bc8b65be438e93a749c2de0cdc860728a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1244 zcmc(eZ%mt26voee--5({0SCpFtzdzT7PIj$Km}(RR928p#=ub-ab}w^f||B35z@?z zE=FAD7-<0GCgQTpWZ9gg5R)Y$S#X*x%R-jLM2Xo4<5xcz>Pep5Jm)#j zIrqKyy*+ym6itgrM^ku@UgQUdNLM%#deSC39@EIsFf|VJM#8gtwWCzS5EU~-EYl%z zhf;CVkhm_il;)3*P zuc2(OvJ6vVdbX9JjF_o4Ln%wN-_+bNq{TF)Nh#TtscSQ}wy$+pljwnV)YsRONF=yF zCG0-GN^$Pr{F$4}%1Q@zTnR6-r@ewh2OCI?w6i!7W^w8ei!<+1xA+d(K_{*^iYPi> zj&Cl2gfft!$C3GGkX0wy9YX%Fuz6B={+f_ABs`TAHfip>EYx&7LECUPkrSKvXlV;A z386D3ym?g^y`#OIZajltN)mo*(?JTNxp+^z@n0;Y^5!=3`-GAcy7#ouxGcziJ%20< zNj;4$hf5WC+t9fneeXM+WjGUYtyk0MEx0_0zm)h-Hd7;Y3 zKl)j}UCuc@(_g%WTi1n9Lj_}lWy~h4S-sNCA3t{yJ(W%S(fxdV$Hh8@|J(PUZY?F< zzk}-PYR=Zpv7>UHhKX@pNf$T2(D(JaaJj4upU=lY@d&T%UOTq;Mx9sZhuwEQpCkkr}JOuZ`awqdb@5B9e~l9OC&F(`FP<5pM1B* z){0toj?dBl*)m<%)(8fJ+!v564gSJh)8w9aV}HNu|Lec>@6SHizpd*hxbe;&w%X#u OG&}z&ZKLs{{qhf(rYo!f diff --git a/assets/voxygen/voxel/npc/salamander/male/foot_fl.vox b/assets/voxygen/voxel/npc/salamander/male/foot_fl.vox deleted file mode 100644 index 02ca8d1d9a99d77744007ee9becf3b1c72005bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1268 zcmc(ee@xVM7{{OQk0aKvLBbJ-0v({-(Ue~UF31ky!h_HdA-RxcQv(^*;En~m+2mY{ zoQdoPwlpH=Y;zhhU~O&@bL85bbIiH6V&xyLfBU1g{(JR&@z2tKd$#wU&-?v6pXd4f z?A&`Ge@aAJ>%)80$*;CZdpHt$(jjUoipLa|;y_m9-gC1yKZWXLu(&opADONLBCwG=1E9I|w58>*SckddM_ToSV^BWl>H zSw_q@%$PQe>OwTvRIYUth9NOi6gsxWh#96d7?#vqw(K%(X>_UPGK|>1rd{=-dvmO& zriOSt&izSY_k~poGXCbzj0{#*T5;@Zc#%CVr5rj~OMJM6#qltUlZRNGewXUScSsAm z$$lfB{Np9~W&%jah4ep;%szvxx=CvlvId0B6TJ1TT*!QnlN%l=eBvs?ekI?_fxeHBxf)K?`aSIOL>&t+(uTnP*W1! z`#;@O#6r&wDk>^CTRp>$vRP`!$H-1(bMp(muh)eu#l`r1K6(p=d1d!Jk{Bg(Fq5U} z2X}Z}&muQBm-ma3?5v&S@Tm`YwkM0*Ulp+w$>ylr{jc+P@|;>-?Y9{0g^}sYBrY!S z@%#-w`EHG^rB&=4o1x{iW!mS~2nK`P7m!p1e_^dDx#!(j-!J;U{wx0d*$3-);`#+Q V{@KI46MR_A(H|AtDE#R8@(=z)E|vfQ diff --git a/assets/voxygen/voxel/npc/sandshark/male/foot_bl.vox b/assets/voxygen/voxel/npc/sandshark/male/foot_bl.vox deleted file mode 100644 index 0531afefc6a88efa3afb26dec1241a411a0bb5d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2072 zcmeHGU1*hM9DknY|9_tMJx6ULOMBlK?#OaFrNL%OI-DQ5b`aemQPvR+vgxdLA$@Qn z(?sP^I`vB3NTwIVWC#-LrV^4c2u5_Vl336OMIg~tS3&&xJ?GLO=)Mj4|6cm3L4WO^w-Eu5O(l4Sw?ox=fK6e70Ji6)ODxAgs3~tES|K|gyJ*Ll zXcLzCe4L+tM=68`TXcko%Ty#c-WI+1-1{UC!RLurB4lDEb5?U@FG=)k$kk}>RWk2F z=BWqkGjBEXVhPCt^Cf{i@mWyG#VH|~sL$2$&8OtM%!$iGtfQJ)wYjjqx>zI4gi;u* zv9^-KTwaqbk-+yP_mX6Ry(XfWYOIqmzh;T^L?Dk`Pe1Dh;Y`dIoKmM`?Z93FV}q4E zFn?g)pn*AK40YBGoIi;?7x@JH^@MT<-f>p?J^7wIZzQ*z-)Zyo$y44sWeWxQ;0V67I@17>lLC;3weP# z3L&K(-(oG=k{DW$MJ;`pt2J%28;LAP`^j@M_}j*ux9lnmbdSRh8j%Rh8+tR zqPl1i%*R0AbHLK|Q+SFc&4uk)g>&edKfm#QWaUasmdof|){6F}Em+!;VacP5arf+U zyg$gg?;XbADubg(GrUxJ5U2M(f`fb4;Mfa2IC=O<)JN81^wI@boXy9s8W zV&=pBxO;0D-+uZ!UY#}A1%vvu!IA4Lu=e|Hxcv4uTspZKSI+cd@?shI#bD-!!3}cH zTsQdP-fH~L7<~33@KXi2&At3}9+>C_PIlp~=TG2t|9O1Wc?(y~Zx|Z`F++?I2Qb!k z5O+3Q0$%$Br+Vpc9z$(t3}=Sve2=XBw|up2o)G$I*9iH_F^&cXv1PJjb3rH4F^Y(A!(X ziWN0vIqxF-5WjnKUtwx$3KJ6(7#$r&tyaU(&`=}3y}i8=U+q4CQ+wXTrQx%<`NkyX zE`Eu*xjD?v&NgCudU{Z;R&nUiAzZt5jXw$VpRi@i7WDV`qf)6L=DI&V&e74)fzHm( cf4oI*M{_gQ&6|fxQxnz^_s9Ql|LZ->-+qPoX8-^I diff --git a/assets/voxygen/voxel/npc/sandshark/male/foot_fl.vox b/assets/voxygen/voxel/npc/sandshark/male/foot_fl.vox deleted file mode 100644 index 9c44dd141c3d7fa219bd03f80d62b5267b8dd2ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3524 zcmeH}>#Ju~8OPUN_sibF#B;J7bNa}b?FqD)6r$VSI%I7k;x zWL{7?l#cpJogo>0F{liJ#Pp^Tk}wE{=*5)81YIZsiT;2fo<95Z&LHT0KX}+{J?pux z?{itdyAL1P@sd*N_HN}4KI)xDsXJHJZmp*cze}LYplN^P3u`M+Bo_Sc*GdIv$5Pa2 znrb~mDe57GYBa4{H*K|UW@^3gEu0nBDORJM)|}^9bvai#-Rwh2RBv0bXPs zS;uLOPMl<*x>UU;E?rlhu2mQDrHkr{ab0n4DAoUcATgbt)@NA<7SDVh&)lfq@>CSWJ8#Ve`^}aSk z@S*pO?qjXT*ythpIEKa`SB=HxvDiE$mxh2|s10Y;7|;#i6dKiq5XJ~z3Hb=+T46_Z znK)8C*)@G-VrLTe9himK6`%U-6ZW}FqBfH0OwqkjU_l;i(!CAjqfjd`j5)-+6V zea4S32Hs?El2`PM?otRtF5nhI7jxC6V)|H!sc@F<7`cC#>`r>f2F|SKEC&2X^gKM% zxtp;p{u4Q#AnVB^lss`ldE#4(47hL}9rI`M|{K@iQmPlFAg1t{V?U&f~_5rB`=O#8}yb)>cfb&Z@y-+Mj! z$gDxu)6X8e9^Cwv96Wl$gRggdeKq*ROkzg*KtEAmo|wHuj(m7x_EYUe=2_saNYi(! z0rCdcb%;aF9IBa#HJH}aLhaK~Yv0$*u9_UyCJZ%stf{q{9Mv8c2Lrb44xNq82vUh0AK5ik|1fH>>3YKb30Xyqmi;@v7zI%_2t5l3v(s<|#qJENbRM ziU$59rxzirxh-aH!$fx3Mziqnl=I8lg+*okvh{XuO`O-{)!4Yu)-Q|+%eBe8BVnFu zwWz1r+*Hfn`9$@>^wL(x3yl*Srd<1xLVB{W_-g8Y5J}hIktKr{N84u-DK} z4fC%dhYjdZCZAg8~+cRT!&m83Q&_Xl(wT>_E(Tw+~ z|$BYS1~-MD?b{PmQQ*N^Xz!#l1L`Sqve7s`mN-YKG# zTyfuqY<|e{k0M836S@AnGqSvRK&;;oz== zD=*02y52f}^qOnr%*u-FneULr&h4^u`;~IlC$EqXo?n(XkKp(FkI0d0l|1&?mGYI< zOXb;nKOqm@d%ZmVrTy~sBcGMc<2T8P$8VPQd#%h~*d^-jnW+1$od4ki^1-{u_PMu|{Ncmv znz~!GWikvZ(k(KB_<6WB2aevS-hp|2UgucP}l;jit!yY$i8CAJzZ={=eo!{R_Ta Bq7VQ8 diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_bl.vox b/assets/voxygen/voxel/npc/sheep/female/foot_bl.vox deleted file mode 100644 index cd25afd66c31eb6546f1b4de29f075d77aad732f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1232 zcmc(ee@NVA9LL|^Q%kbK<$2C?>2+%J&e-xt{%E$&)HYpiIm@=&k`Wv8kfj`9?l_F? zVq|7HJKTbnS%}1#ZE};Mz+}i6j4^CP5HdzY|Mo{j|GoO$_Fpjjvk$z!@9*dNJkR@i zzR&l0diLz|O-br(Zr^R9?=z+D_Hf(7>BPciWEc+``}T+1KQK*)KmBkr-;^>39mi1S zfb}%Z7?hJS;5eqzuw%&4+m53lbF+7swHc;nU}~5ut*!?K9hZ%BnV%tLnO~OqnHqAL z8j|%hi(NQ-ENkbJ4wfd_RH&%8}d+i$cJyF zlE8E$YRf|X522aI(29rLPEl}7Y?=^HT@=~<;*o^Nv)prD)OP03aV(eci9Ft4e4N&} z=t_z==Ed=wHnz)4al}tqJV;$CL{Zd@f80xOwuGvyn<+Rb%1)T~lxSKKdd23CWuxSy zXu-|s<_*j}ozJc3ilE~Ok`jx?PsVRXa#+lNESBfQwM&+V#7vv`X0KQ~D#Dfz_lSwZ z);=U!0;0D;47G~0*4|a?CDP_6)>XmOk!s?v)-%=D!t#5s@%wCq%2E$a)g|nDzJen? z_4Id$#Oq@EEwS{Gs4Mo;9xUTv-4>#)jr0UPL~4r|-%(DgcPrtSo9REaoA}@X#zu}3 z8wj&gJ`FvCb{M2oEl4q*}v^7<+=fy@Q-rdCf=YD>^7G&*4 zC7;@ysabLTJMrs}A{MFOY@&vh3oZQdOE=N6T*kk0bLnOwYn1%&-(OQx!|D2IwpPus zZS*9Ci9)V^A#NQI=PN1*1OoJx4)M~?1(b-9AI)d+%)Ng&;*;=_e2eDcF8&kT;T{p2*eK3k&u w;wqs~h&uvh8~jDas<{2_z4hI;^YveKyMlM`+5I$Kyk9NdzFzIF@%rQS4?-(2F#rGn diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_fl.vox b/assets/voxygen/voxel/npc/sheep/female/foot_fl.vox deleted file mode 100644 index 73030d47e6d25b2ed06b730f8d6896e79f1d00f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmc(eUue@;6vxl+mvj`njk>0(NxL>nTTRlT_Rsofb}n6;X{y!LZkq@t-hN_^}>Pi`6rzMsRAG#t%1QF?E3`P+dW3N8Q*xP64r*8wh#~t`^?)jd3 z&pp5UySIDiZqK-gbhLzbsFQE)B3o-i>Q8DcOV%k-+YivJih>j&ECWd0>sII6N z)wPS*t}XAii1ue$V`C$!REo!A!qy9mlso?Bsl&m-LI;*z3*TIk{Gb!p0S}(RD*O{o zNGJ#CTZK%%hAcYC?+}WP2qmM!o7aWhKH-(LP@u8%s!-RFNBfa{A}0#?a_)87QbK1& z_+&;n{y^7ux+#r%sYnH=&ju-uJMfOU2~3qyePi*G9>)4OISWEL^Mux3!?{B z9}rsoLQkVG&?cN!y|d0uG~^}O>0|s*4XKYB81HRm;fs&?b1F(zxs&FaGPb?z<4|`4 zeeFVezc6u3nEzU+FLe_RRIsmpJ@K|Cx&uz4b;XQqsU+L8fyf6f^c~niDz=y5!NVl` zBP`w=BRhSHrP~+C%gbX;!D>7n57mAz_3PL2c8#A`I4sE@PhS{ARh^5nNJ;=}ojeCOcC0~gDb{qNsjTU*OF4HImro@CR| zNnB|ccP-rMG tV35ZGlB@6+wk6@wkI(yir1$H;^7;gyy|Wj2EBT_FrLUBGR(R$0@((m_Ejj=I diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_bl.vox b/assets/voxygen/voxel/npc/sheep/male/foot_bl.vox deleted file mode 100644 index cd25afd66c31eb6546f1b4de29f075d77aad732f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1232 zcmc(ee@NVA9LL|^Q%kbK<$2C?>2+%J&e-xt{%E$&)HYpiIm@=&k`Wv8kfj`9?l_F? zVq|7HJKTbnS%}1#ZE};Mz+}i6j4^CP5HdzY|Mo{j|GoO$_Fpjjvk$z!@9*dNJkR@i zzR&l0diLz|O-br(Zr^R9?=z+D_Hf(7>BPciWEc+``}T+1KQK*)KmBkr-;^>39mi1S zfb}%Z7?hJS;5eqzuw%&4+m53lbF+7swHc;nU}~5ut*!?K9hZ%BnV%tLnO~OqnHqAL z8j|%hi(NQ-ENkbJ4wfd_RH&%8}d+i$cJyF zlE8E$YRf|X522aI(29rLPEl}7Y?=^HT@=~<;*o^Nv)prD)OP03aV(eci9Ft4e4N&} z=t_z==Ed=wHnz)4al}tqJV;$CL{Zd@f80xOwuGvyn<+Rb%1)T~lxSKKdd23CWuxSy zXu-|s<_*j}ozJc3ilE~Ok`jx?PsVRXa#+lNESBfQwM&+V#7vv`X0KQ~D#Dfz_lSwZ z);=U!0;0D;47G~0*4|a?CDP_6)>XmOk!s?v)-%=D!t#5s@%wCq%2E$a)g|nDzJen? z_4Id$#Oq@EEwS{Gs4Mo;9xUTv-4>#)jr0UPL~4r|-%(DgcPrtSo9REaoA}@X#zu}3 z8wj&gJ`FvCb{M2oEl4q*}v^7<+=fy@Q-rdCf=YD>^7G&*4 zC7;@ysabLTJMrs}A{MFOY@&vh3oZQdOE=N6T*kk0bLnOwYn1%&-(OQx!|D2IwpPus zZS*9Ci9)V^A#NQI=PN1*1OoJx4)M~?1(b-9AI)d+%)Ng&;*;=_e2eDcF8&kT;T{p2*eK3k&u w;wqs~h&uvh8~jDas<{2_z4hI;^YveKyMlM`+5I$Kyk9NdzFzIF@%rQS4?-(2F#rGn diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_fl.vox b/assets/voxygen/voxel/npc/sheep/male/foot_fl.vox deleted file mode 100644 index d43de9f69257ebd52b6c3b34964761e0a96c1052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmc(eU1*zC7{{OUCY54UI-90TTHBbmE@@@6ANIr5ncBuJo!#uJb<1WMvayD;HH1;K z5Gq?_SWC5bp_|~=RV_uv>Q=I%cu~tJV=%_3Lj);fhFsh(4F=P?m&OJ3X<#mZA(Q8nrt zam4p*f3;n7eRj08w2)4xxj!lFIKM)r>u>&axmaHA#*WL8YwJ=Na^pGZ!#7e(aJm%< z=OKfSBQsAUD{czAg_5H}*@W=?6(N66crqgtY3{xxGYLX;+4_{Y7}%vMl$V-qC@gsPJ|_LR`JB*>dOe<~lzK7}l} z7~QmixfhDL`*JCCJxf-EMdc^uHzk`C=FbSrbHdH5numm$u<-33VeN$twTABEujQNXxe!f}5+U;6C z*Ew^u!maOxUw;%*u>j{X4Xj-5;E!K=NsJXT{4Sd5aXFAjDI6Z8~<;q#IotZ^UHZf`E7~=}|+E<-k~B zu^dRmG72X;+*n;=nXqM>x>NBbt&528EU17_(wAR&SEYoG# znzL225>!u!7+Z736*iXLWwgdPKJ^q@?sl`V(BP!F7X0#|Nb;vp*|M9!+tv8SDv&?|((x!V{xq_fLQ;d^=@jw< zITTC_i5}>I!r(F0yMe+k3dxs{>oAY-`mF2XIcDsE049?`Fx^t#wUd3IpOE;h2HjD zF2zb%yjII^KQ$5QPh#Mzo9lN{StH}2{a@03`M3W0b_~`R|9Af-B_&)aAEU5noXWnl zq{dQNx-6_7)uTHxfzRioyStm0_Rk=(UXmlp%wD|r4^OA**-205!nt9pD~CANf1a(a z9&UfJli5%zL%L@V?!V)6zICK&naBw^b#ao|l{g>F+~DJHR@i;AkLt5y9Qbsers);@ zem{40DUzt*59}3T{p)+{Ti5gTU-|o25GSsFH_P(PX>QJ4-QdhkY}~=k9!J>BH@`oa VbNIHsoouam18?EfKkDv#79{NFU_5EXL{7xY%@#ha&C+yC>4 zs9S*(H*;bR=5B5r5+i4FlfpktN-UBHCu1-~V(kC@F~;bhSD&x-hXreY>;v!b^Land z^Z7nMKF_D+ouhffBGOnJJg9_>WQa5eLxC4fqLxKLsbqt~(PN=thmz)Um>-MuXeM;c z5KZgWbTLGiZqXEU#WjneX?jF7T}e^UA|gsJnxTmv(Zphi=nBeDGL${T(6x+iUF~(T zM0Cv(IkazY?OFmV9BRemaUKi``$y;5ZvBV9tXAgc8ch>dfhJ{TDVe^1s`$6zFZls|ri_qE4d^Wv}`nb?E zBz!m_oW8HlHaW@Z%%>pkp(5?aWmw7Ycj8IqQo2xxy;UeUE9@K=s%Hf`tm4Nqk)fB6 zDJ#8&FEjpnHp_3ipy5?~s^p-;FA9Gs4D|>TUkY>M!kw#%`-QQ9aP5$=a#9E>-qRus zoKX6xQ0Erf_6X5>;o-t4O5kFGNa7P`3?X|EtM)7tV)n&OHc&mu^ zmP*16LgGCk`H3+5g;0^>B{5~%OpKfL1+kAe#<6-4q zF<+~g>6EZIBmDle5bG>rBvH=%l{)_Xtr?>)i~h@2uHJXBLhf_xA5nezxB9uAgw^@~ zU4MCbITtIFl$4I)>ph1f;b7rAVfnZk-Bb#<+f6hYaR<{O2ZO3-&-UN+Gyiq0c@d)nPG1@)@qL=lr*87qjU{%U z>ZRsfk^|q&(mc6@-|y#vN<}gi_#4ZTuzLM*eyeJ}{>%R431Z6SyVES*n&j5Zd>Jaz7guRH>t5-!UC diff --git a/assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox b/assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox deleted file mode 100644 index 70532390962f22cba53f0b18ddcece734d17661c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmW;MKaMjs90uT@Jz1bY>_)VRKan_ryH7&sLqTW@KmrAQd=zx9D3B;}0g5!cr*JqOR<{>TlAyT~LwA|;kxlbwIrz|NM<0a*de(al*mxq*>`?M?%4t|c5 zo>JteNZFX4Q(BCRUh-mp^OVw^ZljZIf7v{zeD|F7Ip00~@Xc4RCy-~IukN!+l_F}@ zpRYbQ>bw4*-;Me)?ccxG|Ni*GcYQOz>BphfLDht6r|PSIoUZ7LzUYgh=)Kp_hd%V7 z$I-~xnp7#G_lNGI^K_ox^*oc;^i9vxc{c%}Fps?@QxpJdI~A6;I=7JdLOE%;n>0JdLOEG@h}f zji>Q6p2pL7{H(bu8spfC=y@tn<*7WCr}E6(!BcrEM0LUHraZwDJi!w%E-iW|3au)vw)}tI` zFFV;v+~g`3Im=0oa*)03WGiu#t6bzPCppSN_Og@hdb{1$>-D-`E|>LuKCh?KX+0i~ U>)~)%_xt_2+wIovc580L|H2_{^8f$< diff --git a/assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox b/assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox deleted file mode 100644 index b346bb3e09c4fc39fdf14f36d5b6a389dc13af6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1164 zcmXZbJ#G_07zW^P?I0)+!JHJ6Q+fK&)kt5nB+>H}o&r!jthjM;6AaPYDLjRz@Qk72DLjRz z@D!dgd_0Ax@D!fH(}%S16rRFUcnXi7HAY2a+t(y|p3IYZGEe5oJmYonWS$I>JutiZ zcttMCPRI^2Pv#k~jVJSDp3IYZ`m4-5pC8<6AMZswyE7mAKEV?_!4o{eGo~L;@B~lr1kad~Ji!w@!4o`Vn(_os@B~l5c(mxemz`{7BWqd7Qv6T1ILblxvXiZBWGyRM%0l8O2ieO`wz846tYj&Rc03;2;c#gC f{l4vXySCkK+h((A>-D;=R;#vLF56{R$Mt;?A|G>Tya^{ckfnILL<9%D{A*{*#$)w^;AxkA~_X- zbuoqrF~`S-uf^yo``phLP8W?r;HZm8Ep$1@cQ<4%Nv^nW#;oJ==#{y*sGQ)bgk!0nY8^&VC>6biIbN zA_`lcA2(~46B*#iuY(O#n04$ie`nK~Q8gHZ$3C9C=2VlNNB-N*MQ z4gCG78OGiDeRwgKPGxhj+=u?2-MsZ?3Hz$eloy6_{6G*TIg6>QSV3<3Qf4M}hy^fn z+r-Q%9Wzy4%)~xJ&oL9{N5d#7($H#4Vo!qxXa5d1ZPKx3tq+;Gek7Py@|9^7pC#xh zkI*r2=@|J%Y3w{6M%_pOap@r#ax|DM5w!HTva6{I&zev+yjMeDN-$p4Ci=b`qG(SU zn$k6_7H7J+)k0nGA*6jJ%rD93$?{?rRFyqu$|eWa9ZBekl5v@_T7 z&EAf_=|lXoEJ(R~sUEt4sc#ZL`%OHaf0+eK!f}6AgOqiexd9e-Hh+U5a+dl0&NxP zOY?ZczlPNKRQhX%3G)pk)hCRNAxV_wS;&2LJ*9q`jA$F_Gggw~7sQXj4deuc^623o z;+4+u@h9hKY44z-dM8_|%Gq4FndJ0j5))%tC-x~QSchKg&Ghs%larGS4-eyTIH<3$ X$7;1=Hk*lxio(mw3l9$uTpz&y{oRS4 diff --git a/assets/voxygen/voxel/npc/sunlizard/male/hand_l.vox b/assets/voxygen/voxel/npc/sunlizard/male/hand_l.vox deleted file mode 100644 index a8aeca9b976817173f0497ad446d75599d995366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmW-hYf#i>6vqGiUqHu8#fPS8C{t1@aM4*1)|Kl5auI}eU0?wP0hi*kDdOykyOXFO zqH-B%MQy^|Kv;7OTMVQ$kYdy>)`zSVO=~6`i?pdM*Xh@bXXcsnp7WgZ%zMwy%$@I) zBq<|4b+vHPppPUOQuC7LOb5b5DESG@6v#E@r8WvbZ3_fsg`Z1S__`EI*)91h`V_PsAB0`+@^GtSKh4Y1_~*hG{CRwc z(ugSja=IBv&1bTtJBoG&xekQ__Dvz@!O zR^CiYqOYWg%W*nRtk80GY?#)RIJP8c7?06n)J1S;<#O(K>|!7>oS{Ys_w8jgrfZp8 z`ZSYyVGOKGr#>YD*ZO2WU#q1$Ma_ePC6vd#%;BtX#)=a-RTzcWX`wn*gJ*LN*P1tT zZ~b%pW=rFe&A83Imb@tL^)+y`Y!xG~iM~T-I%=zMl|=AMM-dLgV#e#U z=qwE8R?jx-^VK}+%7C-Gxw9{rJFZvhwgo3cV$sHcvY{ zTI>YW#jx(ZIwG>82z2P_{ceczUDc?nRB4pk4Lt{u_Es{tvXm!kDtOXf{n$(H zRsz%^%-4qTf>zC}glJ}&^eoNG#x^=eWJML-H-5(IJdF9!JIoe$Dy(OaIVn2kW^WLh z#|bN|VUfYayvAO#E4PqiZzA{fbwUcaqHXz*&;kom@opSLH_-P^5ZZSW|L0%g$whI@ zd{%{2aEjUC7Phy3gJtWx1kFpvUtQ1Y%!4eLXJlX91vZr)=1A)(O%>-TPk)OR>i~x6 zd``D~NoUn*thxh4Er};Ba2;l~9n<0xUJt7yCp`yG-7v8s5#$8NvOYSC>JkgZudJmi zG@lW5Grg&`WQRubV^kAGkuf}a_=k9K{WKhuBG|87=)rvLx| diff --git a/assets/voxygen/voxel/npc/sunlizard/male/leg_l.vox b/assets/voxygen/voxel/npc/sunlizard/male/leg_l.vox deleted file mode 100644 index 58c115d0588ac8d8e95b7d1be692340b33ee0fd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1364 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 diff --git a/assets/voxygen/voxel/npc/truffler/male/foot_bl.vox b/assets/voxygen/voxel/npc/truffler/male/foot_bl.vox deleted file mode 100644 index 8b1e89430e27564695bc203c03283733ac918022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1412 zcma)*eMsG96vxl+_gt4`h0E*v)Vr%TuMU?lseA1%wRtrsYLn@fwQ%Ldq#@#*To&_& zWXon|Zo!<{5Q~^?Vp0q-2^oX2hK&e9WJL6De?;`(r}MjO;b>G3d^pedob#M>p5IGT z-9gWoh}7;4>{lblqC^@4EtQWrLYGR}pgg1;Y;FnoE#2sLv^39H>a$!y+rhSj#xlB>I?JLjF6sx{wbYYk(9#>um_reZ0g zelc1n%BinJdTNepTkDDXY;o$Fpv##PLl_XM_{C^lW_!=|L}9 zpQZ!AdWE^*M|kE##H`yBX^~#M0zj{4)Ozd6^09D$Jnf=^TzWmC{iygkKOQx`o9v zLP>fGf!r+myIr zc4eHHm>81cHsbMkDDZhH$$x?!g+9D#Nfd6)V))HX%zWhKhwHhl-pu2?_MDp%Zd?_9 z`cCKz=5Q`t#PX$be*LkLuG6s$ed^}Qtz=foxc~lMy??$Za{t!6G{yr3|G0nXKq+JG z<*Z!nhqdMZegDHH`E*rmr)F~^<;so>H;ujwii(POuXKWK1(WO?>?b*#%(ah&+lK_E zrttZEv}gA4T-7WR?jyb{p82zP-{Hv={dUsRc_Vw2Jv&EeJ3T;BYa%y4&t|?QnGt@?wvbG$qI4Ih5J!c)fv+0#Ek&4oo8FR$SD`?;f|NVLN5 wm=$5|tGn~9>G$h($ diff --git a/assets/voxygen/voxel/npc/truffler/male/foot_fl.vox b/assets/voxygen/voxel/npc/truffler/male/foot_fl.vox deleted file mode 100644 index 8b1e89430e27564695bc203c03283733ac918022..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1412 zcma)*eMsG96vxl+_gt4`h0E*v)Vr%TuMU?lseA1%wRtrsYLn@fwQ%Ldq#@#*To&_& zWXon|Zo!<{5Q~^?Vp0q-2^oX2hK&e9WJL6De?;`(r}MjO;b>G3d^pedob#M>p5IGT z-9gWoh}7;4>{lblqC^@4EtQWrLYGR}pgg1;Y;FnoE#2sLv^39H>a$!y+rhSj#xlB>I?JLjF6sx{wbYYk(9#>um_reZ0g zelc1n%BinJdTNepTkDDXY;o$Fpv##PLl_XM_{C^lW_!=|L}9 zpQZ!AdWE^*M|kE##H`yBX^~#M0zj{4)Ozd6^09D$Jnf=^TzWmC{iygkKOQx`o9v zLP>fGf!r+myIr zc4eHHm>81cHsbMkDDZhH$$x?!g+9D#Nfd6)V))HX%zWhKhwHhl-pu2?_MDp%Zd?_9 z`cCKz=5Q`t#PX$be*LkLuG6s$ed^}Qtz=foxc~lMy??$Za{t!6G{yr3|G0nXKq+JG z<*Z!nhqdMZegDHH`E*rmr)F~^<;so>H;ujwii(POuXKWK1(WO?>?b*#%(ah&+lK_E zrttZEv}gA4T-7WR?jyb{p82zP-{Hv={dUsRc_Vw2Jv&EeJ3T;BYa%y4&t|?QnGt@?wvbG$qI4Ih5J!c)fv+0#Ek&4oo8FR$SD`?;f|NVLN5 wm=$5|tGn~9>G$h($ diff --git a/assets/voxygen/voxel/npc/turtle/male/foot_bl.vox b/assets/voxygen/voxel/npc/turtle/male/foot_bl.vox deleted file mode 100644 index d7d60cbf932aa231e7ce94fa947d4a34397ad9a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180 zcmXZcO==WD7zW_4djvtnI14x8LIR?KB3MLlAsA641|uj+^Z*6!1((^*352@BTw$(I zR~T?1WL9&9@~Oh6SzxO*LJ{+H%*~IEf#OIUmZ*TMiABVB{zdir< z{p7rtKDYa7j=$3!f2JvRi+LgQgNy zIcJ)8pWeMb9yc|78=q=jBuf%?uc}qmSAEr2eLt<}i=Cn``l9cbW_{LY2U(x>eYm7g z`lL^ar1#fCANtUT9!Dd6DUv0L-WS!X@>HJ6Q+WoDr}9*u%2Rm;nWyqpp2|~s#?RoX zJe8;NRG$9RDo^F9Je8;N&<#nkEF?~FRr|=Y>!qca;@D!fHQ+Nu`nC3AvUDKB&dh?TcGEe5oJeg-a4xY@DA+j50 zgO5k#qU?n1AoFCN@z{7WPv*%ynWsO>%#(RCPv*%y5=y?)P;z>Me>2FMbN_}R!#=;Xk z!4o{e6Fe>#Jx}liPw*I0^gO{6Ji+5OqUQ;o;0YMF7QF$(#o@%gaw{8I%a7%<{j&Wc zCl`0y@y|PLX+QR|jrQr{aeMIUW_xmat3CRBtsS1~pI&QmbiG}D*6*>Gt!!j1EBPf~ uB6!*=xSemi^ryd4}Iv?WXb_wo-+6?yCc diff --git a/assets/voxygen/voxel/npc/turtle/male/foot_fl.vox b/assets/voxygen/voxel/npc/turtle/male/foot_fl.vox deleted file mode 100644 index 2104c41c40ab04e802b5c86272ed189381703550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180 zcmW;MO==WD7zW_4dm=&<<1E~W3lT&GMX*qCAsA64iV6uz^Z*6!1((^*352@BTw$(I zR~T?1WL9&9@~N86+duDgS3gtT^w#Sjc=Cb6mP`H%Uy>oN&XePLH%+sBiN)nSEq0S@ zrm64GyVLh?j>pXm-^Qm}7s--D-K%O<^;KW>Ro_o5`eLW(i@xalrCFc#*+JH4eIG9A zlRoK_BI*6L(1$+sp~ulkUy5W&qW49$syvma@>HI|MhuJc%dq zjMsoC@g$zalX%9f!IO9rPXbA9I$jrpB^M?qB}L-#CwiX5lXw!3TKXH)pHiQhuCee0 zPw)g!@C1*`Mb8sF!4o`&6g^My1W)j|jp%uTCwKzJtwnFZaB( bool { matches!(self, Body::Humanoid(_)) } + pub fn can_strafe(&self) -> bool { + matches!( + self, + Body::Humanoid(_) | Body::BipedSmall(_) | Body::BipedLarge(_) + ) + } } impl Component for Body { diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index 4dce7a4a0e..de2484185a 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -18,6 +18,10 @@ pub enum ToolKind { Sword, Axe, Hammer, + HammerSimple, + SwordSimple, + StaffSimple, + BowSimple, Bow, Dagger, Staff, diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index 0b5de96f61..4d853ca1ff 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -238,7 +238,7 @@ impl LoadoutBuilder { }, (biped_large::Species::Minotaur, _) => { main_tool = Some(Item::new_from_asset_expect( - "common.items.npc_weapons.sword.saurok_sword", + "common.items.npc_weapons.hammer.cyclops_hammer", )); }, }, @@ -370,22 +370,22 @@ impl LoadoutBuilder { Guard => LoadoutBuilder::new() .active_item(active_item) .shoulder(Some(Item::new_from_asset_expect( - "common.items.armor.shoulder.steel_0", + "common.items.armor.shoulder.plate_leather_0", ))) .chest(Some(Item::new_from_asset_expect( - "common.items.armor.chest.steel_0", + "common.items.armor.chest.plate_leather_0", ))) .belt(Some(Item::new_from_asset_expect( - "common.items.armor.belt.steel_0", + "common.items.armor.belt.plate_leather_0", ))) .hands(Some(Item::new_from_asset_expect( - "common.items.armor.hand.steel_0", + "common.items.armor.hand.plate_leather_0", ))) .pants(Some(Item::new_from_asset_expect( - "common.items.armor.pants.steel_0", + "common.items.armor.pants.plate_leather_0", ))) .feet(Some(Item::new_from_asset_expect( - "common.items.armor.foot.steel_0", + "common.items.armor.foot.plate_leather_0", ))) .lantern(match rand::thread_rng().gen_range(0..3) { 0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")), diff --git a/server/src/persistence/json_models.rs b/server/src/persistence/json_models.rs index a067901148..5088bf79db 100644 --- a/server/src/persistence/json_models.rs +++ b/server/src/persistence/json_models.rs @@ -142,6 +142,10 @@ pub fn skill_to_db_string(skill: comp::skills::Skill) -> String { UnlockGroup(SkillGroupKind::Weapon(ToolKind::Dagger)) | UnlockGroup(SkillGroupKind::Weapon(ToolKind::Shield)) | UnlockGroup(SkillGroupKind::Weapon(ToolKind::Spear)) + | UnlockGroup(SkillGroupKind::Weapon(ToolKind::HammerSimple)) + | UnlockGroup(SkillGroupKind::Weapon(ToolKind::StaffSimple)) + | UnlockGroup(SkillGroupKind::Weapon(ToolKind::BowSimple)) + | UnlockGroup(SkillGroupKind::Weapon(ToolKind::SwordSimple)) | UnlockGroup(SkillGroupKind::Weapon(ToolKind::Debug)) | UnlockGroup(SkillGroupKind::Weapon(ToolKind::Farming)) | UnlockGroup(SkillGroupKind::Weapon(ToolKind::Empty)) @@ -278,6 +282,10 @@ pub fn skill_group_to_db_string(skill_group: comp::skills::SkillGroupKind) -> St Weapon(ToolKind::Dagger) | Weapon(ToolKind::Shield) | Weapon(ToolKind::Spear) + | Weapon(ToolKind::HammerSimple) + | Weapon(ToolKind::StaffSimple) + | Weapon(ToolKind::BowSimple) + | Weapon(ToolKind::SwordSimple) | Weapon(ToolKind::Debug) | Weapon(ToolKind::Farming) | Weapon(ToolKind::Empty) diff --git a/voxygen/anim/src/biped_large/alpha.rs b/voxygen/anim/src/biped_large/alpha.rs index b05f7bcba0..2e749fcd06 100644 --- a/voxygen/anim/src/biped_large/alpha.rs +++ b/voxygen/anim/src/biped_large/alpha.rs @@ -11,9 +11,10 @@ impl Animation for AlphaAnimation { type Dependency = ( Option, Option, - f32, + Vec3, f64, Option, + f32, ); type Skeleton = BipedLargeSkeleton; @@ -24,117 +25,115 @@ impl Animation for AlphaAnimation { #[allow(clippy::approx_constant)] // TODO: Pending review in #587 fn update_skeleton_inner( skeleton: &Self::Skeleton, - (active_tool_kind, _second_tool_kind, velocity, _global_time, stage_section): Self::Dependency, + (active_tool_kind, _second_tool_kind, velocity, _global_time, stage_section, acc_vel): Self::Dependency, anim_time: f64, rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { *rate = 1.0; let mut next = (*skeleton).clone(); + let speed = Vec2::::from(velocity).magnitude(); - let lab = 1.0; + let lab = 0.65 * s_a.tempo; + let speednorm = (speed / 12.0).powf(0.4); + let foothoril = (acc_vel * lab as f32 + PI * 1.45).sin() * speednorm; + let foothorir = (acc_vel * lab as f32 + PI * (0.45)).sin() * speednorm; + let footrotl = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 1.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 1.4).sin()); - let (movement1, movement2, movement3) = match stage_section { + let footrotr = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 0.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 0.4).sin()); + let (movement1base, movement2base, movement3) = match stage_section { Some(StageSection::Buildup) => ((anim_time as f32).powf(0.25), 0.0, 0.0), Some(StageSection::Swing) => (1.0, anim_time as f32, 0.0), Some(StageSection::Recover) => (1.0, 1.0, (anim_time as f32).powi(4)), _ => (0.0, 0.0, 0.0), }; + let pullback = 1.0 - movement3; + let movement1 = movement1base * pullback; + let movement2 = movement2base * pullback; - let foot = (((1.0) - / (0.2 + 0.8 * ((anim_time as f32 * lab as f32 * 2.0 * velocity).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * lab as f32 * 2.0 * velocity).sin()); - let slowersmooth = (anim_time as f32 * lab as f32 * 4.0).sin(); - let slower = (((1.0) - / (0.0001 + 0.999 * ((anim_time as f32 * lab as f32 * 4.0).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * lab as f32 * 4.0).sin()); + next.shoulder_l.position = Vec3::new( + -s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.0, + ); + next.shoulder_l.orientation = Quaternion::rotation_x( + movement1 * 0.8 + 0.6 * speednorm + (footrotr * -0.2) * speednorm, + ); - next.torso.position = Vec3::new(0.0, 0.0, 0.1); + next.shoulder_r.position = Vec3::new( + s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.0, + ); + next.shoulder_r.orientation = Quaternion::rotation_x( + movement1 * 0.8 + 0.6 * speednorm + (footrotl * -0.2) * speednorm, + ); next.torso.orientation = Quaternion::rotation_z(0.0); - match active_tool_kind { - Some(ToolKind::Sword) => { - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_x(0.0); - next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4); - next.hand_r.position = Vec3::new(s_a.shr.0, s_a.shr.1, s_a.shr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.shr.3) * Quaternion::rotation_y(s_a.shr.4); + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_x(0.0); + + next.hand_l.position = Vec3::new(0.0, 0.0, s_a.grip); + next.hand_r.position = Vec3::new(0.0, 0.0, s_a.grip); + + next.hand_l.orientation = Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_x(0.0); + + match active_tool_kind { + Some(ToolKind::SwordSimple) => { + next.control_l.position = Vec3::new(-1.0, 1.0, 1.0); + next.control_r.position = Vec3::new(0.0, 2.0, -3.0); + next.head.orientation = Quaternion::rotation_x(movement1 * -0.25) + * Quaternion::rotation_z(movement1 * -0.2 + movement2 * 0.6); + next.control.position = Vec3::new( + -3.0 + movement1 * -4.0 + movement2 * 5.0, + 5.0 + s_a.grip / 1.2 + movement1 * -4.0 + movement2 * 8.0, + -4.0 + -s_a.grip / 2.0 + movement2 * -5.0, + ); + next.upper_torso.orientation = + Quaternion::rotation_z(movement1base * 0.5 + movement2 * -0.7); + next.lower_torso.orientation = + Quaternion::rotation_z(movement1base * -0.5 + movement2 * 0.7); + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0 + movement1 * -0.5 + movement2 * 1.5) + * Quaternion::rotation_y(-0.2); + next.control_r.orientation = + Quaternion::rotation_x(PI / 2.2 + movement1 * -0.5 + movement2 * 1.5) + * Quaternion::rotation_y(0.2) + * Quaternion::rotation_z(0.0); + + next.control.orientation = + Quaternion::rotation_x(-0.2 + movement1 * 0.5 + movement2 * -1.5) + * Quaternion::rotation_y(-0.1 + movement1 * -0.5 + movement2 * 1.0); + }, + Some(ToolKind::HammerSimple) => { + next.control_l.position = Vec3::new(-1.0, 2.0, 12.0 + movement2 * -10.0); + next.control_r.position = Vec3::new(1.0, 2.0, -2.0); next.control.position = Vec3::new( - s_a.sc.0, - s_a.sc.1 + movement1 * -4.0 + movement2 * 16.0 + movement3 * -4.0, - s_a.sc.2 + movement1 * 1.0, + 4.0 + movement1 * -12.0 + movement2 * 20.0, + (s_a.grip / 1.0) + movement1 * -3.0 + movement2 * 5.0, + (-s_a.grip / 0.8) + movement1 * -2.0 + movement2 * 8.0, ); - next.control.orientation = Quaternion::rotation_x(s_a.sc.3 + movement1 * -0.5) - * Quaternion::rotation_y( - s_a.sc.4 + movement1 * -1.0 + movement2 * -0.6 + movement3 * 1.0, - ) - * Quaternion::rotation_z(s_a.sc.5 + movement1 * -1.2 + movement2 * 1.3); - - next.upper_torso.orientation = Quaternion::rotation_z( - movement1 * 1.5 + (movement2 * 1.75).sin() * -3.0 + movement3 * 0.5, - ); - - next.head.position = Vec3::new(0.0 + movement2 * 2.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_z( - movement1 * -0.9 + (movement2 * 1.75).sin() * 2.5 + movement3 * -0.5, - ); - }, - Some(ToolKind::Hammer) => { - next.hand_l.position = Vec3::new(-12.0, 0.0, 10.0); - next.hand_l.orientation = - Quaternion::rotation_x(0.0) * Quaternion::rotation_z(-2.0); - next.hand_r.position = Vec3::new(3.0, 0.0, 10.0); - next.hand_r.orientation = - Quaternion::rotation_x(0.0) * Quaternion::rotation_z(-2.0); - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = - Quaternion::rotation_y(-1.57) * Quaternion::rotation_z(-1.87); - - next.head.orientation = Quaternion::rotation_z(slower * 0.03) - * Quaternion::rotation_x(slowersmooth * 0.1) - * Quaternion::rotation_y(slower * 0.05 + slowersmooth * 0.06) - * Quaternion::rotation_z((slowersmooth * -0.4).max(0.0)); - next.upper_torso.position = Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1); + next.head.orientation = Quaternion::rotation_x(movement1 * -0.25) + * Quaternion::rotation_z(movement1 * -0.2 + movement2 * 0.6); next.upper_torso.orientation = - Quaternion::rotation_z(slower * 0.18 + slowersmooth * 0.15) - * Quaternion::rotation_x(0.0 + slower * 0.18 + slowersmooth * 0.15) - * Quaternion::rotation_y(slower * 0.18 + slowersmooth * 0.15); + Quaternion::rotation_z(movement1 * 0.2 + movement2 * -0.4); + next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + movement2 * 0.8) + * Quaternion::rotation_y(-0.0); + next.control_r.orientation = + Quaternion::rotation_x(PI / 2.0 + 0.2 + movement2 * 0.8) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); - next.lower_torso.orientation = - Quaternion::rotation_z(slower * -0.1 + slowersmooth * -0.075) - * Quaternion::rotation_x(0.0 + slower * -0.1) - * Quaternion::rotation_y(slower * -0.1); - - if velocity > 0.5 { - next.foot_l.position = Vec3::new(-s_a.foot.0, foot * -6.0, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(foot * -0.4) - * Quaternion::rotation_z((slower * 0.3).max(0.0)); - - next.foot_r.position = Vec3::new(s_a.foot.0, foot * 6.0, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_x(foot * 0.4) - * Quaternion::rotation_z((slower * 0.3).max(0.0)); - next.torso.orientation = Quaternion::rotation_x(-0.15); - } else { - next.foot_l.position = - Vec3::new(-s_a.foot.0, -2.5, s_a.foot.2 + (slower * 2.5).max(0.0)); - next.foot_l.orientation = Quaternion::rotation_x(slower * -0.2 - 0.2) - * Quaternion::rotation_z((slower * 1.0).max(0.0)); - - next.foot_r.position = Vec3::new(s_a.foot.0, 3.5 - slower * 2.0, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_x(slower * 0.1) - * Quaternion::rotation_z((slower * 0.5).max(0.0)); - } - - next.control.position = Vec3::new(-8.0, 7.0, 1.0); - next.control.orientation = Quaternion::rotation_x(-1.5 + slower * 1.5) - * Quaternion::rotation_y(slowersmooth * 0.35 - 0.3) - * Quaternion::rotation_z(1.4 + slowersmooth * 0.2); + next.control.orientation = + Quaternion::rotation_x(-1.0 + movement1 * -0.5 + movement2 * -0.3) + * Quaternion::rotation_y(-1.8 + movement1 * -0.8 + movement2 * 3.0) + * Quaternion::rotation_z(movement1 * -0.8 + movement2 * -0.8); }, Some(ToolKind::Debug) => { next.hand_l.position = Vec3::new(-7.0, 4.0, 3.0); diff --git a/voxygen/anim/src/biped_large/idle.rs b/voxygen/anim/src/biped_large/idle.rs index b8421f944c..459f0628db 100644 --- a/voxygen/anim/src/biped_large/idle.rs +++ b/voxygen/anim/src/biped_large/idle.rs @@ -65,7 +65,7 @@ impl Animation for IdleAnimation { next.hand_r.scale = Vec3::one() * 1.04; next.lower_torso.scale = Vec3::one() * 1.02; next.hold.scale = Vec3::one() * 0.0; - next.torso.scale = Vec3::one() / 8.0; + next.torso.scale = Vec3::one() / 8.0 * s_a.scaler; next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + torso * 0.2); next.head.orientation = @@ -103,7 +103,7 @@ impl Animation for IdleAnimation { next.main.position = Vec3::new(-10.0, -8.0, 12.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); }, - Some(ToolKind::Hammer) => { + Some(ToolKind::HammerSimple) => { next.main.position = Vec3::new(-10.0, -8.0, 12.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); }, @@ -131,7 +131,7 @@ impl Animation for IdleAnimation { next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; + next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0 * s_a.scaler; if s_a.float { next.upper_torso.position = Vec3::new( diff --git a/voxygen/anim/src/biped_large/jump.rs b/voxygen/anim/src/biped_large/jump.rs index e2aa7bf7e1..6c97b5a660 100644 --- a/voxygen/anim/src/biped_large/jump.rs +++ b/voxygen/anim/src/biped_large/jump.rs @@ -109,9 +109,9 @@ impl Animation for JumpAnimation { next.foot_r.position = Vec3::new(s_a.foot.0, 5.0 + s_a.foot.1, s_a.foot.2); next.foot_r.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.4); - next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; + next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0 * s_a.scaler; next.torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.torso.scale = Vec3::one() / 8.0; + next.torso.scale = Vec3::one() / 8.0 * s_a.scaler; next } diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index eb65fc0d8a..c1341c3d38 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -48,6 +48,8 @@ skeleton_impls!(struct BipedLargeSkeleton { + hold, torso, control, + control_l, + control_r, leg_control_l, leg_control_r, arm_control_l, @@ -72,7 +74,8 @@ impl Skeleton for BipedLargeSkeleton { let torso_mat = base_mat * Mat4::::from(self.torso); let upper_torso_mat = torso_mat * upper_torso; - + let control_l_mat = Mat4::::from(self.control_l); + let control_r_mat = Mat4::::from(self.control_r); let lower_torso_mat = upper_torso_mat * Mat4::::from(self.lower_torso); let leg_l = Mat4::::from(self.leg_l); @@ -86,6 +89,7 @@ impl Skeleton for BipedLargeSkeleton { let head_mat = upper_torso_mat * Mat4::::from(self.head); let control_mat = Mat4::::from(self.control); + let hand_l_mat = Mat4::::from(self.hand_l); *(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [ @@ -98,8 +102,8 @@ impl Skeleton for BipedLargeSkeleton { make_bone(upper_torso_mat * control_mat * Mat4::::from(self.second)), make_bone(arm_control_l * Mat4::::from(self.shoulder_l)), make_bone(arm_control_r * Mat4::::from(self.shoulder_r)), - make_bone(arm_control_l * control_mat * Mat4::::from(self.hand_l)), - make_bone(arm_control_r * control_mat * Mat4::::from(self.hand_r)), + make_bone(arm_control_l * control_mat * control_l_mat * Mat4::::from(self.hand_l)), + make_bone(arm_control_r * control_mat * control_r_mat * Mat4::::from(self.hand_r)), make_bone(leg_control_l * leg_l), make_bone(leg_control_r * leg_r), make_bone(leg_control_l * Mat4::::from(self.foot_l)), @@ -121,6 +125,9 @@ pub struct SkeletonAttr { hand: (f32, f32, f32), leg: (f32, f32, f32), foot: (f32, f32, f32), + scaler: f32, + tempo: f32, + grip: f32, shl: (f32, f32, f32, f32, f32, f32), shr: (f32, f32, f32, f32, f32, f32), sc: (f32, f32, f32, f32, f32, f32), @@ -160,6 +167,9 @@ impl Default for SkeletonAttr { hand: (0.0, 0.0, 0.0), leg: (0.0, 0.0, 0.0), foot: (0.0, 0.0, 0.0), + scaler: 0.0, + tempo: 0.0, + grip: 0.0, shl: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), shr: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), sc: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), @@ -217,11 +227,11 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Troll, _) => (-1.0, 26.5), (Dullahan, _) => (0.0, 29.0), (Werewolf, _) => (3.0, 26.0), - (Occultsaurok, _) => (3.0, 23.0), - (Mightysaurok, _) => (3.0, 23.0), - (Slysaurok, _) => (3.0, 23.0), + (Occultsaurok, _) => (3.0, 24.0), + (Mightysaurok, _) => (3.0, 24.0), + (Slysaurok, _) => (3.0, 24.0), (Mindflayer, _) => (0.0, 30.5), - (Minotaur, _) => (-1.0, 27.5), + (Minotaur, _) => (-1.0, 31.5), }, lower_torso: match (body.species, body.body_type) { (Ogre, Male) => (1.0, -7.0), @@ -232,7 +242,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dullahan, _) => (0.0, -6.5), (Werewolf, _) => (1.0, -10.0), (Occultsaurok, _) => (0.0, -6.0), - (Mightysaurok, _) => (0.0, -6.0), + (Mightysaurok, _) => (0.0, -5.0), (Slysaurok, _) => (0.0, -6.0), (Mindflayer, _) => (3.5, -19.5), (Minotaur, _) => (1.5, -8.5), @@ -246,25 +256,25 @@ impl<'a> From<&'a Body> for SkeletonAttr { _ => (0.0, 0.0), }, shoulder: match (body.species, body.body_type) { - (Ogre, Male) => (12.0, 0.5, 0.0), - (Ogre, Female) => (8.0, 0.5, -1.0), - (Cyclops, _) => (9.5, 2.5, 2.5), - (Wendigo, _) => (9.0, 0.5, -0.5), - (Troll, _) => (11.0, 0.5, -1.5), - (Dullahan, _) => (14.0, 0.5, 4.5), + (Ogre, Male) => (12.0, 0.5, 3.0), + (Ogre, Female) => (8.0, 0.5, 2.0), + (Cyclops, _) => (9.5, 2.5, 4.5), + (Wendigo, _) => (9.0, 0.5, 2.5), + (Troll, _) => (11.0, 0.5, 4.5), + (Dullahan, _) => (14.0, 0.5, 3.5), (Werewolf, _) => (9.0, 4.0, -3.0), - (Occultsaurok, _) => (7.5, 1.0, -1.5), - (Mightysaurok, _) => (7.5, 1.0, -1.5), - (Slysaurok, _) => (7.5, 1.0, -1.5), + (Occultsaurok, _) => (7.5, 1.0, 1.5), + (Mightysaurok, _) => (7.5, 1.0, 1.5), + (Slysaurok, _) => (7.5, 1.0, 1.5), (Mindflayer, _) => (8.0, 0.5, -1.0), - (Minotaur, _) => (10.0, 1.0, -4.0), + (Minotaur, _) => (10.0, 1.0, -1.0), }, hand: match (body.species, body.body_type) { - (Ogre, Male) => (14.5, 0.0, -2.0), + (Ogre, Male) => (14.5, 0.0, -4.0), (Ogre, Female) => (9.0, 0.5, -4.5), (Cyclops, _) => (10.0, 2.0, -0.5), - (Wendigo, _) => (12.0, 0.0, -0.5), - (Troll, _) => (11.5, 0.0, -1.5), + (Wendigo, _) => (12.0, 0.0, -3.5), + (Troll, _) => (11.5, 0.0, -5.5), (Dullahan, _) => (14.5, 0.0, -2.5), (Werewolf, _) => (10.0, 2.5, -11.0), (Occultsaurok, _) => (8.0, 1.5, -5.5), @@ -276,30 +286,72 @@ impl<'a> From<&'a Body> for SkeletonAttr { leg: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 0.0, -4.0), (Ogre, Female) => (0.0, 0.0, -2.0), - (Cyclops, _) => (0.0, 0.0, -5.0), + (Cyclops, _) => (0.0, -1.0, -5.0), (Wendigo, _) => (2.0, 2.0, -2.5), (Troll, _) => (5.0, 0.0, -6.0), (Dullahan, _) => (0.0, 0.0, -5.0), (Werewolf, _) => (4.5, 1.0, -5.0), - (Occultsaurok, _) => (3.0, 0.5, -6.0), - (Mightysaurok, _) => (3.0, 0.5, -6.0), - (Slysaurok, _) => (3.0, 0.5, -6.0), + (Occultsaurok, _) => (3.0, 0.5, -4.0), + (Mightysaurok, _) => (3.0, 0.5, -4.0), + (Slysaurok, _) => (3.0, 0.5, -4.0), (Mindflayer, _) => (6.0, -2.0, 6.5), - (Minotaur, _) => (5.0, 0.0, -6.0), + (Minotaur, _) => (5.0, 0.0, -10.0), }, foot: match (body.species, body.body_type) { (Ogre, Male) => (4.0, 1.0, -12.0), (Ogre, Female) => (4.0, 0.5, -13.5), - (Cyclops, _) => (4.0, 0.5, -17.0), + (Cyclops, _) => (4.0, 1.5, -17.0), (Wendigo, _) => (5.0, 2.5, -17.0), (Troll, _) => (6.0, 1.5, -13.0), (Dullahan, _) => (4.0, 2.5, -14.0), (Werewolf, _) => (5.5, 3.0, -6.5), - (Occultsaurok, _) => (3.5, 2.0, -12.0), - (Mightysaurok, _) => (3.5, 2.0, -12.0), - (Slysaurok, _) => (3.5, 2.0, -12.0), + (Occultsaurok, _) => (3.5, 3.5, -10.0), + (Mightysaurok, _) => (3.5, 3.5, -10.0), + (Slysaurok, _) => (3.5, 3.5, -10.0), (Mindflayer, _) => (4.5, 1.5, -7.0), - (Minotaur, _) => (6.0, 4.5, -13.5), + (Minotaur, _) => (6.0, 4.5, -17.5), + }, + scaler: match (body.species, body.body_type) { + (Ogre, Male) => 1.4, + (Ogre, Female) => 1.4, + (Cyclops, _) => 1.6, + (Wendigo, _) => 1.2, + (Troll, _) => 1.3, + (Dullahan, _) => 1.4, + (Werewolf, _) => 1.2, + (Occultsaurok, _) => 1.2, + (Mightysaurok, _) => 1.2, + (Slysaurok, _) => 1.2, + (Mindflayer, _) => 1.5, + (Minotaur, _) => 2.0, + }, + tempo: match (body.species, body.body_type) { + (Ogre, Male) => 0.9, + (Ogre, Female) => 0.9, + (Cyclops, _) => 0.8, + (Wendigo, _) => 1.0, + (Troll, _) => 0.9, + (Dullahan, _) => 0.8, + (Werewolf, _) => 1.0, + (Occultsaurok, _) => 1.0, + (Mightysaurok, _) => 1.0, + (Slysaurok, _) => 1.0, + (Mindflayer, _) => 1.0, + (Minotaur, _) => 0.8, + }, + grip: match (body.species, body.body_type) { + (Ogre, Male) => 13.0, + (Ogre, Female) => 8.0, + (Cyclops, _) => 12.0, + (Wendigo, _) => 15.0, + (Troll, _) => 12.0, + (Dullahan, _) => 15.0, + (Werewolf, _) => 13.0, + (Occultsaurok, _) => 10.0, + (Mightysaurok, _) => 10.0, + (Slysaurok, _) => 10.0, + (Mindflayer, _) => 12.0, + (Minotaur, _) => 14.0, }, shl: match (body.species, body.body_type) { (Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0), diff --git a/voxygen/anim/src/biped_large/run.rs b/voxygen/anim/src/biped_large/run.rs index 105768b303..1e6935796f 100644 --- a/voxygen/anim/src/biped_large/run.rs +++ b/voxygen/anim/src/biped_large/run.rs @@ -10,11 +10,12 @@ pub struct RunAnimation; type RunAnimationDependency = ( Option, Option, - f32, + Vec3, Vec3, Vec3, f64, Vec3, + f32, ); impl Animation for RunAnimation { type Dependency = RunAnimationDependency; @@ -34,6 +35,7 @@ impl Animation for RunAnimation { last_ori, global_time, avg_vel, + acc_vel, ): Self::Dependency, anim_time: f64, rate: &mut f32, @@ -45,30 +47,19 @@ impl Animation for RunAnimation { *rate = 1.0; - let lab = 0.65; //.65 - let foothoril = (((1.0) - / (0.4 + (0.6) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powi(2))) - .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()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + let lab = 0.65 * s_a.tempo; //.65 + let speednorm = (speed / 12.0).powf(0.6); //.powf(0.4) - 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 handhoril = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin(); - let handhorir = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); + let footvertl = (acc_vel * lab as f32 + PI * -0.2).sin() * speednorm; + let footvertr = (acc_vel * lab as f32 + PI * -1.2).sin() * speednorm; - let footrotl = (((5.0) - / (2.5 + (2.5) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); + let footrotl = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 1.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 1.4).sin()); - let footrotr = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); + let footrotr = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 0.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 0.4).sin()); let amplitude = (speed / 21.0).max(0.25); let amplitude2 = (speed * 1.4 / 21.0).sqrt().max(0.6); @@ -76,10 +67,9 @@ impl Animation for RunAnimation { let speedmult = 1.0; let canceler = (speed / 21.0).sqrt(); - let short = (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * -0.15).sin(); + let short = (acc_vel * lab as f32 * speedmult).sin(); // - let shortalt = - (anim_time as f32 * (16.0) * lab as f32 * speedmult + PI * 3.0 / 8.0 + 0.7).sin(); + let shortalt = (acc_vel * lab as f32 * speedmult + PI * 3.0 + 0.7).sin(); let look = Vec2::new( ((global_time + anim_time) as f32 / 2.0) .floor() @@ -100,28 +90,19 @@ impl Animation for RunAnimation { let shift4 = speedadjust - PI * 3.0 / 4.0 + speedadjust * PI / 2.0; //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 + let foot1a = (acc_vel * lab as f32 * speedmult + 0.0 + canceler * 0.05 + shift1).sin(); //1.5 + let foot1b = (acc_vel * 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 + let foot2a = (acc_vel * lab as f32 * speedmult + shift2).sin(); //1.2 + let foot2b = (acc_vel * 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 + 0.3 + shift3).sin(); //0.4 + let foot3a = (acc_vel * lab as f32 * speedmult + shift3).sin(); //0.0 + let foot3b = (acc_vel * lab as f32 * speedmult + 0.3 + 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 foot4a = (acc_vel * lab as f32 * speedmult + 0.0 + canceler * 0.05 + shift4).sin(); //0.3 + let foot4b = (acc_vel * lab as f32 * speedmult + 1.57 + canceler * 0.05 + shift4).sin(); //0.7 // - let _slower = (anim_time as f32 * 1.0 + PI).sin(); - let slow = (anim_time as f32 * 3.5 + PI).sin(); + let slow = (acc_vel * lab as f32 * speedmult + PI).sin(); let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -137,6 +118,18 @@ impl Animation for RunAnimation { 0.0 } * 1.3; + let foothoril = (acc_vel * lab as f32 + PI * 1.45).sin() * speednorm; + let foothorir = (acc_vel * lab as f32 + PI * (0.45)).sin() * speednorm; + let footstrafel = (acc_vel * lab as f32 + PI * 1.45).sin(); + let footstrafer = (acc_vel * lab as f32 + PI * (0.95)).sin(); + let footvertsl = (acc_vel * lab as f32).sin(); + let footvertsr = (acc_vel * lab as f32 + PI * 0.5).sin(); + let direction = velocity.y * -0.098 * orientation.y + velocity.x * -0.098 * orientation.x; + + let side = + (velocity.x * -0.098 * orientation.y + velocity.y * 0.098 * orientation.x) * -1.0; + let sideabs = side.abs(); + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); next.jaw.scale = Vec3::one() * 1.02; @@ -145,7 +138,7 @@ impl Animation for RunAnimation { next.hand_l.scale = Vec3::one() * 1.04; next.hand_r.scale = Vec3::one() * 1.04; next.hold.scale = Vec3::one() * 0.0; - next.torso.scale = Vec3::one() / 8.0; + next.torso.scale = Vec3::one() / 8.0 * s_a.scaler; if s_a.beast { next.head.position = Vec3::new(0.0, s_a.head.0, 3.0 + s_a.head.1); @@ -264,27 +257,35 @@ impl Animation for RunAnimation { 0.0, 0.0 + (short * 0.75).max(-2.0), speedavg * 0.15 + (short * 0.75).max(-2.0), - ) / 8.0; + ) / 8.0 + * s_a.scaler; next.torso.orientation = Quaternion::rotation_x(x_tilt + amplitude * short * 0.1 + speedavg * -0.045); } else { next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1) * 1.02; - next.head.orientation = - Quaternion::rotation_z(short * -0.18) * Quaternion::rotation_x(-0.05); + next.head.orientation = Quaternion::rotation_z(short * -0.18 * speednorm - tilt * 2.0) + * Quaternion::rotation_x(0.25 * speednorm); - next.upper_torso.position = - Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + shortalt * -1.5); - next.upper_torso.orientation = Quaternion::rotation_z(short * 0.18); + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + shortalt * -1.5 * speednorm, + ); + next.upper_torso.orientation = + Quaternion::rotation_z(short * 0.18 * speednorm + tilt * -1.0) + * Quaternion::rotation_y(tilt); next.lower_torso.position = Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1); next.lower_torso.orientation = - Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); + Quaternion::rotation_z(short * 0.15 * speednorm + tilt * 0.5) + * Quaternion::rotation_y(tilt * -0.5) + * Quaternion::rotation_x(0.14 * speednorm); next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); next.jaw.orientation = Quaternion::rotation_x(0.0); next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); - next.tail.orientation = Quaternion::rotation_x(shortalt * 0.3); + next.tail.orientation = Quaternion::rotation_x(shortalt * 0.3 * speednorm); next.second.position = Vec3::new(0.0, 0.0, 0.0); next.second.orientation = Quaternion::rotation_x(PI) @@ -292,22 +293,22 @@ impl Animation for RunAnimation { * Quaternion::rotation_z(0.0); match active_tool_kind { - Some(ToolKind::Bow) => { + Some(ToolKind::BowSimple) => { next.main.position = Vec3::new(-2.0, -5.0, -6.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); }, - Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { + Some(ToolKind::StaffSimple) | Some(ToolKind::Sceptre) => { next.main.position = Vec3::new(-6.0, -5.0, -12.0); next.main.orientation = Quaternion::rotation_y(0.6) * Quaternion::rotation_z(1.57); }, - Some(ToolKind::Sword) => { + Some(ToolKind::SwordSimple) => { next.main.position = Vec3::new(-10.0, -8.0, 12.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); }, - Some(ToolKind::Hammer) => { + Some(ToolKind::HammerSimple) => { next.main.position = Vec3::new(-10.0, -8.0, 12.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); @@ -321,86 +322,116 @@ impl Animation for RunAnimation { next.shoulder_l.position = Vec3::new( -s_a.shoulder.0, - s_a.shoulder.1 + foothoril * -3.0, - s_a.shoulder.2, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.5, ); - next.shoulder_l.orientation = Quaternion::rotation_x(footrotl * -0.36) - * Quaternion::rotation_y(0.1) - * Quaternion::rotation_z(footrotl * 0.3); + next.shoulder_l.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotr * -0.8) * speednorm) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); next.shoulder_r.position = Vec3::new( s_a.shoulder.0, - s_a.shoulder.1 + foothorir * -3.0, - s_a.shoulder.2, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.5, ); - next.shoulder_r.orientation = Quaternion::rotation_x(footrotr * -0.36) - * Quaternion::rotation_y(-0.1) - * Quaternion::rotation_z(footrotr * -0.3); + next.shoulder_r.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotl * -0.8) * speednorm) + * Quaternion::rotation_y(0.0); next.hand_l.position = Vec3::new( - -1.0 + -s_a.hand.0, - s_a.hand.1 + foothoril * -4.0, - s_a.hand.2 + foothoril * 1.0, + -s_a.hand.0 + foothorir * -1.3, + 2.0 * speednorm + s_a.hand.1 + foothorir * -5.0, + 1.5 * speednorm + s_a.hand.2 - foothorir * 4.5, ); - next.hand_l.orientation = Quaternion::rotation_x(0.15 + (handhoril * -1.2).max(-0.3)) - * Quaternion::rotation_y(handhoril * -0.1); + next.hand_l.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotr * -1.2) * speednorm) + * Quaternion::rotation_y(footrotr * 0.4 * speednorm); next.hand_r.position = Vec3::new( - 1.0 + s_a.hand.0, - s_a.hand.1 + foothorir * -4.0, - s_a.hand.2 + foothorir * 1.0, + s_a.hand.0 + foothoril * 1.3, + 2.0 * speednorm + s_a.hand.1 + foothoril * -5.0, + 1.5 * speednorm + s_a.hand.2 - foothoril * 4.5, ); - next.hand_r.orientation = Quaternion::rotation_x(0.15 + (handhorir * -1.2).max(-0.3)) - * Quaternion::rotation_y(handhorir * 0.1); + next.hand_r.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotl * -1.2) * speednorm) + * Quaternion::rotation_y(footrotl * -0.4 * speednorm); - next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2) * 0.98; - next.leg_l.orientation = - Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothoril * 0.3); + next.leg_l.position = Vec3::new( + -s_a.leg.0, + s_a.leg.1 + foothoril * -3.5, + s_a.leg.2 + (footvertl * -3.0), + ) * 0.98; + next.leg_l.orientation = Quaternion::rotation_z(short * 0.18 * speednorm) + * Quaternion::rotation_y(tilt * -0.5) + * Quaternion::rotation_x(foothoril * -0.8); - next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2) * 0.98; + next.leg_r.position = Vec3::new( + s_a.leg.0, + s_a.leg.1 + foothorir * -3.5, + s_a.leg.2 + (footvertr * -3.0), + ) * 0.98; - next.leg_r.orientation = - Quaternion::rotation_z(short * 0.18) * Quaternion::rotation_x(foothorir * 0.3); + next.leg_r.orientation = Quaternion::rotation_z(short * 0.18 * speednorm) + * Quaternion::rotation_y(tilt * -0.5) + * Quaternion::rotation_x(foothorir * -0.8); next.foot_l.position = Vec3::new( - -s_a.foot.0, - s_a.foot.1 + foothoril * 8.5, - s_a.foot.2 + ((footvertl * 6.5).max(0.0)), + -s_a.foot.0 + footstrafel * sideabs * 3.0 + tilt * -2.0, + s_a.foot.1 + + (1.0 - sideabs) * (-1.5 * speednorm + foothoril * -10.5) + + (direction * 5.0).max(0.0), + s_a.foot.2 + + (1.0 - sideabs) * (1.0 * speednorm + ((footvertl * -4.1).max(-1.0))) + + side * ((footvertsl * 1.5).max(-1.0)), ); - next.foot_l.orientation = - Quaternion::rotation_x(-0.5 + footrotl * 0.85) * Quaternion::rotation_y(0.0); + next.foot_l.orientation = Quaternion::rotation_x( + (1.0 - sideabs) * (-0.2 + foothoril * -0.9) + sideabs * -0.5, + ) * Quaternion::rotation_y( + tilt * 1.0 + side * 0.3 + side * (foothoril * 0.3), + ) * Quaternion::rotation_z(side * 0.2); next.foot_r.position = Vec3::new( - s_a.foot.0, - s_a.foot.1 + foothorir * 8.5, - s_a.foot.2 + ((footvertr * 6.5).max(0.0)), + s_a.foot.0 + footstrafer * sideabs * 3.0 + tilt * -2.0, + s_a.foot.1 + + (1.0 - sideabs) * (-1.5 * speednorm + foothorir * -10.5) + + (direction * 5.0).max(0.0), + s_a.foot.2 + + (1.0 - sideabs) * (1.0 * speednorm + ((footvertr * -4.1).max(-1.0))) + + side * ((footvertsr * -1.5).max(-1.0)), ); - next.foot_r.orientation = - Quaternion::rotation_x(-0.5 + footrotr * 0.85) * Quaternion::rotation_y(0.0); + next.foot_r.orientation = Quaternion::rotation_x( + (1.0 - sideabs) * (-0.2 + foothorir * -0.9) + sideabs * -0.5, + ) * Quaternion::rotation_y( + tilt * 1.0 + side * 0.3 + side * (foothorir * 0.3), + ) * Quaternion::rotation_z(side * 0.2); next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; - next.torso.orientation = Quaternion::rotation_x(-0.25); + next.torso.orientation = Quaternion::rotation_x(-0.25 * speednorm); } if s_a.float { next.head.orientation = Quaternion::rotation_x(slow * 0.1); - next.upper_torso.position = - Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + slow * 2.0 + 4.0); - next.upper_torso.orientation = Quaternion::rotation_x(-0.1 + slow * 0.05); - next.lower_torso.orientation = - Quaternion::rotation_z(short * 0.05) * Quaternion::rotation_x(0.14); + next.upper_torso.position = Vec3::new( + 0.0, + s_a.upper_torso.0, + s_a.upper_torso.1 + slow * 2.0 + 4.0 * speednorm, + ); + next.upper_torso.orientation = Quaternion::rotation_x(-0.1 * speednorm + slow * 0.05); + next.lower_torso.orientation = Quaternion::rotation_z(short * 0.05 * speednorm) + * Quaternion::rotation_x(0.14 * speednorm); next.shoulder_l.position = Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_l.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.shoulder_l.orientation = Quaternion::rotation_x(-0.4 * speednorm + slow * 0.1); next.shoulder_r.position = Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_r.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.shoulder_r.orientation = Quaternion::rotation_x(-0.4 * speednorm + slow * 0.1); next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2); - next.hand_l.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.hand_l.orientation = Quaternion::rotation_x(-0.4 * speednorm + slow * 0.1); next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2); - next.hand_r.orientation = Quaternion::rotation_x(-0.4 + slow * 0.1); + next.hand_r.orientation = Quaternion::rotation_x(-0.4 * speednorm + slow * 0.1); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + next.foot_l.orientation = Quaternion::rotation_x(-0.5 * speednorm + slow * 0.1); next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_x(-0.5 + slow * 0.1); + next.foot_r.orientation = Quaternion::rotation_x(-0.5 * speednorm + slow * 0.1); } next diff --git a/voxygen/anim/src/biped_large/shoot.rs b/voxygen/anim/src/biped_large/shoot.rs index 7af7cd9234..e37e9fc6fb 100644 --- a/voxygen/anim/src/biped_large/shoot.rs +++ b/voxygen/anim/src/biped_large/shoot.rs @@ -10,11 +10,12 @@ pub struct ShootAnimation; type ShootAnimationDependency = ( Option, Option, - f32, + Vec3, Vec3, Vec3, f64, Option, + f32, ); impl Animation for ShootAnimation { type Dependency = ShootAnimationDependency; @@ -30,10 +31,11 @@ impl Animation for ShootAnimation { active_tool_kind, _second_tool_kind, velocity, - orientation, - last_ori, + _orientation, + _last_ori, _global_time, stage_section, + acc_vel, ): Self::Dependency, anim_time: f64, rate: &mut f32, @@ -44,140 +46,151 @@ impl Animation for ShootAnimation { let mut next = (*skeleton).clone(); - let lab = 1.0; - let ori: Vec2 = Vec2::from(orientation); - let last_ori = Vec2::from(last_ori); - let tilt = if ::vek::Vec2::new(ori, last_ori) - .map(|o| o.magnitude_squared()) - .map(|m| m > 0.001 && m.is_finite()) - .reduce_and() - && ori.angle_between(last_ori).is_finite() - { - ori.angle_between(last_ori).min(0.2) - * last_ori.determine_side(Vec2::zero(), ori).signum() - } else { - 0.0 - } * 1.3; + let lab = 0.65 * s_a.tempo; + let speednorm = (speed / 12.0).powf(0.4); + let foothoril = (acc_vel * lab as f32 + PI * 1.45).sin() * speednorm; + let foothorir = (acc_vel * lab as f32 + PI * (0.45)).sin() * speednorm; + let footrotl = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 1.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 1.4).sin()); + let footrotr = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 0.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 0.4).sin()); + + next.shoulder_l.position = Vec3::new( + -s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.0, + ); + next.shoulder_l.orientation = + Quaternion::rotation_x(0.8 + 1.2 * speednorm + (footrotr * -0.2) * speednorm); + + next.shoulder_r.position = Vec3::new( + s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.0, + ); + next.shoulder_r.orientation = + Quaternion::rotation_x(0.8 + 1.2 * speednorm + (footrotl * -0.2) * speednorm); next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); next.jaw.orientation = Quaternion::rotation_x(0.0); + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_x(0.0); + + next.hand_l.position = Vec3::new(0.0, 0.0, s_a.grip); + next.hand_r.position = Vec3::new(0.0, 0.0, s_a.grip); + + next.hand_l.orientation = Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_x(0.0); match active_tool_kind { - Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { - let (movement1, movement2, movement3) = match stage_section { - Some(StageSection::Buildup) => (anim_time as f32, 0.0, 0.0), - Some(StageSection::Swing) => (1.0, (anim_time as f32).powf(0.25), 0.0), - Some(StageSection::Recover) => (1.0, 1.0, anim_time as f32), - _ => (0.0, 0.0, 0.0), + Some(ToolKind::StaffSimple) | Some(ToolKind::Sceptre) => { + let (movement1base, movement1shake, movement2base, movement3) = match stage_section + { + Some(StageSection::Buildup) => ( + anim_time as f32, + (anim_time as f32 * 10.0 + PI).sin(), + 0.0, + 0.0, + ), + Some(StageSection::Swing) => (1.0, 1.0, (anim_time as f32).powf(0.25), 0.0), + Some(StageSection::Recover) => (1.0, 1.0, 1.0, anim_time as f32), + _ => (0.0, 0.0, 0.0, 0.0), }; - let xmove = (movement1 as f32 * 6.0 * lab as f32 + PI).sin(); - let ymove = (movement1 as f32 * 6.0 * lab as f32 + PI * (0.5)).sin(); - next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.sthl.3); - - next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); - next.shoulder_l.orientation = Quaternion::rotation_z(0.2) - * Quaternion::rotation_x( - (movement1 * (movement2 * 8.0 + PI / 2.0).sin() * -0.1) * (1.0 - movement3), - ); - - next.shoulder_r.orientation = Quaternion::rotation_z(-0.2) - * Quaternion::rotation_x( - 1.0 + movement1 * (movement2 * 8.0 + PI / 2.0).sin() * -0.1, - ); - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); + let pullback = 1.0 - movement3; + let movement1 = movement1base * pullback; + let movement2 = movement2base * pullback; + next.control_l.position = Vec3::new(-1.0, 3.0, 12.0); + next.control_r.position = Vec3::new(1.0, 2.0, 2.0); next.control.position = Vec3::new( - s_a.stc.0 + (xmove * 3.0 + movement1 * -4.0) * (1.0 - movement3), - s_a.stc.1 + (2.0 + ymove * 3.0 + movement2 * 3.0) * (1.0 - movement3), - s_a.stc.2, + -3.0, + 3.0 + s_a.grip / 1.2 + + movement1 * 4.0 + + movement2 + + movement1shake * 2.0 + + movement2 * -2.0, + -11.0 + -s_a.grip / 2.0 + movement1 * 3.0, ); + next.head.orientation = Quaternion::rotation_x(movement1 * -0.15) + * Quaternion::rotation_y(movement1 * 0.25) + * Quaternion::rotation_z(movement1 * 0.25); + next.jaw.orientation = Quaternion::rotation_x(movement1 * -0.5); + + next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + movement1 * 0.5) + * Quaternion::rotation_y(movement1 * -0.4); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.5 + movement1 * 0.5) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(0.0); + next.control.orientation = - Quaternion::rotation_x(s_a.stc.3 + (movement2 * 0.6) * (1.0 - movement3)) - * Quaternion::rotation_y(s_a.stc.4 + (movement1 * 0.5 + movement2 * -0.5)) - * Quaternion::rotation_z( - s_a.stc.5 - - (0.2 + movement1 * -0.5 + movement2 * 0.8) * (1.0 - movement3), - ); - next.upper_torso.orientation = - Quaternion::rotation_z((movement1 * 0.3 + movement2 * 0.2) * (1.0 - movement3)); - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_z( - tilt * -2.5 + (movement1 * -0.2 + movement2 * -0.4) * (1.0 - movement3), + Quaternion::rotation_x(-0.2 + movement1 * -0.2 + movement1shake * 0.1) + * Quaternion::rotation_y(-0.1 + movement1 * 0.8 + movement2 * -0.3); + next.shoulder_l.position = Vec3::new( + -s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.0, + ); + next.shoulder_l.orientation = Quaternion::rotation_x( + movement1 * 0.8 + 0.8 * speednorm + (footrotr * -0.2) * speednorm, ); - if speed < 0.5 { - next.lower_torso.orientation = - Quaternion::rotation_x(0.08) * Quaternion::rotation_z(0.0); - - next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1 - 5.0, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(-0.5); - - next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1 + 3.0, s_a.foot.2); - next.foot_r.orientation = - Quaternion::rotation_x(0.5) * Quaternion::rotation_z(0.3); - } else { - }; + next.shoulder_r.position = Vec3::new( + s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.0, + ); + next.shoulder_r.orientation = Quaternion::rotation_x( + movement1 * 0.8 + 0.6 * speednorm + (footrotl * -0.2) * speednorm, + ); }, - Some(ToolKind::Bow) => { - let (movement1, movement2, movement3) = match stage_section { + Some(ToolKind::BowSimple) => { + let (movement1base, movement2base, movement3) = match stage_section { Some(StageSection::Buildup) => ((anim_time as f32).powf(0.25), 0.0, 0.0), Some(StageSection::Swing) => (1.0, anim_time as f32, 0.0), Some(StageSection::Recover) => (1.0, 1.0, (anim_time as f32).powi(4)), _ => (0.0, 0.0, 0.0), }; - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_x(0.0); - next.hand_l.position = Vec3::new( - s_a.bhl.0 + movement2 * -2.0, - s_a.bhl.1 + movement2 * -12.0, - s_a.bhl.2 + movement2 * -3.0, + let pullback = 1.0 - movement3; + let movement1 = movement1base * pullback; + let movement2 = movement2base * pullback; + next.control_l.position = Vec3::new(-1.0, -2.0 + movement2 * -7.0, -3.0); + next.control_r.position = Vec3::new(0.0, 4.0, 1.0); + + next.control.position = Vec3::new( + -1.0 + movement1 * 2.0, + 6.0 + s_a.grip / 1.2 + movement1 * 7.0, + -5.0 + -s_a.grip / 2.0 + movement1 * 8.0, ); - next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3); - next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); - next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3); - next.shoulder_l.orientation = Quaternion::rotation_z(0.2) - * Quaternion::rotation_x( - (movement1 * (movement2 * 8.0 + PI / 2.0).sin() * 1.1) * (1.0 - movement3), - ); - next.shoulder_r.orientation = Quaternion::rotation_z(-0.2) - * Quaternion::rotation_x( - 1.5 + movement1 * (movement2 * 8.0 + PI / 2.0).sin() * -0.1, - ); - next.hold.position = - Vec3::new(0.0, -1.0 + movement2 * 2.0, -5.2 + movement2 * -3.0); - next.hold.orientation = Quaternion::rotation_x(-1.57); - next.hold.scale = Vec3::one() * 1.0 * (1.0 - movement2); + next.control_l.orientation = Quaternion::rotation_x(PI / 2.0 + movement2 * 0.4) + * Quaternion::rotation_y(-0.2); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.2 + movement1 * 0.4) + * Quaternion::rotation_y(0.2) + * Quaternion::rotation_z(0.0); - next.control.position = Vec3::new(s_a.bc.0 + 11.0, s_a.bc.1 + 2.0, s_a.bc.2 + 8.0); - next.control.orientation = - Quaternion::rotation_x(0.0 + (movement2 as f32 * 0.1).sin()) - * Quaternion::rotation_y(s_a.bc.4 - 1.25) - * Quaternion::rotation_z(s_a.bc.5 - 0.2 + (movement2 as f32 * -0.2).sin()); - next.upper_torso.orientation = Quaternion::rotation_z(0.8); - next.head.position = Vec3::new(0.0 - 2.0, s_a.head.0, s_a.head.1); + next.control.orientation = Quaternion::rotation_x(-0.2) + * Quaternion::rotation_y(1.0 + movement1 * -0.4) + * Quaternion::rotation_z(-0.3); + next.head.orientation = Quaternion::rotation_z(movement1 * 0.25); + next.shoulder_l.position = Vec3::new( + -s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.0, + ); + next.shoulder_l.orientation = Quaternion::rotation_x( + movement1 * 0.8 + 1.2 * speednorm + (footrotr * -0.2) * speednorm, + ); - next.head.orientation = - Quaternion::rotation_z(tilt * -2.5 - 0.5 + (movement2 as f32 * 0.2).sin()); - if speed < 0.5 { - next.upper_torso.orientation = - Quaternion::rotation_z(0.8 + (movement2 as f32 * 0.1).sin()); - - next.lower_torso.orientation = Quaternion::rotation_x(0.08) - * Quaternion::rotation_z((movement2 as f32 * -0.15).sin()); - - next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1 - 5.0, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(-0.5); - - next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1 + 3.0, s_a.foot.2); - next.foot_r.orientation = - Quaternion::rotation_x(0.5) * Quaternion::rotation_z(0.3); - } else { - }; + next.shoulder_r.position = Vec3::new( + s_a.shoulder.0, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.0, + ); + next.shoulder_r.orientation = Quaternion::rotation_x( + movement1 * 0.8 + 1.2 * speednorm + (footrotl * -0.2) * speednorm, + ); }, _ => {}, } diff --git a/voxygen/anim/src/biped_large/wield.rs b/voxygen/anim/src/biped_large/wield.rs index 77640eeac5..85f772f671 100644 --- a/voxygen/anim/src/biped_large/wield.rs +++ b/voxygen/anim/src/biped_large/wield.rs @@ -8,7 +8,7 @@ use std::{f32::consts::PI, ops::Mul}; pub struct WieldAnimation; impl Animation for WieldAnimation { - type Dependency = (Option, Option, f32, f64); + type Dependency = (Option, Option, Vec3, f64, f32); type Skeleton = BipedLargeSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -17,21 +17,28 @@ impl Animation for WieldAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "biped_large_wield")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (active_tool_kind, _second_tool_kind, velocity, global_time): Self::Dependency, + (active_tool_kind, _second_tool_kind, velocity, global_time, acc_vel): Self::Dependency, anim_time: f64, _rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); + let speed = Vec2::::from(velocity).magnitude(); - let lab = 0.55; - let test = (anim_time as f32 + 36.0 * PI).sin(); + let lab = 0.65 * s_a.tempo; //.65 let torso = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); + let speednorm = (speed / 12.0).powf(0.4); + let foothoril = (acc_vel * lab as f32 + PI * 1.45).sin() * speednorm; + let foothorir = (acc_vel * lab as f32 + PI * (0.45)).sin() * speednorm; + let footrotl = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 1.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 1.4).sin()); + let footrotr = + (((1.0) / (0.5 + (0.5) * ((acc_vel * lab as f32 + PI * 0.4).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 0.4).sin()); let slower = (anim_time as f32 * 1.0 + PI).sin(); let slow = (anim_time as f32 * 3.5 + PI).sin(); - let u_slow = (anim_time as f32 * 1.0 + PI).sin(); - let u_slowalt = (anim_time as f32 * 3.0 + PI).cos(); let tailmove = Vec2::new( ((global_time + anim_time) as f32 / 2.0) @@ -74,31 +81,12 @@ impl Animation for WieldAnimation { 0.0 }; - let foothoril = (((1.0) - / (0.4 + (0.6) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powi(2))) - .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()).powi(2))) - .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 handhoril = (anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin(); let handhorir = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin(); - let footrotl = (((5.0) - / (2.5 + (2.5) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.4).sin()); - - let footrotr = (((5.0) - / (1.0 + (4.0) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.4).sin()); - - let short = (anim_time as f32 * lab as f32 * 16.0).sin(); + let short = (acc_vel * lab as f32).sin() * speednorm; let shortalt = (anim_time as f32 * lab as f32 * 16.0 + PI / 2.0).sin(); @@ -107,61 +95,33 @@ impl Animation for WieldAnimation { } else { next.jaw.position = Vec3::new(0.0, s_a.jaw.0 - slower * 0.12, s_a.jaw.1 + slow * 0.2); - next.hand_l.position = - Vec3::new(-s_a.hand.0 - 7.0, s_a.hand.1 - 7.0, s_a.hand.2 + 10.0); - next.hand_l.orientation = Quaternion::rotation_x(0.57) * Quaternion::rotation_z(1.57); - - next.hand_r.position = Vec3::new(s_a.hand.0 - 7.0, s_a.hand.1 - 7.0, s_a.hand.2 + 10.0); - next.hand_r.orientation = Quaternion::rotation_x(0.57) * Quaternion::rotation_z(1.57); - next.hand_r.orientation = Quaternion::rotation_x(0.57) * Quaternion::rotation_z(1.57); - - next.control.position = Vec3::new(7.0, 9.0, -10.0); - next.control.orientation = Quaternion::rotation_x(test * 0.02) - * Quaternion::rotation_y(test * 0.02) - * Quaternion::rotation_z(test * 0.02); - - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); next.hold.scale = Vec3::one() * 0.0; - if velocity > 0.5 { - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1) * 1.02; - next.head.orientation = - Quaternion::rotation_z(short * -0.18) * Quaternion::rotation_x(-0.05); + next.main.position = Vec3::new(0.0, 0.0, 0.0); + next.main.orientation = Quaternion::rotation_x(0.0); - next.upper_torso.position = - Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1 + shortalt * -1.5); - next.upper_torso.orientation = Quaternion::rotation_z(short * 0.18); + next.hand_l.position = Vec3::new(0.0, 0.0, s_a.grip); + next.hand_r.position = Vec3::new(0.0, 0.0, s_a.grip); - next.lower_torso.position = Vec3::new(0.0, s_a.lower_torso.0, s_a.lower_torso.1); - next.lower_torso.orientation = - Quaternion::rotation_z(short * 0.15) * Quaternion::rotation_x(0.14); - - next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); - next.tail.orientation = Quaternion::rotation_z(0.0 + slow * 0.2 + tailmove.x) - * Quaternion::rotation_x(0.0); + next.hand_l.orientation = Quaternion::rotation_x(0.0); + next.hand_r.orientation = Quaternion::rotation_x(0.0); + if speed > 0.5 { next.shoulder_l.position = Vec3::new( -s_a.shoulder.0, - s_a.shoulder.1 + foothoril * -1.0, - s_a.shoulder.2, + s_a.shoulder.1, + s_a.shoulder.2 - foothorir * 1.0, ); - next.shoulder_l.orientation = Quaternion::rotation_x(0.5 + footrotl * -0.16) - * Quaternion::rotation_y(0.1) - * Quaternion::rotation_z(footrotl * 0.1); + next.shoulder_l.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotr * -0.2) * speednorm); next.shoulder_r.position = Vec3::new( s_a.shoulder.0, - s_a.shoulder.1 + foothorir * -1.0, - s_a.shoulder.2, + s_a.shoulder.1, + s_a.shoulder.2 - foothoril * 1.0, ); - next.shoulder_r.orientation = Quaternion::rotation_x(0.5 + footrotr * -0.16) - * Quaternion::rotation_y(-0.1) - * Quaternion::rotation_z(footrotr * -0.1); - - next.torso.position = Vec3::new(0.0, 0.0, 0.0) / 8.0; - next.torso.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(-0.25); + next.shoulder_r.orientation = + Quaternion::rotation_x(0.6 * speednorm + (footrotl * -0.2) * speednorm); } else { next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1) * 1.02; next.head.orientation = @@ -189,91 +149,87 @@ impl Animation for WieldAnimation { next.shoulder_l.position = Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); next.shoulder_l.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); + Quaternion::rotation_y(0.0) * Quaternion::rotation_x(0.3); next.shoulder_r.position = Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - - next.control.position = Vec3::new(7.0, 9.0, -10.0); - next.control.orientation = Quaternion::rotation_x(test * 0.02) - * Quaternion::rotation_y(test * 0.02) - * Quaternion::rotation_z(test * 0.02); + next.shoulder_r.orientation = + Quaternion::rotation_y(0.0) * Quaternion::rotation_x(0.3); } match active_tool_kind { - Some(ToolKind::Sword) => { - next.hand_l.position = Vec3::new(s_a.shl.0, s_a.shl.1, s_a.shl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.shl.3) * Quaternion::rotation_y(s_a.shl.4); - next.hand_r.position = Vec3::new(s_a.shr.0, s_a.shr.1, s_a.shr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.shr.3) * Quaternion::rotation_y(s_a.shr.4); - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); + Some(ToolKind::SwordSimple) => { + next.control_l.position = Vec3::new(-1.0, 1.0, 1.0); + next.control_r.position = Vec3::new(0.0, 2.0, -3.0); - next.control.position = Vec3::new(s_a.sc.0, s_a.sc.1, s_a.sc.2); - next.control.orientation = Quaternion::rotation_x(u_slow * 0.15) - * Quaternion::rotation_z(u_slowalt * 0.08); + next.control.position = Vec3::new( + -3.0, + 5.0 + s_a.grip / 1.2, + -4.0 + -s_a.grip / 2.0 + short * -1.5, + ); + + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.2); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.2) + * Quaternion::rotation_y(0.2) + * Quaternion::rotation_z(0.0); + + next.control.orientation = + Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(-0.1); }, - Some(ToolKind::Bow) => { - next.hand_l.position = Vec3::new(s_a.bhl.0, s_a.bhl.1, s_a.bhl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.bhl.3) - * Quaternion::rotation_y(s_a.bhl.4) - * Quaternion::rotation_z(s_a.bhl.5); - next.hand_r.position = Vec3::new(s_a.bhr.0, s_a.bhr.1, s_a.bhr.2); - next.hand_r.orientation = Quaternion::rotation_x(s_a.bhr.3) - * Quaternion::rotation_y(s_a.bhr.4) - * Quaternion::rotation_z(s_a.bhr.5); - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); + Some(ToolKind::BowSimple) => { + next.control_l.position = Vec3::new(-1.0, -2.0, -3.0); + next.control_r.position = Vec3::new(0.0, 4.0, 1.0); - next.hold.position = Vec3::new(0.0, -1.0, -15.2); - next.hold.orientation = Quaternion::rotation_x(-1.57); - next.hold.scale = Vec3::one() * 1.0; + next.control.position = Vec3::new( + -1.0, + 6.0 + s_a.grip / 1.2, + -5.0 + -s_a.grip / 2.0 + short * -1.5, + ); - next.control.position = Vec3::new(s_a.bc.0, s_a.bc.1, s_a.bc.2 - 5.0); - next.control.orientation = Quaternion::rotation_x(u_slow * 0.06) - * Quaternion::rotation_y(s_a.bc.4) - * Quaternion::rotation_z(s_a.bc.5 + u_slowalt * 0.1); + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.2); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.2) + * Quaternion::rotation_y(0.2) + * Quaternion::rotation_z(0.0); + + next.control.orientation = Quaternion::rotation_x(-0.2 + short * 0.2) + * Quaternion::rotation_y(1.0) + * Quaternion::rotation_z(-0.3); }, - Some(ToolKind::Hammer) => { - next.hand_l.position = Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2); - next.hand_l.orientation = Quaternion::rotation_x(s_a.hhl.3) - * Quaternion::rotation_y(s_a.hhl.4) - * Quaternion::rotation_z(s_a.hhl.5); + Some(ToolKind::HammerSimple) => { + next.control_l.position = Vec3::new(-1.0, 2.0, 12.0); + next.control_r.position = Vec3::new(1.0, 2.0, -2.0); - next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2); - next.hand_r.orientation = Quaternion::rotation_x(s_a.hhr.3) - * Quaternion::rotation_y(s_a.hhr.4) - * Quaternion::rotation_z(s_a.hhr.5); + next.control.position = + Vec3::new(4.0, 0.0 + s_a.grip / 1.0, -s_a.grip / 0.8 + short * -1.5); - next.control.position = Vec3::new(s_a.hc.0, s_a.hc.1, s_a.hc.2); - next.control.orientation = Quaternion::rotation_x(s_a.hc.3 + test * 0.02) - * Quaternion::rotation_y(s_a.hc.4 + test * 0.02) - * Quaternion::rotation_z(s_a.hc.5 + test * 0.02); + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.0); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.0 + 0.2) + * Quaternion::rotation_y(0.0) + * Quaternion::rotation_z(0.0); - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); + next.control.orientation = + Quaternion::rotation_x(-1.0 + short * 0.2) * Quaternion::rotation_y(-1.8); }, - Some(ToolKind::Staff) => { - next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); - next.hand_l.orientation = - Quaternion::rotation_x(s_a.sthl.3) * Quaternion::rotation_y(s_a.sthl.4); - next.hand_r.position = Vec3::new(s_a.sthr.0, s_a.sthr.1, s_a.sthr.2); - next.hand_r.orientation = - Quaternion::rotation_x(s_a.sthr.3) * Quaternion::rotation_y(s_a.sthr.4); + Some(ToolKind::StaffSimple) => { + next.control_l.position = Vec3::new(-1.0, 3.0, 12.0); + next.control_r.position = Vec3::new(1.0, 2.0, 2.0); - next.shoulder_r.position = - Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); - next.shoulder_r.orientation = - Quaternion::rotation_z(0.4) * Quaternion::rotation_x(1.0); + next.control.position = Vec3::new( + -3.0, + 3.0 + s_a.grip / 1.2, + -11.0 + -s_a.grip / 2.0 + short * -1.5, + ); - next.main.position = Vec3::new(0.0, 0.0, 0.0); - next.main.orientation = Quaternion::rotation_y(0.0); + next.control_l.orientation = + Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(-0.5); + next.control_r.orientation = Quaternion::rotation_x(PI / 2.5) + * Quaternion::rotation_y(0.5) + * Quaternion::rotation_z(0.0); - next.control.position = Vec3::new(s_a.stc.0, s_a.stc.1, s_a.stc.2); - 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.orientation = + Quaternion::rotation_x(-0.2 + short * 0.2) * Quaternion::rotation_y(-0.1); }, Some(ToolKind::Unique(UniqueKind::BeastClaws)) => { next.shoulder_l.position = @@ -288,7 +244,7 @@ impl Animation for WieldAnimation { next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2 + torso * 0.6); - if velocity < 0.5 { + if speed < 0.5 { next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + torso * 0.2) * 1.02; next.head.orientation = Quaternion::rotation_z(look.x * 0.6) diff --git a/voxygen/anim/src/biped_small/alpha.rs b/voxygen/anim/src/biped_small/alpha.rs index 46b9713af3..23e68e4276 100644 --- a/voxygen/anim/src/biped_small/alpha.rs +++ b/voxygen/anim/src/biped_small/alpha.rs @@ -29,7 +29,16 @@ impl Animation for AlphaAnimation { fn update_skeleton_inner( skeleton: &Self::Skeleton, - (velocity, _orientation, _last_ori, _global_time, _avg_vel, _acc_vel, stage_section, _timer): Self::Dependency, + ( + velocity, + _orientation, + _last_ori, + _global_time, + _avg_vel, + _acc_vel, + stage_section, + _timer, + ): Self::Dependency, anim_time: f64, _rate: &mut f32, s_a: &SkeletonAttr, diff --git a/voxygen/anim/src/character/alpha.rs b/voxygen/anim/src/character/alpha.rs index 3e22f7b6c6..15b5ed6ece 100644 --- a/voxygen/anim/src/character/alpha.rs +++ b/voxygen/anim/src/character/alpha.rs @@ -150,7 +150,8 @@ impl Animation for AlphaAnimation { }; next.main.position = Vec3::new(0.0, 0.0, 0.0); next.main.orientation = Quaternion::rotation_x(0.0); - next.hand_l.position = Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2); + next.hand_l.position = + Vec3::new(s_a.hhl.0, s_a.hhl.1, s_a.hhl.2 + movement2 * -7.0); next.hand_l.orientation = Quaternion::rotation_x(s_a.hhl.3) * Quaternion::rotation_y(s_a.hhl.4); next.hand_r.position = Vec3::new(s_a.hhr.0, s_a.hhr.1, s_a.hhr.2); @@ -169,15 +170,18 @@ impl Animation for AlphaAnimation { * (1.0 - movement3) * Quaternion::rotation_z(s_a.hc.5 + (movement2 * -0.5) * (1.0 - movement3)); next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_x( - (movement1 * 0.3 + movement2 * -0.5) * (1.0 - movement3), - ) * Quaternion::rotation_y(0.0) - * Quaternion::rotation_z( - (movement1 * 0.2 + movement2 * -0.5) * (1.0 - movement3), - ); - next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1); + next.head.orientation = + Quaternion::rotation_x((movement1 * 0.1 + movement2 * 0.3) * (1.0 - movement3)) + * Quaternion::rotation_z( + (movement1 * -0.2 + movement2 * 0.2) * (1.0 - movement3), + ); + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + movement2 * -2.0 * (1.0 - movement3), + ); next.chest.orientation = Quaternion::rotation_x( - (movement1 * 0.8 + movement2 * -1.2) * (1.0 - movement3), + (movement1 * 0.4 + movement2 * -0.7) * (1.0 - movement3), ) * Quaternion::rotation_y( (movement1 * 0.3 + movement2 * -0.4) * (1.0 - movement3), ) * Quaternion::rotation_z( diff --git a/voxygen/anim/src/character/mod.rs b/voxygen/anim/src/character/mod.rs index 3ca3521a24..c43b068fed 100644 --- a/voxygen/anim/src/character/mod.rs +++ b/voxygen/anim/src/character/mod.rs @@ -27,6 +27,7 @@ pub mod stand; pub mod stunned; pub mod swim; pub mod swimwield; +pub mod talk; pub mod wield; // Reexports @@ -39,7 +40,7 @@ pub use self::{ roll::RollAnimation, run::RunAnimation, shockwave::ShockwaveAnimation, shoot::ShootAnimation, sit::SitAnimation, sneak::SneakAnimation, spin::SpinAnimation, spinmelee::SpinMeleeAnimation, staggered::StaggeredAnimation, stand::StandAnimation, stunned::StunnedAnimation, - swim::SwimAnimation, swimwield::SwimWieldAnimation, wield::WieldAnimation, + swim::SwimAnimation, swimwield::SwimWieldAnimation, talk::TalkAnimation, wield::WieldAnimation, }; use super::{make_bone, vek::*, FigureBoneData, Skeleton}; use common::comp; diff --git a/voxygen/anim/src/character/talk.rs b/voxygen/anim/src/character/talk.rs new file mode 100644 index 0000000000..f8e47ec373 --- /dev/null +++ b/voxygen/anim/src/character/talk.rs @@ -0,0 +1,54 @@ +use super::{ + super::{vek::*, Animation}, + CharacterSkeleton, SkeletonAttr, +}; +use common::comp::item::ToolKind; +use std::f32::consts::PI; + +pub struct TalkAnimation; + +impl Animation for TalkAnimation { + type Dependency = (Option, Option, f32, f64); + type Skeleton = CharacterSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"character_talk\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "character_talk")] + #[allow(clippy::approx_constant)] // TODO: Pending review in #587 + fn update_skeleton_inner( + skeleton: &Self::Skeleton, + (_active_tool_kind, _second_tool_kind, _velocity, _global_time): Self::Dependency, + anim_time: f64, + rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let slowa = (anim_time as f32 * 6.0).sin(); + let slowb = (anim_time as f32 * 4.0 + PI / 2.0).sin(); + let slowc = (anim_time as f32 * 12.0 + PI / 2.0).sin(); + + next.head.orientation = Quaternion::rotation_x(slowc * 0.035); + next.hand_l.position = Vec3::new( + -s_a.hand.0 + 0.5 + slowb * 0.5, + s_a.hand.1 + 5.0 + slowc * 1.0, + s_a.hand.2 + 2.0 + slowa * 1.0, + ); + + next.hand_l.orientation = Quaternion::rotation_x(0.0); + + next.hand_r.position = Vec3::new( + s_a.hand.0 - 0.5 + slowb * 0.5, + s_a.hand.1 + 4.0 + slowc * -1.0, + s_a.hand.2 + 2.0 + slowa * 1.0, + ); + next.hand_l.orientation = Quaternion::rotation_y(-0.2 + slowb * 0.2 + slowa * 0.07) + * Quaternion::rotation_x(1.3 + slowa * 0.15); + next.hand_r.orientation = Quaternion::rotation_y(0.2 + slowa * -0.1 + slowb * 0.07) + * Quaternion::rotation_x(1.3 + slowb * -0.15 + slowc * 0.05); + + next + } +} diff --git a/voxygen/anim/src/quadruped_low/mod.rs b/voxygen/anim/src/quadruped_low/mod.rs index 11dc5becda..9e3bd5e17e 100644 --- a/voxygen/anim/src/quadruped_low/mod.rs +++ b/voxygen/anim/src/quadruped_low/mod.rs @@ -259,6 +259,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Pangolin, _) => (1.3), (Maneater, _) => (1.4), (Lavadrake, _) => (1.4), + (Basilisk, _) => (1.6), _ => (1.0), }, tempo: match (body.species, body.body_type) { @@ -271,6 +272,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Pangolin, _) => (1.15), (Maneater, _) => (0.9), (Lavadrake, _) => (1.1), + (Basilisk, _) => (0.8), _ => (1.0), }, } diff --git a/voxygen/anim/src/quadruped_low/run.rs b/voxygen/anim/src/quadruped_low/run.rs index b1d1851637..ab6c18e040 100644 --- a/voxygen/anim/src/quadruped_low/run.rs +++ b/voxygen/anim/src/quadruped_low/run.rs @@ -7,7 +7,7 @@ use std::f32::consts::PI; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (f32, Vec3, Vec3, f64, Vec3); + type Dependency = (f32, Vec3, Vec3, f64, Vec3, f32); type Skeleton = QuadrupedLowSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -16,46 +16,49 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_low_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (_velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, - anim_time: f64, + (velocity, orientation, last_ori, _global_time, avg_vel, acc_vel): Self::Dependency, + _anim_time: f64, _rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); + let speed = (Vec2::::from(velocity).magnitude()).min(15.0); + + let speednorm = (speed / 15.0).powf(0.25); let lab = 0.7 * s_a.tempo; - let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()).max(-0.7); + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()).max(-0.7) * speednorm; - let short = (((1.0) - / (0.72 + 0.28 * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.25).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.25).sin()); - let shortalt = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.25).sin(); + let short = (((1.0) / (0.72 + 0.28 * ((acc_vel * lab as f32 + PI * 0.25).sin()).powi(2))) + .sqrt()) + * ((acc_vel * lab as f32 + PI * 0.25).sin()) + * speednorm; + let shortalt = (acc_vel * lab as f32 + PI * 0.25).sin(); - let foothoril = (((1.0) - / (0.4 + (0.6) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.45).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.45).sin()); - let footvertl = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.0).sin(); + let foothoril = + (((1.0) / (0.4 + (0.6) * ((acc_vel * lab as f32 + PI * 1.45).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 1.45).sin()) + * speednorm; + let footvertl = (acc_vel * lab as f32 + PI * 0.0).sin() * speednorm; - let foothorir = (((1.0) - / (0.4 + (0.6) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.45).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.45).sin()); - let footvertr = (anim_time as f32 * 16.0 * lab as f32 + PI).sin(); + let foothorir = + (((1.0) / (0.4 + (0.6) * ((acc_vel * lab as f32 + PI * 0.45).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 0.45).sin()) + * speednorm; + let footvertr = (acc_vel * lab as f32 + PI).sin() * speednorm; //back feet - let foothorilb = (((1.0) - / (0.4 + (0.6) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.05).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 1.05).sin()); - let footvertlb = (anim_time as f32 * 16.0 * lab as f32 + PI * (-0.4)).sin(); + let foothorilb = + (((1.0) / (0.4 + (0.6) * ((acc_vel * lab as f32 + PI * 1.05).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 1.05).sin()) + * speednorm; + let footvertlb = (acc_vel * lab as f32 + PI * (-0.4)).sin() * speednorm; - let foothorirb = (((1.0) - / (0.4 + (0.6) * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.05).sin()).powi(2))) - .sqrt()) - * ((anim_time as f32 * 16.0 * lab as f32 + PI * 0.05).sin()); - let footvertrb = (anim_time as f32 * 16.0 * lab as f32 + PI * 0.6).sin(); + let foothorirb = + (((1.0) / (0.4 + (0.6) * ((acc_vel * lab as f32 + PI * 0.05).sin()).powi(2))).sqrt()) + * ((acc_vel * lab as f32 + PI * 0.05).sin()) + * speednorm; + let footvertrb = (acc_vel * lab as f32 + PI * 0.6).sin() * speednorm; let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -94,14 +97,14 @@ impl Animation for RunAnimation { s_a.tail_front.1 + s_a.lean.0 * 2.0, ); next.tail_front.orientation = - Quaternion::rotation_z(shortalt * 0.18 * s_a.lean.1 + tilt * 1.8) - * Quaternion::rotation_y(shortalt * 0.1) + Quaternion::rotation_z(shortalt * -0.18 * s_a.lean.1 + tilt * 1.8) + * Quaternion::rotation_y(shortalt * -0.1) * Quaternion::rotation_x(0.06 - s_a.lean.0 * 1.2 + x_tilt * 0.2); next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); next.tail_rear.orientation = - Quaternion::rotation_z(shortalt * 0.25 * s_a.lean.1 + tilt * 1.6) - * Quaternion::rotation_y(shortalt * 0.1) + Quaternion::rotation_z(shortalt * -0.25 * s_a.lean.1 + tilt * 1.6) + * Quaternion::rotation_y(shortalt * 0.08) * Quaternion::rotation_x(-0.04 + x_tilt * 0.5); next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1) * s_a.scaler / 11.0; @@ -112,20 +115,20 @@ impl Animation for RunAnimation { next.foot_fl.position = Vec3::new( -s_a.feet_f.0, s_a.feet_f.1 + foothoril * -2.0, - s_a.feet_f.2 + 1.0 + ((footvertl * -1.8).max(-0.0)), + s_a.feet_f.2 + 1.0 * speednorm + ((footvertl * -1.8).max(-0.0)), ); next.foot_fl.orientation = - Quaternion::rotation_x(-0.2 + footvertl * -0.45 * s_a.lean.1 - s_a.lean.0) + Quaternion::rotation_x(-0.2 * speednorm + footvertl * -0.45 * s_a.lean.1 - s_a.lean.0) * Quaternion::rotation_y(tilt * -1.0) * Quaternion::rotation_z(foothoril * 0.4 * s_a.lean.1 + tilt * -2.0); next.foot_fr.position = Vec3::new( s_a.feet_f.0, s_a.feet_f.1 + foothorir * -2.0, - s_a.feet_f.2 + 1.0 + ((footvertr * -1.8).max(-0.0)), + s_a.feet_f.2 + 1.0 * speednorm + ((footvertr * -1.8).max(-0.0)), ); next.foot_fr.orientation = - Quaternion::rotation_x(-0.2 + footvertr * -0.45 * s_a.lean.1 - s_a.lean.0) + Quaternion::rotation_x(-0.2 * speednorm + footvertr * -0.45 * s_a.lean.1 - s_a.lean.0) * Quaternion::rotation_y(tilt * -1.0) * Quaternion::rotation_z(foothorir * -0.4 * s_a.lean.1 + tilt * -2.0); @@ -134,18 +137,20 @@ impl Animation for RunAnimation { s_a.feet_b.1 + foothorilb * -1.0, s_a.feet_b.2 + ((footvertlb * -1.2).max(-0.0)), ); - next.foot_bl.orientation = Quaternion::rotation_x(-0.2 + footvertlb * -0.5 - s_a.lean.0) - * Quaternion::rotation_y(tilt * -1.0) - * Quaternion::rotation_z(foothorilb * 0.4 + tilt * -2.0); + next.foot_bl.orientation = + Quaternion::rotation_x(-0.2 * speednorm + footvertlb * -0.5 - s_a.lean.0) + * Quaternion::rotation_y(tilt * -1.0) + * Quaternion::rotation_z(foothorilb * 0.4 + tilt * -2.0); next.foot_br.position = Vec3::new( s_a.feet_b.0, s_a.feet_b.1 + foothorirb * -1.0, s_a.feet_b.2 + ((footvertrb * -1.2).max(-0.0)), ); - next.foot_br.orientation = Quaternion::rotation_x(-0.2 + footvertrb * -0.5 - s_a.lean.0) - * Quaternion::rotation_y(tilt * -1.0) - * Quaternion::rotation_z(foothorirb * -0.4 + tilt * -2.0); + next.foot_br.orientation = + Quaternion::rotation_x(-0.2 * speednorm + footvertrb * -0.5 - s_a.lean.0) + * Quaternion::rotation_y(tilt * -1.0) + * Quaternion::rotation_z(foothorirb * -0.4 + tilt * -2.0); next } diff --git a/voxygen/anim/src/quadruped_medium/mod.rs b/voxygen/anim/src/quadruped_medium/mod.rs index ee9ff1ec92..4234d19977 100644 --- a/voxygen/anim/src/quadruped_medium/mod.rs +++ b/voxygen/anim/src/quadruped_medium/mod.rs @@ -482,6 +482,10 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Catoblepas, _) => (1.3), (Roshwalr, _) => (1.2), (Barghest, _) => (1.3), + (Cattle, _) => (1.9), + (Highland, _) => (1.9), + (Bear, _) => (1.9), + (Yak, _) => (1.9), _ => (1.0), }, startangle: match (body.species, body.body_type) { @@ -515,6 +519,10 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Horse, _) => (0.85), (Barghest, _) => (0.95), (Darkhound, _) => (1.1), + (Cattle, _) => (0.8), + (Highland, _) => (0.8), + (Bear, _) => (0.8), + (Yak, _) => (0.8), _ => (1.0), }, spring: match (body.species, body.body_type) { diff --git a/voxygen/anim/src/quadruped_medium/run.rs b/voxygen/anim/src/quadruped_medium/run.rs index cfe718d469..cf4179e842 100644 --- a/voxygen/anim/src/quadruped_medium/run.rs +++ b/voxygen/anim/src/quadruped_medium/run.rs @@ -90,7 +90,7 @@ impl Animation for RunAnimation { } else { 0.0 } * 1.3; - let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()) * canceler; next.neck.scale = Vec3::one() * 1.02; next.jaw.scale = Vec3::one() * 1.02; diff --git a/voxygen/anim/src/quadruped_small/run.rs b/voxygen/anim/src/quadruped_small/run.rs index eb68728eb7..7662f62d9d 100644 --- a/voxygen/anim/src/quadruped_small/run.rs +++ b/voxygen/anim/src/quadruped_small/run.rs @@ -7,7 +7,7 @@ use std::f32::consts::PI; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency = (f32, Vec3, Vec3, f64, Vec3); + type Dependency = (f32, Vec3, Vec3, f64, Vec3, f32); type Skeleton = QuadrupedSmallSkeleton; #[cfg(feature = "use-dyn-lib")] @@ -16,24 +16,26 @@ impl Animation for RunAnimation { #[cfg_attr(feature = "be-dyn-lib", export_name = "quadruped_small_run")] fn update_skeleton_inner( skeleton: &Self::Skeleton, - (_velocity, orientation, last_ori, _global_time, avg_vel): Self::Dependency, - anim_time: f64, + (velocity, orientation, last_ori, _global_time, avg_vel, acc_vel): Self::Dependency, + _anim_time: f64, _rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let lab = 0.6; //6 + let lab = 0.8; //6 + let speed = (Vec2::::from(velocity).magnitude()).min(12.0); + let speednorm = (speed / 12.0).powf(0.4); let speedmult = s_a.tempo; - let short = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 1.0).sin(); - let shortalt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.5).sin(); + let short = (acc_vel * lab as f32 * speedmult + PI * 1.0).sin() * speednorm; + let shortalt = (acc_vel * lab as f32 * speedmult + PI * 0.5).sin() * speednorm; - let footvert = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.0).sin(); - let footvertt = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.4).sin(); + let footvert = (acc_vel * lab as f32 * speedmult + PI * 0.0).sin() * speednorm; + let footvertt = (acc_vel * lab as f32 * speedmult + PI * 0.4).sin() * speednorm; - let footvertf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.3).sin(); - let footverttf = (anim_time as f32 * 20.0 * lab as f32 * speedmult + PI * 0.7).sin(); + let footvertf = (acc_vel * lab as f32 * speedmult + PI * 0.3).sin() * speednorm; + let footverttf = (acc_vel * lab as f32 * speedmult + PI * 0.7).sin() * speednorm; let ori: Vec2 = Vec2::from(orientation); let last_ori = Vec2::from(last_ori); @@ -48,7 +50,7 @@ impl Animation for RunAnimation { } else { 0.0 } * 1.3; - let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()); + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()) * speednorm; next.leg_fl.scale = Vec3::one() * 1.02; next.leg_fr.scale = Vec3::one() * 1.02; @@ -63,7 +65,7 @@ impl Animation for RunAnimation { next.chest.position = Vec3::new( 0.0, s_a.chest.0, - s_a.chest.1 + 2.0 * s_a.spring + shortalt * 3.0 * s_a.spring, + s_a.chest.1 + 2.0 * speednorm * s_a.spring + shortalt * 3.0 * s_a.spring, ) / 11.0 * s_a.scaler; next.chest.orientation = Quaternion::rotation_x(short * 0.2 * s_a.spring + x_tilt) @@ -76,36 +78,40 @@ impl Animation for RunAnimation { s_a.feet_f.1 + footverttf * 3.0 * s_a.minimize, s_a.feet_f.2 + ((footvertf * -1.5).max(-1.0)), ); - next.leg_fl.orientation = Quaternion::rotation_x(0.2 + s_a.maximize * footverttf * 0.65) - * Quaternion::rotation_z(tilt * -0.5) - * Quaternion::rotation_y(tilt * 1.5); + next.leg_fl.orientation = + Quaternion::rotation_x(0.2 * speednorm + s_a.maximize * footverttf * 0.65) + * Quaternion::rotation_z(tilt * -0.5) + * Quaternion::rotation_y(tilt * 1.5); next.leg_fr.position = Vec3::new( s_a.feet_f.0, s_a.feet_f.1 + footvertt * 3.0 * s_a.minimize, s_a.feet_f.2 + ((footvert * -1.5).max(-1.0)), ); - next.leg_fr.orientation = Quaternion::rotation_x(0.2 + s_a.maximize * footvertt * 0.65) - * Quaternion::rotation_z(tilt * -0.5) - * Quaternion::rotation_y(tilt * 1.5); + next.leg_fr.orientation = + Quaternion::rotation_x(0.2 * speednorm + s_a.maximize * footvertt * 0.65) + * Quaternion::rotation_z(tilt * -0.5) + * Quaternion::rotation_y(tilt * 1.5); next.leg_bl.position = Vec3::new( -s_a.feet_b.0, s_a.feet_b.1 + footvertt * -1.4, s_a.feet_b.2 + ((footvert * 1.5).max(-1.0)), ); - next.leg_bl.orientation = Quaternion::rotation_x(-0.25 + s_a.maximize * footvertt * -0.8) - * Quaternion::rotation_y(tilt * 1.5) - * Quaternion::rotation_z(tilt * -1.5); + next.leg_bl.orientation = + Quaternion::rotation_x(-0.25 * speednorm + s_a.maximize * footvertt * -0.8) + * Quaternion::rotation_y(tilt * 1.5) + * Quaternion::rotation_z(tilt * -1.5); next.leg_br.position = Vec3::new( s_a.feet_b.0, s_a.feet_b.1 + footverttf * -1.4, s_a.feet_b.2 + ((footvertf * 1.5).max(-1.0)), ); - next.leg_br.orientation = Quaternion::rotation_x(-0.25 + s_a.maximize * footverttf * -0.8) - * Quaternion::rotation_y(tilt * 1.5) - * Quaternion::rotation_z(tilt * -1.5); + next.leg_br.orientation = + Quaternion::rotation_x(-0.25 * speednorm + s_a.maximize * footverttf * -0.8) + * Quaternion::rotation_y(tilt * 1.5) + * Quaternion::rotation_z(tilt * -1.5); next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); next.tail.orientation = Quaternion::rotation_x(short * 0.2 + x_tilt) diff --git a/voxygen/src/hud/util.rs b/voxygen/src/hud/util.rs index 4295469fd2..8f3981e3a5 100644 --- a/voxygen/src/hud/util.rs +++ b/voxygen/src/hud/util.rs @@ -154,6 +154,10 @@ fn tool_desc(tool: &Tool, components: &[Item], msm: &MaterialStatManifest, desc: ToolKind::Sceptre => "Sceptre", ToolKind::Shield => "Shield", ToolKind::Spear => "Spear", + ToolKind::HammerSimple => "HammerSimple", + ToolKind::SwordSimple => "SwordSimple", + ToolKind::StaffSimple => "StaffSimple", + ToolKind::BowSimple => "BowSimple", ToolKind::Unique(_) => "Unique", ToolKind::Debug => "Debug", ToolKind::Farming => "Farming Tool", diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index 84dd8001ad..6dda5b6c69 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -1219,7 +1219,7 @@ impl QuadrupedSmallLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.left_front.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.left_front.lateral.0); (lateral, Vec3::from(spec.left_front.offset)) } @@ -1251,7 +1251,7 @@ impl QuadrupedSmallLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.left_back.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.left_back.lateral.0); (lateral, Vec3::from(spec.left_back.offset)) } @@ -1771,7 +1771,7 @@ impl BirdMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.wing_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.wing_l.lateral.0); (lateral, Vec3::from(spec.wing_l.offset)) } @@ -1803,7 +1803,7 @@ impl BirdMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.foot_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.foot_l.lateral.0); (lateral, Vec3::from(spec.foot_l.offset)) } @@ -2052,7 +2052,7 @@ impl TheropodLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.hand_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.hand_l.lateral.0); (lateral, Vec3::from(spec.hand_l.offset)) } @@ -2084,7 +2084,7 @@ impl TheropodLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.leg_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.leg_l.lateral.0); (lateral, Vec3::from(spec.leg_l.offset)) } @@ -2116,7 +2116,7 @@ impl TheropodLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.foot_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.foot_l.lateral.0); (lateral, Vec3::from(spec.foot_l.offset)) } @@ -2310,7 +2310,7 @@ impl FishMediumLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.fin_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.fin_l.lateral.0); (lateral, Vec3::from(spec.fin_l.offset)) } @@ -2445,7 +2445,7 @@ impl FishSmallLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.fin_l.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.fin_l.lateral.0); (lateral, Vec3::from(spec.fin_l.offset)) } @@ -3170,7 +3170,6 @@ struct SidedBLCentralVoxSpec { torso_upper: BipedLargeCentralSubSpec, torso_lower: BipedLargeCentralSubSpec, tail: BipedLargeCentralSubSpec, - main: BipedLargeCentralSubSpec, second: BipedLargeCentralSubSpec, } #[derive(Deserialize)] @@ -3198,14 +3197,29 @@ struct BipedLargeLateralSubSpec { offset: [f32; 3], // Should be relative to initial origin lateral: VoxSimple, } - +#[derive(Deserialize)] +struct BipedLargeWeaponSpec(HashMap); make_vox_spec!( biped_large::Body, struct BipedLargeSpec { central: BipedLargeCentralSpec = "voxygen.voxel.biped_large_central_manifest", lateral: BipedLargeLateralSpec = "voxygen.voxel.biped_large_lateral_manifest", + weapon: BipedLargeWeaponSpec = "voxygen.voxel.biped_large_weapon_manifest", }, - |FigureKey { body, .. }, spec| { + |FigureKey { body, extra }, spec| { + const DEFAULT_LOADOUT: super::cache::CharacterCacheKey = super::cache::CharacterCacheKey { + third_person: None, + tool: None, + lantern: None, + glider: None, + hand: None, + foot: None, + }; + + // TODO: This is bad code, maybe this method should return Option<_> + let loadout = extra.as_deref().unwrap_or(&DEFAULT_LOADOUT); + //let third_person = loadout.third_person.as_ref(); + let tool = loadout.tool.as_ref(); [ Some(spec.central.read().0.mesh_head( body.species, @@ -3227,10 +3241,12 @@ make_vox_spec!( body.species, body.body_type, )), - Some(spec.central.read().0.mesh_main( - body.species, - body.body_type, - )), + tool.and_then(|tool| tool.active.as_ref()).map(|tool| { + spec.weapon.read().0.mesh_main( + tool, + false, + ) + }), Some(spec.central.read().0.mesh_second( body.species, body.body_type, @@ -3353,22 +3369,6 @@ impl BipedLargeCentralSpec { (central, Vec3::from(spec.tail.offset)) } - fn mesh_main(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { - let spec = match self.0.get(&(species, body_type)) { - Some(spec) => spec, - None => { - error!( - "No main weapon 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.main.central.0); - - (central, Vec3::from(spec.main.offset)) - } - fn mesh_second(&self, species: BLSpecies, body_type: BLBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, @@ -3514,6 +3514,35 @@ impl BipedLargeLateralSpec { (lateral, Vec3::from(spec.foot_r.offset)) } } +impl BipedLargeWeaponSpec { + fn mesh_main(&self, item_definition_id: &str, flipped: bool) -> BoneMeshes { + let spec = match self.0.get(item_definition_id) { + Some(spec) => spec, + None => { + error!(?item_definition_id, "No tool/weapon specification exists"); + return load_mesh("not_found", Vec3::new(-1.5, -1.5, -7.0)); + }, + }; + + let tool_kind_segment = if flipped { + graceful_load_segment_flipped(&spec.vox_spec.0) + } else { + graceful_load_segment(&spec.vox_spec.0) + }; + + let offset = Vec3::new( + if flipped { + 0.0 - spec.vox_spec.1[0] - (tool_kind_segment.sz.x as f32) + } else { + spec.vox_spec.1[0] + }, + spec.vox_spec.1[1], + spec.vox_spec.1[2], + ); + + (tool_kind_segment, offset) + } +} //// #[derive(Deserialize)] struct GolemCentralSpec(HashMap<(GSpecies, GBodyType), SidedGCentralVoxSpec>); @@ -4013,7 +4042,7 @@ impl QuadrupedLowLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.front_left.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.front_left.lateral.0); (lateral, Vec3::from(spec.front_left.offset)) } @@ -4045,7 +4074,7 @@ impl QuadrupedLowLateralSpec { return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.back_left.lateral.0); + let lateral = graceful_load_segment_flipped(&spec.back_left.lateral.0); (lateral, Vec3::from(spec.back_left.offset)) } diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index 0f723bcd5c..89caf22f31 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -53,7 +53,7 @@ use treeculler::{BVol, BoundingSphere}; use vek::*; const DAMAGE_FADE_COEFFICIENT: f64 = 15.0; -const MOVING_THRESHOLD: f32 = 0.7; +const MOVING_THRESHOLD: f32 = 0.4; const MOVING_THRESHOLD_SQR: f32 = MOVING_THRESHOLD * MOVING_THRESHOLD; /// camera data, figure LOD render distance. @@ -1345,6 +1345,13 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::Talk => anim::character::TalkAnimation::update_skeleton( + &target_base, + (active_tool_kind, second_tool_kind, vel.0.magnitude(), time), + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), CharacterState::Wielding { .. } => { if physics.in_liquid.is_some() { anim::character::SwimWieldAnimation::update_skeleton( @@ -1517,6 +1524,8 @@ impl FigureMgr { state.last_ori * anim::vek::Vec3::::unit_y(), time, state.avg_vel, + state.acc_vel, + ), state.state_time, &mut state_animation_rate, @@ -1533,6 +1542,8 @@ impl FigureMgr { state.last_ori * anim::vek::Vec3::::unit_y(), time, state.avg_vel, + state.acc_vel, + ), state.state_time, &mut state_animation_rate, @@ -2047,6 +2058,8 @@ impl FigureMgr { state.last_ori * anim::vek::Vec3::::unit_y(), time, state.avg_vel, + state.acc_vel, + ), state.state_time, &mut state_animation_rate, @@ -2062,6 +2075,8 @@ impl FigureMgr { state.last_ori * anim::vek::Vec3::::unit_y(), time, state.avg_vel, + state.acc_vel, + ), state.state_time, &mut state_animation_rate, @@ -3217,12 +3232,13 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, - vel.0.magnitude(), + vel.0, // TODO: Update to use the quaternion. ori * anim::vek::Vec3::::unit_y(), state.last_ori * anim::vek::Vec3::::unit_y(), time, state.avg_vel, + state.acc_vel, ), state.state_time, &mut state_animation_rate, @@ -3257,7 +3273,13 @@ impl FigureMgr { CharacterState::Wielding { .. } => { anim::biped_large::WieldAnimation::update_skeleton( &target_base, - (active_tool_kind, second_tool_kind, vel.0.magnitude(), time), + ( + active_tool_kind, + second_tool_kind, + vel.0, + time, + state.acc_vel, + ), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -3269,9 +3291,10 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, - vel.0.magnitude(), + vel.0, time, None, + state.acc_vel, ), state.state_time, &mut state_animation_rate, @@ -3297,12 +3320,13 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, - vel.0.magnitude(), + vel.0, // TODO: Update to use the quaternion. ori * anim::vek::Vec3::::unit_y(), state.last_ori * anim::vek::Vec3::::unit_y(), time, Some(s.stage_section), + state.acc_vel, ), stage_progress, &mut state_animation_rate, @@ -3328,12 +3352,13 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, - vel.0.magnitude(), + vel.0, // TODO: Update to use the quaternion. ori * anim::vek::Vec3::::unit_y(), state.last_ori * anim::vek::Vec3::::unit_y(), time, Some(s.stage_section), + state.acc_vel, ), stage_progress, &mut state_animation_rate, @@ -3400,9 +3425,10 @@ impl FigureMgr { ( active_tool_kind, second_tool_kind, - vel.0.magnitude(), + vel.0, time, Some(s.stage_section), + state.acc_vel, ), stage_progress, &mut state_animation_rate,