From 64690279afe775e4822b5ffcb47895bc3014673a Mon Sep 17 00:00:00 2001 From: Justin Shipsey Date: Sun, 26 Jan 2020 00:22:48 +0000 Subject: [PATCH] new mobs alligators --- CHANGELOG.md | 3 + assets/common/npc_names.json | 9 + .../voxel/biped_large_center_manifest.ron | 30 + .../voxel/biped_large_lateral_manifest.ron | 70 + .../voxel/bird_medium_center_manifest.ron | 114 ++ .../voxel/bird_medium_lateral_manifest.ron | 146 +++ .../voxygen/voxel/critter_center_manifest.ron | 266 ++++ .../voxel/npc/alligator/female/foot_lb.vox | 3 + .../voxel/npc/alligator/female/foot_lf.vox | 3 + .../voxel/npc/alligator/female/foot_rb.vox | 3 + .../voxel/npc/alligator/female/foot_rf.vox | 3 + .../voxel/npc/alligator/female/head_lower.vox | 3 + .../voxel/npc/alligator/female/head_upper.vox | 3 + .../voxel/npc/alligator/female/jaw.vox | 3 + .../voxel/npc/alligator/female/tail.vox | 3 + .../voxel/npc/alligator/female/torso_back.vox | 3 + .../npc/alligator/female/torso_front.vox | 3 + .../voxel/npc/alligator/male/foot_lb.vox | 3 + .../voxel/npc/alligator/male/foot_lf.vox | 3 + .../voxel/npc/alligator/male/foot_rb.vox | 3 + .../voxel/npc/alligator/male/foot_rf.vox | 3 + .../voxel/npc/alligator/male/head_lower.vox | 3 + .../voxel/npc/alligator/male/head_upper.vox | 3 + .../voxygen/voxel/npc/alligator/male/jaw.vox | 3 + .../voxygen/voxel/npc/alligator/male/tail.vox | 3 + .../voxel/npc/alligator/male/torso_back.vox | 3 + .../voxel/npc/alligator/male/torso_front.vox | 3 + .../voxel/npc/axolotl/female/chest.vox | 3 + .../voxel/npc/axolotl/female/feet_b.vox | 3 + .../voxel/npc/axolotl/female/feet_f.vox | 3 + .../voxygen/voxel/npc/axolotl/female/head.vox | 3 + .../voxygen/voxel/npc/axolotl/female/tail.vox | 3 + .../voxygen/voxel/npc/axolotl/male/chest.vox | 3 + .../voxygen/voxel/npc/axolotl/male/feet_b.vox | 3 + .../voxygen/voxel/npc/axolotl/male/feet_f.vox | 3 + .../voxygen/voxel/npc/axolotl/male/head.vox | 3 + .../voxygen/voxel/npc/axolotl/male/tail.vox | 3 + .../voxygen/voxel/npc/batfox/female/chest.vox | 3 + .../voxel/npc/batfox/female/foot_bl.vox | 3 + .../voxel/npc/batfox/female/foot_br.vox | 3 + .../voxel/npc/batfox/female/foot_fl.vox | 3 + .../voxel/npc/batfox/female/foot_fr.vox | 3 + .../voxygen/voxel/npc/batfox/female/head.vox | 3 + .../voxygen/voxel/npc/batfox/male/chest.vox | 3 + .../voxygen/voxel/npc/batfox/male/foot_bl.vox | 3 + .../voxygen/voxel/npc/batfox/male/foot_br.vox | 3 + .../voxygen/voxel/npc/batfox/male/foot_fl.vox | 3 + .../voxygen/voxel/npc/batfox/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/batfox/male/head.vox | 3 + .../voxygen/voxel/npc/boar/female/chest.vox | 3 + .../voxygen/voxel/npc/boar/female/foot_bl.vox | 3 + .../voxygen/voxel/npc/boar/female/foot_br.vox | 3 + .../voxygen/voxel/npc/boar/female/foot_fl.vox | 3 + .../voxygen/voxel/npc/boar/female/foot_fr.vox | 3 + assets/voxygen/voxel/npc/boar/female/head.vox | 3 + assets/voxygen/voxel/npc/boar/male/chest.vox | 3 + .../voxygen/voxel/npc/boar/male/foot_bl.vox | 3 + .../voxygen/voxel/npc/boar/male/foot_br.vox | 3 + .../voxygen/voxel/npc/boar/male/foot_fl.vox | 3 + .../voxygen/voxel/npc/boar/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/boar/male/head.vox | 3 + assets/voxygen/voxel/npc/cat/female/chest.vox | 3 + .../voxygen/voxel/npc/cat/female/foot_bl.vox | 3 + .../voxygen/voxel/npc/cat/female/foot_br.vox | 3 + .../voxygen/voxel/npc/cat/female/foot_fl.vox | 3 + .../voxygen/voxel/npc/cat/female/foot_fr.vox | 3 + assets/voxygen/voxel/npc/cat/female/head.vox | 3 + assets/voxygen/voxel/npc/cat/male/chest.vox | 3 + assets/voxygen/voxel/npc/cat/male/foot_bl.vox | 3 + assets/voxygen/voxel/npc/cat/male/foot_br.vox | 3 + assets/voxygen/voxel/npc/cat/male/foot_fl.vox | 3 + assets/voxygen/voxel/npc/cat/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/cat/male/head.vox | 3 + .../voxygen/voxel/npc/chicken/female/head.vox | 3 + .../voxel/npc/chicken/female/leg_l.vox | 3 + .../voxel/npc/chicken/female/leg_r.vox | 3 + .../voxygen/voxel/npc/chicken/female/tail.vox | 3 + .../voxel/npc/chicken/female/torso.vox | 3 + .../voxygen/voxel/npc/chicken/female/wing.vox | 3 + .../voxygen/voxel/npc/chicken/male/head.vox | 3 + .../voxygen/voxel/npc/chicken/male/leg_l.vox | 3 + .../voxygen/voxel/npc/chicken/male/leg_r.vox | 3 + .../voxygen/voxel/npc/chicken/male/tail.vox | 3 + .../voxygen/voxel/npc/chicken/male/torso.vox | 3 + .../voxygen/voxel/npc/chicken/male/wing.vox | 3 + .../voxel/npc/dodarock/female/chest.vox | 3 + .../voxel/npc/dodarock/female/foot_bl.vox | 3 + .../voxel/npc/dodarock/female/foot_br.vox | 3 + .../voxel/npc/dodarock/female/foot_fl.vox | 3 + .../voxel/npc/dodarock/female/foot_fr.vox | 3 + .../voxel/npc/dodarock/female/head.vox | 3 + .../voxygen/voxel/npc/dodarock/male/chest.vox | 3 + .../voxel/npc/dodarock/male/foot_bl.vox | 3 + .../voxel/npc/dodarock/male/foot_br.vox | 3 + .../voxel/npc/dodarock/male/foot_fl.vox | 3 + .../voxel/npc/dodarock/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/dodarock/male/head.vox | 3 + assets/voxygen/voxel/npc/duck/female/head.vox | 3 + .../voxygen/voxel/npc/duck/female/leg_l.vox | 3 + .../voxygen/voxel/npc/duck/female/leg_r.vox | 3 + assets/voxygen/voxel/npc/duck/female/tail.vox | 3 + .../voxygen/voxel/npc/duck/female/torso.vox | 3 + assets/voxygen/voxel/npc/duck/female/wing.vox | 3 + assets/voxygen/voxel/npc/duck/male/head.vox | 3 + assets/voxygen/voxel/npc/duck/male/leg_l.vox | 3 + assets/voxygen/voxel/npc/duck/male/leg_r.vox | 3 + .../voxel/npc/{duck_m => duck/male}/tail.vox | 0 assets/voxygen/voxel/npc/duck/male/torso.vox | 3 + assets/voxygen/voxel/npc/duck/male/wing.vox | 3 + assets/voxygen/voxel/npc/duck_m/body.vox | 3 - assets/voxygen/voxel/npc/duck_m/head.vox | 3 - assets/voxygen/voxel/npc/duck_m/leg_l.vox | 3 - assets/voxygen/voxel/npc/duck_m/leg_r.vox | 3 - assets/voxygen/voxel/npc/duck_m/wing.vox | 3 - assets/voxygen/voxel/npc/fox/female/chest.vox | 3 + .../voxygen/voxel/npc/fox/female/foot_bl.vox | 3 + .../voxygen/voxel/npc/fox/female/foot_br.vox | 3 + .../voxygen/voxel/npc/fox/female/foot_fl.vox | 3 + .../voxygen/voxel/npc/fox/female/foot_fr.vox | 3 + assets/voxygen/voxel/npc/fox/female/head.vox | 3 + assets/voxygen/voxel/npc/fox/male/chest.vox | 3 + assets/voxygen/voxel/npc/fox/male/foot_bl.vox | 3 + assets/voxygen/voxel/npc/fox/male/foot_br.vox | 3 + assets/voxygen/voxel/npc/fox/male/foot_fl.vox | 3 + assets/voxygen/voxel/npc/fox/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/fox/male/head.vox | 3 + .../voxel/npc/fungome/female/chest.vox | 3 + .../voxel/npc/fungome/female/feet_b.vox | 3 + .../voxel/npc/fungome/female/feet_f.vox | 3 + .../voxygen/voxel/npc/fungome/female/head.vox | 3 + .../voxygen/voxel/npc/fungome/female/tail.vox | 3 + .../voxygen/voxel/npc/fungome/male/chest.vox | 3 + .../voxygen/voxel/npc/fungome/male/feet_b.vox | 3 + .../voxygen/voxel/npc/fungome/male/feet_f.vox | 3 + .../voxygen/voxel/npc/fungome/male/head.vox | 3 + .../voxygen/voxel/npc/fungome/male/tail.vox | 3 + .../voxygen/voxel/npc/gecko/female/chest.vox | 3 + .../voxygen/voxel/npc/gecko/female/feet_b.vox | 3 + .../voxygen/voxel/npc/gecko/female/feet_f.vox | 3 + .../voxygen/voxel/npc/gecko/female/head.vox | 3 + .../voxygen/voxel/npc/gecko/female/tail.vox | 3 + assets/voxygen/voxel/npc/gecko/male/chest.vox | 3 + .../voxygen/voxel/npc/gecko/male/feet_b.vox | 3 + .../voxygen/voxel/npc/gecko/male/feet_f.vox | 3 + assets/voxygen/voxel/npc/gecko/male/head.vox | 3 + assets/voxygen/voxel/npc/gecko/male/tail.vox | 3 + .../voxygen/voxel/npc/giant/female/foot_l.vox | 3 + .../voxygen/voxel/npc/giant/female/foot_r.vox | 3 + .../voxygen/voxel/npc/giant/female/hand_l.vox | 3 + .../voxygen/voxel/npc/giant/female/hand_r.vox | 3 + .../voxygen/voxel/npc/giant/female/head.vox | 3 + .../voxygen/voxel/npc/giant/female/leg_l.vox | 3 + .../voxygen/voxel/npc/giant/female/leg_r.vox | 3 + .../voxel/npc/giant/female/shoulder_l.vox | 3 + .../voxel/npc/giant/female/shoulder_r.vox | 3 + .../voxel/npc/giant/female/torso_lower.vox | 3 + .../voxel/npc/giant/female/torso_upper.vox | 3 + .../voxygen/voxel/npc/giant/male/foot_l.vox | 3 + .../voxygen/voxel/npc/giant/male/foot_r.vox | 3 + .../voxygen/voxel/npc/giant/male/hand_l.vox | 3 + .../voxygen/voxel/npc/giant/male/hand_r.vox | 3 + assets/voxygen/voxel/npc/giant/male/head.vox | 3 + assets/voxygen/voxel/npc/giant/male/leg_l.vox | 3 + assets/voxygen/voxel/npc/giant/male/leg_r.vox | 3 + .../voxel/npc/giant/male/shoulder_l.vox | 3 + .../voxel/npc/giant/male/shoulder_r.vox | 3 + .../voxel/npc/giant/male/torso_lower.vox | 3 + .../voxel/npc/giant/male/torso_upper.vox | 3 + .../voxygen/voxel/npc/goose/female/head.vox | 3 + .../voxygen/voxel/npc/goose/female/leg_l.vox | 3 + .../voxygen/voxel/npc/goose/female/leg_r.vox | 3 + .../voxygen/voxel/npc/goose/female/tail.vox | 3 + .../voxygen/voxel/npc/goose/female/torso.vox | 3 + .../voxygen/voxel/npc/goose/female/wing.vox | 3 + assets/voxygen/voxel/npc/goose/male/head.vox | 3 + assets/voxygen/voxel/npc/goose/male/leg_l.vox | 3 + assets/voxygen/voxel/npc/goose/male/leg_r.vox | 3 + assets/voxygen/voxel/npc/goose/male/tail.vox | 3 + assets/voxygen/voxel/npc/goose/male/torso.vox | 3 + assets/voxygen/voxel/npc/goose/male/wing.vox | 3 + .../voxel/npc/holladon/female/chest.vox | 3 + .../voxel/npc/holladon/female/foot_bl.vox | 3 + .../voxel/npc/holladon/female/foot_br.vox | 3 + .../voxel/npc/holladon/female/foot_fl.vox | 3 + .../voxel/npc/holladon/female/foot_fr.vox | 3 + .../voxel/npc/holladon/female/head.vox | 3 + .../voxygen/voxel/npc/holladon/male/chest.vox | 3 + .../voxel/npc/holladon/male/foot_bl.vox | 3 + .../voxel/npc/holladon/male/foot_br.vox | 3 + .../voxel/npc/holladon/male/foot_fl.vox | 3 + .../voxel/npc/holladon/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/holladon/male/head.vox | 3 + .../voxel/npc/jackalope/female/chest.vox | 3 + .../voxel/npc/jackalope/female/foot_bl.vox | 3 + .../voxel/npc/jackalope/female/foot_br.vox | 3 + .../voxel/npc/jackalope/female/foot_fl.vox | 3 + .../voxel/npc/jackalope/female/foot_fr.vox | 3 + .../voxel/npc/jackalope/female/head.vox | 3 + .../voxel/npc/jackalope/male/chest.vox | 3 + .../voxel/npc/jackalope/male/foot_bl.vox | 3 + .../voxel/npc/jackalope/male/foot_br.vox | 3 + .../voxel/npc/jackalope/male/foot_fl.vox | 3 + .../voxel/npc/jackalope/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/jackalope/male/head.vox | 3 + assets/voxygen/voxel/npc/knight/foot_l.vox | 3 - assets/voxygen/voxel/npc/knight/foot_r.vox | 3 - assets/voxygen/voxel/npc/knight/hand_l.vox | 3 - assets/voxygen/voxel/npc/knight/hand_r.vox | 3 - assets/voxygen/voxel/npc/knight/head.vox | 3 - assets/voxygen/voxel/npc/knight/leg_l.vox | 3 - assets/voxygen/voxel/npc/knight/leg_r.vox | 3 - .../voxygen/voxel/npc/knight/lower_torso.vox | 3 - .../voxygen/voxel/npc/knight/shoulder_l.vox | 3 - .../voxygen/voxel/npc/knight/shoulder_r.vox | 3 - .../voxygen/voxel/npc/knight/torso_upper.vox | 3 - assets/voxygen/voxel/npc/lion/female/ears.vox | 3 + .../voxygen/voxel/npc/lion/female/foot_lb.vox | 3 + .../voxygen/voxel/npc/lion/female/foot_lf.vox | 3 + .../voxygen/voxel/npc/lion/female/foot_rb.vox | 3 + .../voxygen/voxel/npc/lion/female/foot_rf.vox | 3 + .../voxel/npc/lion/female/head_lower.vox | 3 + .../voxel/npc/lion/female/head_upper.vox | 3 + assets/voxygen/voxel/npc/lion/female/jaw.vox | 3 + assets/voxygen/voxel/npc/lion/female/tail.vox | 3 + .../voxel/npc/lion/female/torso_back.vox | 3 + .../voxel/npc/lion/female/torso_front.vox | 3 + assets/voxygen/voxel/npc/lion/male/ears.vox | 3 + .../voxygen/voxel/npc/lion/male/foot_lb.vox | 3 + .../voxygen/voxel/npc/lion/male/foot_lf.vox | 3 + .../voxygen/voxel/npc/lion/male/foot_rb.vox | 3 + .../voxygen/voxel/npc/lion/male/foot_rf.vox | 3 + .../voxel/npc/lion/male/head_lower.vox | 3 + .../voxel/npc/lion/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/lion/male/jaw.vox | 3 + assets/voxygen/voxel/npc/lion/male/tail.vox | 3 + .../voxel/npc/lion/male/torso_back.vox | 3 + .../voxel/npc/lion/male/torso_front.vox | 3 + .../voxel/npc/monitor/female/foot_lb.vox | 3 + .../voxel/npc/monitor/female/foot_lf.vox | 3 + .../voxel/npc/monitor/female/foot_rb.vox | 3 + .../voxel/npc/monitor/female/foot_rf.vox | 3 + .../voxel/npc/monitor/female/head_lower.vox | 3 + .../voxel/npc/monitor/female/head_upper.vox | 3 + .../voxygen/voxel/npc/monitor/female/jaw.vox | 3 + .../voxygen/voxel/npc/monitor/female/tail.vox | 3 + .../voxel/npc/monitor/female/torso_back.vox | 3 + .../voxel/npc/monitor/female/torso_front.vox | 3 + .../voxel/npc/monitor/male/foot_lb.vox | 3 + .../voxel/npc/monitor/male/foot_lf.vox | 3 + .../voxel/npc/monitor/male/foot_rb.vox | 3 + .../voxel/npc/monitor/male/foot_rf.vox | 3 + .../voxel/npc/monitor/male/head_lower.vox | 3 + .../voxel/npc/monitor/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/monitor/male/jaw.vox | 3 + .../voxygen/voxel/npc/monitor/male/tail.vox | 3 + .../voxel/npc/monitor/male/torso_back.vox | 3 + .../voxel/npc/monitor/male/torso_front.vox | 3 + .../voxel/npc/peacock/female/chest.vox | 3 + .../voxygen/voxel/npc/peacock/female/head.vox | 3 + .../voxel/npc/peacock/female/leg_l.vox | 3 + .../voxel/npc/peacock/female/leg_r.vox | 3 + .../voxygen/voxel/npc/peacock/female/tail.vox | 3 + .../voxel/npc/peacock/female/torso.vox | 3 + .../voxel/npc/peacock/female/wing_l.vox | 3 + .../voxel/npc/peacock/female/wing_r.vox | 3 + .../voxygen/voxel/npc/peacock/male/chest.vox | 3 + .../voxygen/voxel/npc/peacock/male/head.vox | 3 + .../voxygen/voxel/npc/peacock/male/leg_l.vox | 3 + .../voxygen/voxel/npc/peacock/male/leg_r.vox | 3 + .../voxygen/voxel/npc/peacock/male/tail.vox | 3 + .../voxygen/voxel/npc/peacock/male/torso.vox | 3 + .../voxygen/voxel/npc/peacock/male/wing_l.vox | 3 + .../voxygen/voxel/npc/peacock/male/wing_r.vox | 3 + assets/voxygen/voxel/npc/pig/female/chest.vox | 3 + .../voxygen/voxel/npc/pig/female/foot_l.vox | 3 + .../voxygen/voxel/npc/pig/female/foot_r.vox | 3 + assets/voxygen/voxel/npc/pig/female/head.vox | 3 + .../npc/{pig_purple => pig/male}/chest.vox | 0 .../leg_l.vox => pig/male/foot_l.vox} | 0 .../leg_r.vox => pig/male/foot_r.vox} | 0 .../npc/{pig_purple => pig/male}/head.vox | 0 .../voxygen/voxel/npc/quokka/female/chest.vox | 3 + .../voxel/npc/quokka/female/foot_bl.vox | 3 + .../voxel/npc/quokka/female/foot_br.vox | 3 + .../voxel/npc/quokka/female/foot_fl.vox | 3 + .../voxel/npc/quokka/female/foot_fr.vox | 3 + .../voxygen/voxel/npc/quokka/female/head.vox | 3 + .../voxygen/voxel/npc/quokka/male/chest.vox | 3 + .../voxygen/voxel/npc/quokka/male/foot_bl.vox | 3 + .../voxygen/voxel/npc/quokka/male/foot_br.vox | 3 + .../voxygen/voxel/npc/quokka/male/foot_fl.vox | 3 + .../voxygen/voxel/npc/quokka/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/quokka/male/head.vox | 3 + .../voxel/npc/raccoon/female/chest.vox | 3 + .../voxel/npc/raccoon/female/foot_bl.vox | 3 + .../voxel/npc/raccoon/female/foot_br.vox | 3 + .../voxel/npc/raccoon/female/foot_fl.vox | 3 + .../voxel/npc/raccoon/female/foot_fr.vox | 3 + .../voxygen/voxel/npc/raccoon/female/head.vox | 3 + .../voxygen/voxel/npc/raccoon/male/chest.vox | 3 + .../voxel/npc/raccoon/male/foot_bl.vox | 3 + .../voxel/npc/raccoon/male/foot_br.vox | 3 + .../voxel/npc/raccoon/male/foot_fl.vox | 3 + .../voxel/npc/raccoon/male/foot_fr.vox | 3 + .../voxygen/voxel/npc/raccoon/male/head.vox | 3 + assets/voxygen/voxel/npc/rat/female/chest.vox | 3 + .../voxygen/voxel/npc/rat/female/feet_b.vox | 3 + .../voxygen/voxel/npc/rat/female/feet_f.vox | 3 + assets/voxygen/voxel/npc/rat/female/head.vox | 3 + assets/voxygen/voxel/npc/rat/female/tail.vox | 3 + assets/voxygen/voxel/npc/rat/male/chest.vox | 3 + assets/voxygen/voxel/npc/rat/male/feet_b.vox | 3 + assets/voxygen/voxel/npc/rat/male/feet_f.vox | 3 + assets/voxygen/voxel/npc/rat/male/feet_r.vox | 3 + assets/voxygen/voxel/npc/rat/male/head.vox | 3 + assets/voxygen/voxel/npc/rat/male/tail.vox | 3 + .../voxygen/voxel/npc/saber/female/ears.vox | 3 + .../voxel/npc/saber/female/foot_lb.vox | 3 + .../voxel/npc/saber/female/foot_lf.vox | 3 + .../voxel/npc/saber/female/foot_rb.vox | 3 + .../voxel/npc/saber/female/foot_rf.vox | 3 + .../voxel/npc/saber/female/head_lower.vox | 3 + .../voxel/npc/saber/female/head_upper.vox | 3 + assets/voxygen/voxel/npc/saber/female/jaw.vox | 3 + .../voxygen/voxel/npc/saber/female/tail.vox | 3 + .../voxel/npc/saber/female/torso_back.vox | 3 + .../voxel/npc/saber/female/torso_front.vox | 3 + assets/voxygen/voxel/npc/saber/male/ears.vox | 3 + .../voxygen/voxel/npc/saber/male/foot_lb.vox | 3 + .../voxygen/voxel/npc/saber/male/foot_lf.vox | 3 + .../voxygen/voxel/npc/saber/male/foot_rb.vox | 3 + .../voxygen/voxel/npc/saber/male/foot_rf.vox | 3 + .../voxel/npc/saber/male/head_lower.vox | 3 + .../voxel/npc/saber/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/saber/male/jaw.vox | 3 + assets/voxygen/voxel/npc/saber/male/tail.vox | 3 + .../voxel/npc/saber/male/torso_back.vox | 3 + .../voxel/npc/saber/male/torso_front.vox | 3 + .../voxygen/voxel/npc/sheep/female/chest.vox | 3 + .../voxygen/voxel/npc/sheep/female/foot_l.vox | 3 + .../voxygen/voxel/npc/sheep/female/foot_r.vox | 3 + .../voxygen/voxel/npc/sheep/female/head.vox | 3 + assets/voxygen/voxel/npc/sheep/male/chest.vox | 3 + .../voxygen/voxel/npc/sheep/male/foot_l.vox | 3 + .../voxygen/voxel/npc/sheep/male/foot_r.vox | 3 + assets/voxygen/voxel/npc/sheep/male/head.vox | 3 + .../voxygen/voxel/npc/skunk/female/chest.vox | 3 + .../voxel/npc/skunk/female/foot_bl.vox | 3 + .../voxel/npc/skunk/female/foot_br.vox | 3 + .../voxel/npc/skunk/female/foot_fl.vox | 3 + .../voxel/npc/skunk/female/foot_fr.vox | 3 + .../voxygen/voxel/npc/skunk/female/head.vox | 3 + assets/voxygen/voxel/npc/skunk/male/chest.vox | 3 + .../voxygen/voxel/npc/skunk/male/foot_bl.vox | 3 + .../voxygen/voxel/npc/skunk/male/foot_br.vox | 3 + .../voxygen/voxel/npc/skunk/male/foot_fl.vox | 3 + .../voxygen/voxel/npc/skunk/male/foot_fr.vox | 3 + assets/voxygen/voxel/npc/skunk/male/head.vox | 3 + .../voxel/npc/squirrel/female/chest.vox | 3 + .../voxel/npc/squirrel/female/feet_b.vox | 3 + .../voxel/npc/squirrel/female/feet_f.vox | 3 + .../voxel/npc/squirrel/female/head.vox | 3 + .../voxel/npc/squirrel/female/tail.vox | 3 + .../voxygen/voxel/npc/squirrel/male/chest.vox | 3 + .../voxel/npc/squirrel/male/feet_b.vox | 3 + .../voxel/npc/squirrel/male/feet_f.vox | 3 + .../voxygen/voxel/npc/squirrel/male/head.vox | 3 + .../voxygen/voxel/npc/squirrel/male/tail.vox | 3 + .../voxel/npc/tarasque/female/ears.vox | 3 + .../voxel/npc/tarasque/female/foot_lb.vox | 3 + .../voxel/npc/tarasque/female/foot_lf.vox | 3 + .../voxel/npc/tarasque/female/foot_rb.vox | 3 + .../voxel/npc/tarasque/female/foot_rf.vox | 3 + .../voxel/npc/tarasque/female/head_lower.vox | 3 + .../voxel/npc/tarasque/female/head_upper.vox | 3 + .../voxygen/voxel/npc/tarasque/female/jaw.vox | 3 + .../voxel/npc/tarasque/female/tail.vox | 3 + .../voxel/npc/tarasque/female/torso_back.vox | 3 + .../voxel/npc/tarasque/female/torso_front.vox | 3 + .../voxygen/voxel/npc/tarasque/male/ears.vox | 3 + .../voxel/npc/tarasque/male/foot_lb.vox | 3 + .../voxel/npc/tarasque/male/foot_lf.vox | 3 + .../voxel/npc/tarasque/male/foot_rb.vox | 3 + .../voxel/npc/tarasque/male/foot_rf.vox | 3 + .../voxel/npc/tarasque/male/head_lower.vox | 3 + .../voxel/npc/tarasque/male/head_upper.vox | 3 + .../voxygen/voxel/npc/tarasque/male/jaw.vox | 3 + .../voxygen/voxel/npc/tarasque/male/tail.vox | 3 + .../voxel/npc/tarasque/male/torso_back.vox | 3 + .../voxel/npc/tarasque/male/torso_front.vox | 3 + .../voxygen/voxel/npc/turtle/female/chest.vox | 3 + .../voxel/npc/turtle/female/feet_b.vox | 3 + .../voxel/npc/turtle/female/feet_f.vox | 3 + .../voxygen/voxel/npc/turtle/female/head.vox | 3 + .../voxygen/voxel/npc/turtle/female/tail.vox | 3 + .../voxygen/voxel/npc/turtle/male/chest.vox | 3 + .../voxygen/voxel/npc/turtle/male/feet_b.vox | 3 + .../voxygen/voxel/npc/turtle/male/feet_f.vox | 3 + assets/voxygen/voxel/npc/turtle/male/head.vox | 3 + assets/voxygen/voxel/npc/turtle/male/tail.vox | 3 + .../voxel/npc/tuskram/female/foot_lb.vox | 3 + .../voxel/npc/tuskram/female/foot_lf.vox | 3 + .../voxel/npc/tuskram/female/foot_rb.vox | 3 + .../voxel/npc/tuskram/female/foot_rf.vox | 3 + .../voxel/npc/tuskram/female/head_lower.vox | 3 + .../voxel/npc/tuskram/female/head_upper.vox | 3 + .../voxygen/voxel/npc/tuskram/female/jaw.vox | 3 + .../voxygen/voxel/npc/tuskram/female/tail.vox | 3 + .../voxel/npc/tuskram/female/torso_back.vox | 3 + .../voxel/npc/tuskram/female/torso_front.vox | 3 + .../voxel/npc/tuskram/male/foot_lb.vox | 3 + .../voxel/npc/tuskram/male/foot_lf.vox | 3 + .../voxel/npc/tuskram/male/foot_rb.vox | 3 + .../voxel/npc/tuskram/male/foot_rf.vox | 3 + .../voxel/npc/tuskram/male/head_lower.vox | 3 + .../voxel/npc/tuskram/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/tuskram/male/jaw.vox | 3 + .../voxygen/voxel/npc/tuskram/male/tail.vox | 3 + .../voxel/npc/tuskram/male/torso_back.vox | 3 + .../voxel/npc/tuskram/male/torso_front.vox | 3 + .../voxel/npc/viper/female/foot_lb.vox | 3 + .../voxel/npc/viper/female/foot_lf.vox | 3 + .../voxel/npc/viper/female/foot_rb.vox | 3 + .../voxel/npc/viper/female/foot_rf.vox | 3 + .../voxel/npc/viper/female/head_lower.vox | 3 + .../voxel/npc/viper/female/head_upper.vox | 3 + assets/voxygen/voxel/npc/viper/female/jaw.vox | 3 + .../voxygen/voxel/npc/viper/female/tail.vox | 3 + .../voxel/npc/viper/female/torso_back.vox | 3 + .../voxel/npc/viper/female/torso_front.vox | 3 + .../voxygen/voxel/npc/viper/male/foot_lb.vox | 3 + .../voxygen/voxel/npc/viper/male/foot_lf.vox | 3 + .../voxygen/voxel/npc/viper/male/foot_rb.vox | 3 + .../voxygen/voxel/npc/viper/male/foot_rf.vox | 3 + .../voxel/npc/viper/male/head_lower.vox | 3 + .../voxel/npc/viper/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/viper/male/jaw.vox | 3 + assets/voxygen/voxel/npc/viper/male/tail.vox | 3 + .../voxel/npc/viper/male/torso_back.vox | 3 + .../voxel/npc/viper/male/torso_front.vox | 3 + .../voxel/npc/wolf/{ => female}/ears.vox | 0 .../voxygen/voxel/npc/wolf/female/foot_lb.vox | 3 + .../voxel/npc/wolf/{ => female}/foot_lf.vox | 0 .../voxygen/voxel/npc/wolf/female/foot_rb.vox | 3 + .../voxel/npc/wolf/{ => female}/foot_rf.vox | 0 .../npc/wolf/{ => female}/head_lower.vox | 0 .../npc/wolf/{ => female}/head_upper.vox | 0 .../voxel/npc/wolf/{ => female}/jaw.vox | 0 .../voxel/npc/wolf/{ => female}/tail.vox | 0 .../npc/wolf/{ => female}/torso_back.vox | 0 .../{torso_mid.vox => female/torso_front.vox} | 0 assets/voxygen/voxel/npc/wolf/foot_lb.vox | 3 - assets/voxygen/voxel/npc/wolf/foot_rb.vox | 3 - assets/voxygen/voxel/npc/wolf/male/ears.vox | 3 + .../voxygen/voxel/npc/wolf/male/foot_lb.vox | 3 + .../voxygen/voxel/npc/wolf/male/foot_lf.vox | 3 + .../voxygen/voxel/npc/wolf/male/foot_rb.vox | 3 + .../voxygen/voxel/npc/wolf/male/foot_rf.vox | 3 + .../voxel/npc/wolf/male/head_lower.vox | 3 + .../voxel/npc/wolf/male/head_upper.vox | 3 + assets/voxygen/voxel/npc/wolf/male/jaw.vox | 3 + assets/voxygen/voxel/npc/wolf/male/tail.vox | 3 + .../voxel/npc/wolf/male/torso_back.vox | 3 + .../voxel/npc/wolf/male/torso_front.vox | 3 + .../quadruped_medium_central_manifest.ron | 483 +++++++ .../quadruped_medium_lateral_manifest.ron | 290 +++++ .../quadruped_small_central_manifest.ron | 254 ++++ .../quadruped_small_lateral_manifest.ron | 450 +++++++ common/src/comp/body.rs | 3 + common/src/comp/body/biped_large.rs | 106 +- common/src/comp/body/bird_medium.rs | 78 +- common/src/comp/body/critter.rs | 44 + common/src/comp/body/giant.rs | 2 +- common/src/comp/body/quadruped_medium.rs | 121 +- common/src/comp/body/quadruped_small.rs | 67 +- common/src/comp/mod.rs | 4 +- common/src/npc.rs | 9 + common/src/terrain/structure.rs | 6 +- server/src/cmd.rs | 3 + server/src/sys/terrain.rs | 58 +- voxygen/src/anim/biped_large/idle.rs | 25 +- voxygen/src/anim/biped_large/jump.rs | 5 +- voxygen/src/anim/biped_large/mod.rs | 27 + voxygen/src/anim/biped_large/run.rs | 5 +- voxygen/src/anim/bird_medium/idle.rs | 86 +- voxygen/src/anim/bird_medium/jump.rs | 37 +- voxygen/src/anim/bird_medium/mod.rs | 83 +- voxygen/src/anim/bird_medium/run.rs | 73 +- voxygen/src/anim/bird_small/idle.rs | 5 +- voxygen/src/anim/bird_small/jump.rs | 5 +- voxygen/src/anim/bird_small/mod.rs | 27 + voxygen/src/anim/bird_small/run.rs | 5 +- voxygen/src/anim/character/attack.rs | 5 +- voxygen/src/anim/character/block.rs | 5 +- voxygen/src/anim/character/blockidle.rs | 5 +- voxygen/src/anim/character/charge.rs | 5 +- voxygen/src/anim/character/cidle.rs | 5 +- voxygen/src/anim/character/climb.rs | 5 +- voxygen/src/anim/character/crun.rs | 4 +- voxygen/src/anim/character/gliding.rs | 5 +- voxygen/src/anim/character/idle.rs | 5 +- voxygen/src/anim/character/jump.rs | 5 +- voxygen/src/anim/character/mod.rs | 162 ++- voxygen/src/anim/character/roll.rs | 5 +- voxygen/src/anim/character/run.rs | 7 +- voxygen/src/anim/character/sit.rs | 5 +- voxygen/src/anim/character/sneak.rs | 4 +- voxygen/src/anim/character/stand.rs | 5 +- voxygen/src/anim/character/swim.rs | 5 +- voxygen/src/anim/character/wield.rs | 5 +- voxygen/src/anim/critter/idle.rs | 64 + voxygen/src/anim/critter/jump.rs | 42 + voxygen/src/anim/critter/mod.rs | 146 +++ voxygen/src/anim/critter/run.rs | 52 + voxygen/src/anim/dragon/idle.rs | 5 +- voxygen/src/anim/dragon/jump.rs | 5 +- voxygen/src/anim/dragon/mod.rs | 28 + voxygen/src/anim/dragon/run.rs | 5 +- voxygen/src/anim/fish_medium/idle.rs | 5 +- voxygen/src/anim/fish_medium/jump.rs | 5 +- voxygen/src/anim/fish_medium/mod.rs | 26 + voxygen/src/anim/fish_medium/run.rs | 5 +- voxygen/src/anim/fish_small/idle.rs | 5 +- voxygen/src/anim/fish_small/jump.rs | 5 +- voxygen/src/anim/fish_small/mod.rs | 27 + voxygen/src/anim/fish_small/run.rs | 5 +- voxygen/src/anim/fixture/mod.rs | 3 + voxygen/src/anim/mod.rs | 145 +-- voxygen/src/anim/object/mod.rs | 2 + voxygen/src/anim/quadruped_medium/idle.rs | 93 +- voxygen/src/anim/quadruped_medium/jump.rs | 13 +- voxygen/src/anim/quadruped_medium/mod.rs | 161 ++- voxygen/src/anim/quadruped_medium/run.rs | 96 +- voxygen/src/anim/quadruped_small/idle.rs | 40 +- voxygen/src/anim/quadruped_small/jump.rs | 5 +- voxygen/src/anim/quadruped_small/mod.rs | 105 +- voxygen/src/anim/quadruped_small/run.rs | 44 +- voxygen/src/menu/char_selection/scene.rs | 4 +- voxygen/src/scene/figure/cache.rs | 621 +++++---- voxygen/src/scene/figure/load.rs | 1137 +++++++++++++---- voxygen/src/scene/figure/mod.rs | 528 ++++++-- voxygen/src/scene/mod.rs | 2 +- world/src/block/mod.rs | 15 +- 543 files changed, 6610 insertions(+), 1409 deletions(-) create mode 100644 assets/voxygen/voxel/biped_large_center_manifest.ron create mode 100644 assets/voxygen/voxel/biped_large_lateral_manifest.ron create mode 100644 assets/voxygen/voxel/bird_medium_center_manifest.ron create mode 100644 assets/voxygen/voxel/bird_medium_lateral_manifest.ron create mode 100644 assets/voxygen/voxel/critter_center_manifest.ron create mode 100644 assets/voxygen/voxel/npc/alligator/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/alligator/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/alligator/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/female/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/female/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/female/head.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/male/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/male/head.vox create mode 100644 assets/voxygen/voxel/npc/axolotl/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/batfox/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/batfox/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/batfox/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/batfox/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/batfox/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/batfox/female/head.vox create mode 100644 assets/voxygen/voxel/npc/batfox/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/batfox/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/batfox/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/batfox/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/batfox/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/batfox/male/head.vox create mode 100644 assets/voxygen/voxel/npc/boar/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/boar/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/boar/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/boar/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/boar/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/boar/female/head.vox create mode 100644 assets/voxygen/voxel/npc/boar/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/boar/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/boar/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/boar/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/boar/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/boar/male/head.vox create mode 100644 assets/voxygen/voxel/npc/cat/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/cat/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/cat/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/cat/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/cat/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/cat/female/head.vox create mode 100644 assets/voxygen/voxel/npc/cat/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/cat/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/cat/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/cat/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/cat/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/cat/male/head.vox create mode 100644 assets/voxygen/voxel/npc/chicken/female/head.vox create mode 100644 assets/voxygen/voxel/npc/chicken/female/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/chicken/female/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/chicken/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/chicken/female/torso.vox create mode 100644 assets/voxygen/voxel/npc/chicken/female/wing.vox create mode 100644 assets/voxygen/voxel/npc/chicken/male/head.vox create mode 100644 assets/voxygen/voxel/npc/chicken/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/chicken/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/chicken/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/chicken/male/torso.vox create mode 100644 assets/voxygen/voxel/npc/chicken/male/wing.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/female/head.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/dodarock/male/head.vox create mode 100644 assets/voxygen/voxel/npc/duck/female/head.vox create mode 100644 assets/voxygen/voxel/npc/duck/female/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/duck/female/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/duck/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/duck/female/torso.vox create mode 100644 assets/voxygen/voxel/npc/duck/female/wing.vox create mode 100644 assets/voxygen/voxel/npc/duck/male/head.vox create mode 100644 assets/voxygen/voxel/npc/duck/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/duck/male/leg_r.vox rename assets/voxygen/voxel/npc/{duck_m => duck/male}/tail.vox (100%) create mode 100644 assets/voxygen/voxel/npc/duck/male/torso.vox create mode 100644 assets/voxygen/voxel/npc/duck/male/wing.vox delete mode 100644 assets/voxygen/voxel/npc/duck_m/body.vox delete mode 100644 assets/voxygen/voxel/npc/duck_m/head.vox delete mode 100644 assets/voxygen/voxel/npc/duck_m/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/duck_m/leg_r.vox delete mode 100644 assets/voxygen/voxel/npc/duck_m/wing.vox create mode 100644 assets/voxygen/voxel/npc/fox/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/fox/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/fox/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/fox/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/fox/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/fox/female/head.vox create mode 100644 assets/voxygen/voxel/npc/fox/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/fox/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/fox/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/fox/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/fox/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/fox/male/head.vox create mode 100644 assets/voxygen/voxel/npc/fungome/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/fungome/female/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/fungome/female/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/fungome/female/head.vox create mode 100644 assets/voxygen/voxel/npc/fungome/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/head.vox create mode 100644 assets/voxygen/voxel/npc/fungome/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/gecko/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/gecko/female/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/gecko/female/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/gecko/female/head.vox create mode 100644 assets/voxygen/voxel/npc/gecko/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/head.vox create mode 100644 assets/voxygen/voxel/npc/gecko/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/head.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/giant/female/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/head.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/giant/male/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/goose/female/head.vox create mode 100644 assets/voxygen/voxel/npc/goose/female/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/goose/female/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/goose/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/goose/female/torso.vox create mode 100644 assets/voxygen/voxel/npc/goose/female/wing.vox create mode 100644 assets/voxygen/voxel/npc/goose/male/head.vox create mode 100644 assets/voxygen/voxel/npc/goose/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/goose/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/goose/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/goose/male/torso.vox create mode 100644 assets/voxygen/voxel/npc/goose/male/wing.vox create mode 100644 assets/voxygen/voxel/npc/holladon/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/holladon/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/holladon/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/holladon/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/holladon/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/holladon/female/head.vox create mode 100644 assets/voxygen/voxel/npc/holladon/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/holladon/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/holladon/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/holladon/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/holladon/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/holladon/male/head.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/female/head.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/jackalope/male/head.vox delete mode 100644 assets/voxygen/voxel/npc/knight/foot_l.vox delete mode 100644 assets/voxygen/voxel/npc/knight/foot_r.vox delete mode 100644 assets/voxygen/voxel/npc/knight/hand_l.vox delete mode 100644 assets/voxygen/voxel/npc/knight/hand_r.vox delete mode 100644 assets/voxygen/voxel/npc/knight/head.vox delete mode 100644 assets/voxygen/voxel/npc/knight/leg_l.vox delete mode 100644 assets/voxygen/voxel/npc/knight/leg_r.vox delete mode 100644 assets/voxygen/voxel/npc/knight/lower_torso.vox delete mode 100644 assets/voxygen/voxel/npc/knight/shoulder_l.vox delete mode 100644 assets/voxygen/voxel/npc/knight/shoulder_r.vox delete mode 100644 assets/voxygen/voxel/npc/knight/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/ears.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/lion/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/ears.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/lion/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/monitor/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/monitor/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/head.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/torso.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/wing_l.vox create mode 100644 assets/voxygen/voxel/npc/peacock/female/wing_r.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/head.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/torso.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/wing_l.vox create mode 100644 assets/voxygen/voxel/npc/peacock/male/wing_r.vox create mode 100644 assets/voxygen/voxel/npc/pig/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/pig/female/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/pig/female/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/pig/female/head.vox rename assets/voxygen/voxel/npc/{pig_purple => pig/male}/chest.vox (100%) rename assets/voxygen/voxel/npc/{pig_purple/leg_l.vox => pig/male/foot_l.vox} (100%) rename assets/voxygen/voxel/npc/{pig_purple/leg_r.vox => pig/male/foot_r.vox} (100%) rename assets/voxygen/voxel/npc/{pig_purple => pig/male}/head.vox (100%) create mode 100644 assets/voxygen/voxel/npc/quokka/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/quokka/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/quokka/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/quokka/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/quokka/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/quokka/female/head.vox create mode 100644 assets/voxygen/voxel/npc/quokka/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/quokka/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/quokka/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/quokka/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/quokka/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/quokka/male/head.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/female/head.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/raccoon/male/head.vox create mode 100644 assets/voxygen/voxel/npc/rat/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/rat/female/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/rat/female/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/rat/female/head.vox create mode 100644 assets/voxygen/voxel/npc/rat/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/feet_r.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/head.vox create mode 100644 assets/voxygen/voxel/npc/rat/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/ears.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/saber/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/ears.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/saber/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/sheep/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/sheep/female/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/sheep/female/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/sheep/female/head.vox create mode 100644 assets/voxygen/voxel/npc/sheep/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/sheep/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/sheep/male/head.vox create mode 100644 assets/voxygen/voxel/npc/skunk/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/skunk/female/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/skunk/female/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/skunk/female/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/skunk/female/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/skunk/female/head.vox create mode 100644 assets/voxygen/voxel/npc/skunk/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/skunk/male/foot_bl.vox create mode 100644 assets/voxygen/voxel/npc/skunk/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/skunk/male/foot_fl.vox create mode 100644 assets/voxygen/voxel/npc/skunk/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/skunk/male/head.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/female/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/female/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/female/head.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/head.vox create mode 100644 assets/voxygen/voxel/npc/squirrel/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/ears.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/ears.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/tarasque/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/turtle/female/chest.vox create mode 100644 assets/voxygen/voxel/npc/turtle/female/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/turtle/female/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/turtle/female/head.vox create mode 100644 assets/voxygen/voxel/npc/turtle/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/feet_b.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/feet_f.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/head.vox create mode 100644 assets/voxygen/voxel/npc/turtle/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/tuskram/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/jaw.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/tail.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/viper/female/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/viper/male/torso_front.vox rename assets/voxygen/voxel/npc/wolf/{ => female}/ears.vox (100%) create mode 100644 assets/voxygen/voxel/npc/wolf/female/foot_lb.vox rename assets/voxygen/voxel/npc/wolf/{ => female}/foot_lf.vox (100%) create mode 100644 assets/voxygen/voxel/npc/wolf/female/foot_rb.vox rename assets/voxygen/voxel/npc/wolf/{ => female}/foot_rf.vox (100%) rename assets/voxygen/voxel/npc/wolf/{ => female}/head_lower.vox (100%) rename assets/voxygen/voxel/npc/wolf/{ => female}/head_upper.vox (100%) rename assets/voxygen/voxel/npc/wolf/{ => female}/jaw.vox (100%) rename assets/voxygen/voxel/npc/wolf/{ => female}/tail.vox (100%) rename assets/voxygen/voxel/npc/wolf/{ => female}/torso_back.vox (100%) rename assets/voxygen/voxel/npc/wolf/{torso_mid.vox => female/torso_front.vox} (100%) delete mode 100644 assets/voxygen/voxel/npc/wolf/foot_lb.vox delete mode 100644 assets/voxygen/voxel/npc/wolf/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/ears.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/foot_lb.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/foot_lf.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/foot_rb.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/foot_rf.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/head_lower.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/head_upper.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/wolf/male/torso_front.vox create mode 100644 assets/voxygen/voxel/quadruped_medium_central_manifest.ron create mode 100644 assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron create mode 100644 assets/voxygen/voxel/quadruped_small_central_manifest.ron create mode 100644 assets/voxygen/voxel/quadruped_small_lateral_manifest.ron create mode 100644 common/src/comp/body/critter.rs create mode 100644 voxygen/src/anim/critter/idle.rs create mode 100644 voxygen/src/anim/critter/jump.rs create mode 100644 voxygen/src/anim/critter/mod.rs create mode 100644 voxygen/src/anim/critter/run.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 15480736b6..44febe587d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 to the client. - Added fullscreen and window size to settings so that they can be persisted - Added coverage based scaling for pixel art +- 28 new mobs + ### Changed @@ -84,6 +86,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Parallelized and otherwise sped up significant parts of world generation. - Various performance improvements to world generation. - Nametags now a fixed size and shown in a limited range +- Non-humanoid skeletons now utilize configs for hotloading, and skeletal attributes. ### Removed diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index 3158058f5b..7f70e2d8b5 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -309,5 +309,14 @@ "Ziggy", "Zoe", "Zoinks" + ], + "duck": [ + "ducky" + ], + "giant": [ + "leroybrown" + ], + "rat": [ + "rat" ] } \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_large_center_manifest.ron b/assets/voxygen/voxel/biped_large_center_manifest.ron new file mode 100644 index 0000000000..85febe6c84 --- /dev/null +++ b/assets/voxygen/voxel/biped_large_center_manifest.ron @@ -0,0 +1,30 @@ +({ + (Giant, Male): ( + head: ( + offset: (-9.0, -6.0, -6.5), + center: ("npc.giant.male.head"), + ), + torso_upper: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.giant.male.torso_upper"), + ), + torso_lower: ( + offset: (-5.0, 4.5, 4.5), + center: ("npc.giant.male.torso_lower"), + ) + ), + (Giant, Female): ( + head: ( + offset: (-9.0, -6.0, -6.5), + center: ("npc.giant.female.head"), + ), + torso_upper: ( + offset: (-8.0, -4.5, -5.0), + center: ("npc.giant.female.torso_upper"), + ), + torso_lower: ( + offset: (-5.0, 4.5, 4.5), + center: ("npc.giant.female.torso_lower"), + ) + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron new file mode 100644 index 0000000000..fccdca78ab --- /dev/null +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -0,0 +1,70 @@ +({ + (Giant, Male): ( + shoulder_l: ( + offset: (-5.0, -5.5, -4.0), + lateral: ("npc.giant.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-5.0, -5.5, -4.0), + lateral: ("npc.giant.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.0, -2.5, -3.0), + lateral: ("npc.giant.male.hand_l"), + ), + hand_r: ( + offset: (-3.0, -2.5, -3.0), + lateral: ("npc.giant.male.hand_r"), + ), + leg_l: ( + offset: (-3.0, -3.5, -2.0), + lateral: ("npc.giant.male.leg_l"), + ), + leg_r: ( + offset: (-3.0, -3.5, -2.0), + lateral: ("npc.giant.male.leg_r"), + ), + foot_l: ( + offset: (-3.0, -5.5, -2.5), + lateral: ("npc.giant.male.foot_l"), + ), + foot_r: ( + offset: (-3.0, -5.5, -2.5), + lateral: ("npc.giant.male.foot_r"), + ) + ), + (Giant, Female): ( + shoulder_l: ( + offset: (-5.0, -5.5, -4.0), + lateral: ("npc.giant.female.shoulder_l"), + ), + shoulder_r: ( + offset: (-5.0, -5.5, -4.0), + lateral: ("npc.giant.female.shoulder_r"), + ), + hand_l: ( + offset: (-3.0, -2.5, -3.0), + lateral: ("npc.giant.female.hand_l"), + ), + hand_r: ( + offset: (-3.0, -2.5, -3.0), + lateral: ("npc.giant.female.hand_r"), + ), + leg_l: ( + offset: (-3.0, -3.5, -2.0), + lateral: ("npc.giant.female.leg_l"), + ), + leg_r: ( + offset: (-3.0, -3.5, -2.0), + lateral: ("npc.giant.female.leg_r"), + ), + foot_l: ( + offset: (-3.0, -5.5, -2.5), + lateral: ("npc.giant.female.foot_l"), + ), + foot_r: ( + offset: (-3.0, -5.5, -2.5), + lateral: ("npc.giant.female.foot_r"), + ) + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/bird_medium_center_manifest.ron b/assets/voxygen/voxel/bird_medium_center_manifest.ron new file mode 100644 index 0000000000..565f92f9b6 --- /dev/null +++ b/assets/voxygen/voxel/bird_medium_center_manifest.ron @@ -0,0 +1,114 @@ +({ + (Duck, Male): ( + head: ( + offset: (-1.5, -2.0, -1.5), + center: ("npc.duck.male.head"), + ), + torso: ( + offset: (-2.5, -3.0, -2.0), + center: ("npc.duck.male.torso"), + ), + tail: ( + offset: (-1.5, -0.5, -2.5), + center: ("npc.duck.male.tail"), + ) + ), + (Duck, Female): ( + head: ( + offset: (-1.5, -2.0, -1.5), + center: ("npc.duck.female.head"), + ), + torso: ( + offset: (-2.5, -3.0, -2.0), + center: ("npc.duck.female.torso"), + ), + tail: ( + offset: (-1.5, -0.5, -2.5), + center: ("npc.duck.female.tail"), + ) + ), + (Chicken, Male): ( + head: ( + offset: (-1.5, -2.0, -3.5), + center: ("npc.chicken.male.head"), + ), + torso: ( + offset: (-2.5, -3.0, -2.0), + center: ("npc.chicken.male.torso"), + ), + tail: ( + offset: (-1.5, -1.5, -3.5), + center: ("npc.chicken.male.tail"), + ) + ), + (Chicken, Female): ( + head: ( + offset: (-1.5, -2.0, -2.5), + center: ("npc.chicken.female.head"), + ), + torso: ( + offset: (-2.5, -3.0, -2.0), + center: ("npc.chicken.female.torso"), + ), + tail: ( + offset: (-1.5, -0.5, -2.5), + center: ("npc.chicken.female.tail"), + ) + ), + (Goose, Male): ( + head: ( + offset: (-2.0, -3.5, -2.5), + center: ("npc.goose.male.head"), + ), + torso: ( + offset: (-3.5, -4.5, -3.0), + center: ("npc.goose.male.torso"), + ), + tail: ( + offset: (-2.0, -1.0, -3.5), + center: ("npc.goose.male.tail"), + ) + ), + (Goose, Female): ( + head: ( + offset: (-2.0, -3.5, -2.5), + center: ("npc.goose.female.head"), + ), + torso: ( + offset: (-3.5, -4.5, -3.0), + center: ("npc.goose.female.torso"), + ), + tail: ( + offset: (-2.0, -1.0, -3.5), + center: ("npc.goose.female.tail"), + ) + ), + (Peacock, Male): ( + head: ( + offset: (-2.0, -3.5, -3.0), + center: ("npc.peacock.male.head"), + ), + torso: ( + offset: (-2.5, -5.5, -4.5), + center: ("npc.peacock.male.torso"), + ), + tail: ( + offset: (-3.0, -1.5, -5.0), + center: ("npc.peacock.male.tail"), + ) + ), + (Peacock, Female): ( + head: ( + offset: (-2.0, -3.5, -3.5), + center: ("npc.peacock.female.head"), + ), + torso: ( + offset: (-2.5, -5.5, -4.5), + center: ("npc.peacock.female.torso"), + ), + tail: ( + offset: (-3.0, -1.5, -5.0), + center: ("npc.peacock.female.tail"), + ) + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron new file mode 100644 index 0000000000..f6f7aab553 --- /dev/null +++ b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron @@ -0,0 +1,146 @@ +({ + (Duck, Male): ( + wing_l: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.duck.male.wing"), + ), + wing_r: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.duck.male.wing"), + ), + foot_l: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.duck.male.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.duck.male.leg_r"), + ) + ), + (Duck, Female): ( + wing_l: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.duck.female.wing"), + ), + wing_r: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.duck.female.wing"), + ), + foot_l: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.duck.female.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.duck.female.leg_r"), + ) + ), + (Chicken, Male): ( + wing_l: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.chicken.male.wing"), + ), + wing_r: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.chicken.male.wing"), + ), + foot_l: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.chicken.male.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.chicken.male.leg_r"), + ) + ), + (Chicken, Female): ( + wing_l: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.chicken.female.wing"), + ), + wing_r: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.chicken.female.wing"), + ), + foot_l: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.chicken.female.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.chicken.female.leg_r"), + ) + ), + (Goose, Male): ( + wing_l: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.goose.male.wing"), + ), + wing_r: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.goose.male.wing"), + ), + foot_l: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.goose.male.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.goose.male.leg_r"), + ) + ), + (Goose, Female): ( + wing_l: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.goose.female.wing"), + ), + wing_r: ( + offset: (-0.5, -2.5, -1.5), + lateral: ("npc.goose.female.wing"), + ), + foot_l: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.goose.female.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -1.5), + lateral: ("npc.goose.female.leg_r"), + ) + ), + (Peacock, Male): ( + wing_l: ( + offset: (-1.0, -3.5, -2.5), + lateral: ("npc.peacock.male.wing_l"), + ), + wing_r: ( + offset: (-1.0, -3.5, -2.5), + lateral: ("npc.peacock.male.wing_r"), + ), + foot_l: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.peacock.male.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.peacock.male.leg_r"), + ) + ), + (Peacock, Female): ( + wing_l: ( + offset: (-1.0, -3.5, -2.5), + lateral: ("npc.peacock.female.wing_l"), + ), + wing_r: ( + offset: (-1.0, -3.5, -2.5), + lateral: ("npc.peacock.female.wing_r"), + ), + foot_l: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.peacock.female.leg_l"), + ), + foot_r: ( + offset: (-1.0, -1.5, -3.5), + lateral: ("npc.peacock.female.leg_r"), + ) + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/critter_center_manifest.ron b/assets/voxygen/voxel/critter_center_manifest.ron new file mode 100644 index 0000000000..5f78275ad3 --- /dev/null +++ b/assets/voxygen/voxel/critter_center_manifest.ron @@ -0,0 +1,266 @@ +({ + (Rat, Male): ( + head: ( + offset: (-4.5, -4.0, -4.0), + center: ("npc.rat.male.head"), + ), + chest: ( + offset: (-4.5, -6.0, -4.0), + center: ("npc.rat.male.chest"), + ), + feet_f: ( + offset: (-4.0, -1.5, -1.0), + center: ("npc.rat.male.feet_f"), + ), + feet_b: ( + offset: (-4.0, -1.5, -1.0), + center: ("npc.rat.male.feet_b"), + ), + tail: ( + offset: (-0.5, -4.0, -1.5), + center: ("npc.rat.male.tail"), + ), + ), + (Rat, Female): ( + head: ( + offset: (-4.5, -4.0, -4.0), + center: ("npc.rat.female.head"), + ), + chest: ( + offset: (-4.5, -6.0, -4.0), + center: ("npc.rat.female.chest"), + ), + feet_f: ( + offset: (-4.0, -1.5, -1.0), + center: ("npc.rat.female.feet_f"), + ), + feet_b: ( + offset: (-4.0, -1.5, -1.0), + center: ("npc.rat.female.feet_b"), + ), + tail: ( + offset: (-0.5, -4.0, -1.5), + center: ("npc.rat.female.tail"), + ), + ), + (Axolotl, Male): ( + head: ( + offset: (-3.5, -4.0, -2.0), + center: ("npc.axolotl.male.head"), + ), + chest: ( + offset: (-2.5, -4.0, -1.5), + center: ("npc.axolotl.male.chest"), + ), + feet_f: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.axolotl.male.feet_f"), + ), + feet_b: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.axolotl.male.feet_b"), + ), + tail: ( + offset: (-1.5, -2.5, -1.5), + center: ("npc.axolotl.male.tail"), + ), + ), + (Axolotl, Female): ( + head: ( + offset: (-3.5, -4.0, -2.0), + center: ("npc.axolotl.female.head"), + ), + chest: ( + offset: (-2.5, -4.0, -1.5), + center: ("npc.axolotl.female.chest"), + ), + feet_f: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.axolotl.female.feet_f"), + ), + feet_b: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.axolotl.female.feet_b"), + ), + tail: ( + offset: (-1.5, -2.5, -1.5), + center: ("npc.axolotl.female.tail"), + ), + ), + (Gecko, Male): ( + head: ( + offset: (-2.5, -3.0, -2.0), + center: ("npc.gecko.male.head"), + ), + chest: ( + offset: (-1.5, -4.0, -2.0), + center: ("npc.gecko.male.chest"), + ), + feet_f: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.gecko.male.feet_f"), + ), + feet_b: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.gecko.male.feet_b"), + ), + tail: ( + offset: (-0.5, -2.5, -1.0), + center: ("npc.gecko.male.tail"), + ), + ), + (Gecko, Female): ( + head: ( + offset: (-2.5, -3.0, -2.0), + center: ("npc.gecko.female.head"), + ), + chest: ( + offset: (-1.5, -4.0, -1.5), + center: ("npc.gecko.female.chest"), + ), + feet_f: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.gecko.female.feet_f"), + ), + feet_b: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.gecko.female.feet_b"), + ), + tail: ( + offset: (-0.5, -2.5, -1.0), + center: ("npc.gecko.female.tail"), + ), + ), + (Turtle, Male): ( + head: ( + offset: (-2.5, -2.5, -2.5), + center: ("npc.turtle.male.head"), + ), + chest: ( + offset: (-6.0, -6.0, -4.0), + center: ("npc.turtle.male.chest"), + ), + feet_f: ( + offset: (-5.0, -0.5, -1.0), + center: ("npc.turtle.male.feet_f"), + ), + feet_b: ( + offset: (-5.0, -0.5, -1.0), + center: ("npc.turtle.male.feet_b"), + ), + tail: ( + offset: (-0.5, -2.0, -1.0), + center: ("npc.turtle.male.tail"), + ), + ), + (Turtle, Female): ( + head: ( + offset: (-2.5, -2.5, -2.5), + center: ("npc.turtle.female.head"), + ), + chest: ( + offset: (-6.0, -6.0, -4.0), + center: ("npc.turtle.female.chest"), + ), + feet_f: ( + offset: (-5.0, -0.5, -1.0), + center: ("npc.turtle.female.feet_f"), + ), + feet_b: ( + offset: (-5.0, -0.5, -1.0), + center: ("npc.turtle.female.feet_b"), + ), + tail: ( + offset: (-0.5, -2.0, -1.0), + center: ("npc.turtle.female.tail"), + ), + ), + (Squirrel, Male): ( + head: ( + offset: (-1.5, -2.0, -2.0), + center: ("npc.squirrel.male.head"), + ), + chest: ( + offset: (-1.5, -3.0, -1.5), + center: ("npc.squirrel.male.chest"), + ), + feet_f: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.squirrel.male.feet_f"), + ), + feet_b: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.squirrel.male.feet_b"), + ), + tail: ( + offset: (-1.5, -1.5, -3.0), + center: ("npc.squirrel.male.tail"), + ), + ), + (Squirrel, Female): ( + head: ( + offset: (-1.5, -2.0, -2.0), + center: ("npc.squirrel.female.head"), + ), + chest: ( + offset: (-1.5, -3.0, -1.5), + center: ("npc.squirrel.female.chest"), + ), + feet_f: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.squirrel.female.feet_f"), + ), + feet_b: ( + offset: (-2.0, -0.5, -1.0), + center: ("npc.squirrel.female.feet_b"), + ), + tail: ( + offset: (-1.5, -1.5, -3.0), + center: ("npc.squirrel.female.tail"), + ), + ), + (Fungome, Male): ( + head: ( + offset: (-2.5, -1.5, -2.0), + center: ("npc.fungome.male.head"), + ), + chest: ( + offset: (-6.0, -6.0, -4.0), + center: ("npc.fungome.male.chest"), + ), + feet_f: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.fungome.male.feet_f"), + ), + feet_b: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.fungome.male.feet_b"), + ), + tail: ( + offset: (-1.0, -0.5, -1.0), + center: ("npc.fungome.male.tail"), + ), + ), + (Fungome, Female): ( + head: ( + offset: (-2.5, -1.5, -2.0), + center: ("npc.fungome.female.head"), + ), + chest: ( + offset: (-6.0, -6.0, -4.0), + center: ("npc.fungome.female.chest"), + ), + feet_f: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.fungome.female.feet_f"), + ), + feet_b: ( + offset: (-3.0, -0.5, -1.0), + center: ("npc.fungome.female.feet_b"), + ), + tail: ( + offset: (-1.0, -0.5, -1.0), + center: ("npc.fungome.female.tail"), + ), + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/npc/alligator/female/foot_lb.vox b/assets/voxygen/voxel/npc/alligator/female/foot_lb.vox new file mode 100644 index 0000000000..0d65b2d87e --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad021a43bb437157f4087c2ffa5c59cbf352da19063f69acc312fb8bb16e9836 +size 1224 diff --git a/assets/voxygen/voxel/npc/alligator/female/foot_lf.vox b/assets/voxygen/voxel/npc/alligator/female/foot_lf.vox new file mode 100644 index 0000000000..0537c4aa55 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa76d106bdccceffc575509e44db99bb81b68501216e6d3703ac5dce07c2cf1b +size 1160 diff --git a/assets/voxygen/voxel/npc/alligator/female/foot_rb.vox b/assets/voxygen/voxel/npc/alligator/female/foot_rb.vox new file mode 100644 index 0000000000..6030b818cc --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d801090612e95b24caa5cbe28907cdf33e3a88f6699f5115c9b4ed4792eccff6 +size 1224 diff --git a/assets/voxygen/voxel/npc/alligator/female/foot_rf.vox b/assets/voxygen/voxel/npc/alligator/female/foot_rf.vox new file mode 100644 index 0000000000..c541061a5d --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ad2041d642feb8fbd90bcef57ae64c5a6f769b772809782c47f10336cf3dca9 +size 1160 diff --git a/assets/voxygen/voxel/npc/alligator/female/head_lower.vox b/assets/voxygen/voxel/npc/alligator/female/head_lower.vox new file mode 100644 index 0000000000..c038b75182 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b947ca485d6ac5ab921a5ff88f0ec63638df6bc2230f109edc3f2e57c8cc08a9 +size 1672 diff --git a/assets/voxygen/voxel/npc/alligator/female/head_upper.vox b/assets/voxygen/voxel/npc/alligator/female/head_upper.vox new file mode 100644 index 0000000000..5b6d99dbca --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d4d1a41ead3993911ca3b678e13fe85d742bf2caf87a06f24af0d4721d739ba +size 2608 diff --git a/assets/voxygen/voxel/npc/alligator/female/jaw.vox b/assets/voxygen/voxel/npc/alligator/female/jaw.vox new file mode 100644 index 0000000000..ca45806ac0 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a76b9301a6990c4b7396d4737a390d0be922ec1fc6ee855f7563a43705c1faa3 +size 1464 diff --git a/assets/voxygen/voxel/npc/alligator/female/tail.vox b/assets/voxygen/voxel/npc/alligator/female/tail.vox new file mode 100644 index 0000000000..09971538d9 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d40ceecef9ffa262b29bca85b2e907db4469beb0d09faad2ac3ad5fb2e7bbec0 +size 1280 diff --git a/assets/voxygen/voxel/npc/alligator/female/torso_back.vox b/assets/voxygen/voxel/npc/alligator/female/torso_back.vox new file mode 100644 index 0000000000..986397b65e --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa83f2237f49e51069411be2d89d549032db8ba6a87a9bdf0538220a0feebc69 +size 2128 diff --git a/assets/voxygen/voxel/npc/alligator/female/torso_front.vox b/assets/voxygen/voxel/npc/alligator/female/torso_front.vox new file mode 100644 index 0000000000..9a8d20e70e --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6180455d9d3b9b82adde8b8a9016124a19e39a148304b9a765d1a4b79f316079 +size 2832 diff --git a/assets/voxygen/voxel/npc/alligator/male/foot_lb.vox b/assets/voxygen/voxel/npc/alligator/male/foot_lb.vox new file mode 100644 index 0000000000..0d65b2d87e --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad021a43bb437157f4087c2ffa5c59cbf352da19063f69acc312fb8bb16e9836 +size 1224 diff --git a/assets/voxygen/voxel/npc/alligator/male/foot_lf.vox b/assets/voxygen/voxel/npc/alligator/male/foot_lf.vox new file mode 100644 index 0000000000..0537c4aa55 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa76d106bdccceffc575509e44db99bb81b68501216e6d3703ac5dce07c2cf1b +size 1160 diff --git a/assets/voxygen/voxel/npc/alligator/male/foot_rb.vox b/assets/voxygen/voxel/npc/alligator/male/foot_rb.vox new file mode 100644 index 0000000000..6030b818cc --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d801090612e95b24caa5cbe28907cdf33e3a88f6699f5115c9b4ed4792eccff6 +size 1224 diff --git a/assets/voxygen/voxel/npc/alligator/male/foot_rf.vox b/assets/voxygen/voxel/npc/alligator/male/foot_rf.vox new file mode 100644 index 0000000000..c541061a5d --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ad2041d642feb8fbd90bcef57ae64c5a6f769b772809782c47f10336cf3dca9 +size 1160 diff --git a/assets/voxygen/voxel/npc/alligator/male/head_lower.vox b/assets/voxygen/voxel/npc/alligator/male/head_lower.vox new file mode 100644 index 0000000000..c038b75182 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b947ca485d6ac5ab921a5ff88f0ec63638df6bc2230f109edc3f2e57c8cc08a9 +size 1672 diff --git a/assets/voxygen/voxel/npc/alligator/male/head_upper.vox b/assets/voxygen/voxel/npc/alligator/male/head_upper.vox new file mode 100644 index 0000000000..5b6d99dbca --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d4d1a41ead3993911ca3b678e13fe85d742bf2caf87a06f24af0d4721d739ba +size 2608 diff --git a/assets/voxygen/voxel/npc/alligator/male/jaw.vox b/assets/voxygen/voxel/npc/alligator/male/jaw.vox new file mode 100644 index 0000000000..ca45806ac0 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a76b9301a6990c4b7396d4737a390d0be922ec1fc6ee855f7563a43705c1faa3 +size 1464 diff --git a/assets/voxygen/voxel/npc/alligator/male/tail.vox b/assets/voxygen/voxel/npc/alligator/male/tail.vox new file mode 100644 index 0000000000..09971538d9 --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d40ceecef9ffa262b29bca85b2e907db4469beb0d09faad2ac3ad5fb2e7bbec0 +size 1280 diff --git a/assets/voxygen/voxel/npc/alligator/male/torso_back.vox b/assets/voxygen/voxel/npc/alligator/male/torso_back.vox new file mode 100644 index 0000000000..986397b65e --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa83f2237f49e51069411be2d89d549032db8ba6a87a9bdf0538220a0feebc69 +size 2128 diff --git a/assets/voxygen/voxel/npc/alligator/male/torso_front.vox b/assets/voxygen/voxel/npc/alligator/male/torso_front.vox new file mode 100644 index 0000000000..9a8d20e70e --- /dev/null +++ b/assets/voxygen/voxel/npc/alligator/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6180455d9d3b9b82adde8b8a9016124a19e39a148304b9a765d1a4b79f316079 +size 2832 diff --git a/assets/voxygen/voxel/npc/axolotl/female/chest.vox b/assets/voxygen/voxel/npc/axolotl/female/chest.vox new file mode 100644 index 0000000000..d0079e149c --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddc9f5687ec55dd25e98cf4f4fddca222585f9788e2480fc0d04b4095222c93d +size 1352 diff --git a/assets/voxygen/voxel/npc/axolotl/female/feet_b.vox b/assets/voxygen/voxel/npc/axolotl/female/feet_b.vox new file mode 100644 index 0000000000..8fe0d4abc5 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/female/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382afa56ac6638a27743553618aef968203572ff558ed09da06b324178fa888c +size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/female/feet_f.vox b/assets/voxygen/voxel/npc/axolotl/female/feet_f.vox new file mode 100644 index 0000000000..8fe0d4abc5 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/female/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382afa56ac6638a27743553618aef968203572ff558ed09da06b324178fa888c +size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/female/head.vox b/assets/voxygen/voxel/npc/axolotl/female/head.vox new file mode 100644 index 0000000000..2f44cbc2c7 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cdb4af85c499c53e786c9ae7591e051b951bf0c6d568b24c97b01476626c4c2 +size 1420 diff --git a/assets/voxygen/voxel/npc/axolotl/female/tail.vox b/assets/voxygen/voxel/npc/axolotl/female/tail.vox new file mode 100644 index 0000000000..f16e5c2c63 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:778e3722d185f4fda349efde9e31e48c0d3e257294e1874a4b6ba2422b72001f +size 1168 diff --git a/assets/voxygen/voxel/npc/axolotl/male/chest.vox b/assets/voxygen/voxel/npc/axolotl/male/chest.vox new file mode 100644 index 0000000000..d0079e149c --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddc9f5687ec55dd25e98cf4f4fddca222585f9788e2480fc0d04b4095222c93d +size 1352 diff --git a/assets/voxygen/voxel/npc/axolotl/male/feet_b.vox b/assets/voxygen/voxel/npc/axolotl/male/feet_b.vox new file mode 100644 index 0000000000..8fe0d4abc5 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382afa56ac6638a27743553618aef968203572ff558ed09da06b324178fa888c +size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/male/feet_f.vox b/assets/voxygen/voxel/npc/axolotl/male/feet_f.vox new file mode 100644 index 0000000000..8fe0d4abc5 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382afa56ac6638a27743553618aef968203572ff558ed09da06b324178fa888c +size 1128 diff --git a/assets/voxygen/voxel/npc/axolotl/male/head.vox b/assets/voxygen/voxel/npc/axolotl/male/head.vox new file mode 100644 index 0000000000..2f44cbc2c7 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cdb4af85c499c53e786c9ae7591e051b951bf0c6d568b24c97b01476626c4c2 +size 1420 diff --git a/assets/voxygen/voxel/npc/axolotl/male/tail.vox b/assets/voxygen/voxel/npc/axolotl/male/tail.vox new file mode 100644 index 0000000000..f16e5c2c63 --- /dev/null +++ b/assets/voxygen/voxel/npc/axolotl/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:778e3722d185f4fda349efde9e31e48c0d3e257294e1874a4b6ba2422b72001f +size 1168 diff --git a/assets/voxygen/voxel/npc/batfox/female/chest.vox b/assets/voxygen/voxel/npc/batfox/female/chest.vox new file mode 100644 index 0000000000..d881ed37e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8d287c59cea5854e8df4508a933013252f82297bf4cefde89c2eab3f71b1be1 +size 1620 diff --git a/assets/voxygen/voxel/npc/batfox/female/foot_bl.vox b/assets/voxygen/voxel/npc/batfox/female/foot_bl.vox new file mode 100644 index 0000000000..5971164c37 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db72317bcb09fd25c24b7979b75b9bc178413bc2f22e56b2c0ad3152725e50a2 +size 1196 diff --git a/assets/voxygen/voxel/npc/batfox/female/foot_br.vox b/assets/voxygen/voxel/npc/batfox/female/foot_br.vox new file mode 100644 index 0000000000..fbd0fac997 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025a4dcf7972217b6a0d2fd76700d495d3ad34d60a2317362031f0ceaa8144c5 +size 1196 diff --git a/assets/voxygen/voxel/npc/batfox/female/foot_fl.vox b/assets/voxygen/voxel/npc/batfox/female/foot_fl.vox new file mode 100644 index 0000000000..f3c6e19eaa --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4caf7814802ca78f55f5a6322ce142327dfe807b96d14251a65fa562047f284e +size 1164 diff --git a/assets/voxygen/voxel/npc/batfox/female/foot_fr.vox b/assets/voxygen/voxel/npc/batfox/female/foot_fr.vox new file mode 100644 index 0000000000..f67f646001 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f343e07bdb993c08d4d04ead02e966e6ca842be761d0828819c60eeebb6f8b9 +size 1164 diff --git a/assets/voxygen/voxel/npc/batfox/female/head.vox b/assets/voxygen/voxel/npc/batfox/female/head.vox new file mode 100644 index 0000000000..0413f0fc58 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ee85abf7381b659cdf8eb149ac8c8d9e52a75b3588d6b67206548143503f91d +size 2024 diff --git a/assets/voxygen/voxel/npc/batfox/male/chest.vox b/assets/voxygen/voxel/npc/batfox/male/chest.vox new file mode 100644 index 0000000000..d881ed37e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8d287c59cea5854e8df4508a933013252f82297bf4cefde89c2eab3f71b1be1 +size 1620 diff --git a/assets/voxygen/voxel/npc/batfox/male/foot_bl.vox b/assets/voxygen/voxel/npc/batfox/male/foot_bl.vox new file mode 100644 index 0000000000..5971164c37 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db72317bcb09fd25c24b7979b75b9bc178413bc2f22e56b2c0ad3152725e50a2 +size 1196 diff --git a/assets/voxygen/voxel/npc/batfox/male/foot_br.vox b/assets/voxygen/voxel/npc/batfox/male/foot_br.vox new file mode 100644 index 0000000000..fbd0fac997 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025a4dcf7972217b6a0d2fd76700d495d3ad34d60a2317362031f0ceaa8144c5 +size 1196 diff --git a/assets/voxygen/voxel/npc/batfox/male/foot_fl.vox b/assets/voxygen/voxel/npc/batfox/male/foot_fl.vox new file mode 100644 index 0000000000..f3c6e19eaa --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4caf7814802ca78f55f5a6322ce142327dfe807b96d14251a65fa562047f284e +size 1164 diff --git a/assets/voxygen/voxel/npc/batfox/male/foot_fr.vox b/assets/voxygen/voxel/npc/batfox/male/foot_fr.vox new file mode 100644 index 0000000000..f67f646001 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f343e07bdb993c08d4d04ead02e966e6ca842be761d0828819c60eeebb6f8b9 +size 1164 diff --git a/assets/voxygen/voxel/npc/batfox/male/head.vox b/assets/voxygen/voxel/npc/batfox/male/head.vox new file mode 100644 index 0000000000..0413f0fc58 --- /dev/null +++ b/assets/voxygen/voxel/npc/batfox/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ee85abf7381b659cdf8eb149ac8c8d9e52a75b3588d6b67206548143503f91d +size 2024 diff --git a/assets/voxygen/voxel/npc/boar/female/chest.vox b/assets/voxygen/voxel/npc/boar/female/chest.vox new file mode 100644 index 0000000000..33ef872233 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3468a809fdb58edfbaf12d085993e10b100210f3b2e605cd19afc29d263de97c +size 2884 diff --git a/assets/voxygen/voxel/npc/boar/female/foot_bl.vox b/assets/voxygen/voxel/npc/boar/female/foot_bl.vox new file mode 100644 index 0000000000..a3c237ae89 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:966a70b915d1fdbd1307d43071942cb07cd7494b6e8c484a6cd9f1b7ab21a22f +size 1256 diff --git a/assets/voxygen/voxel/npc/boar/female/foot_br.vox b/assets/voxygen/voxel/npc/boar/female/foot_br.vox new file mode 100644 index 0000000000..aeac19e52f --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:778eb369e58f108ab4e4be7547a84622d3b52d4677360e2a1214c5068cec3c71 +size 1256 diff --git a/assets/voxygen/voxel/npc/boar/female/foot_fl.vox b/assets/voxygen/voxel/npc/boar/female/foot_fl.vox new file mode 100644 index 0000000000..6a7eb90734 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:381858b085cb93df0f13c26c77bc0d21ed81b6b8fcbd28752b6e430c50c908b9 +size 1272 diff --git a/assets/voxygen/voxel/npc/boar/female/foot_fr.vox b/assets/voxygen/voxel/npc/boar/female/foot_fr.vox new file mode 100644 index 0000000000..e1cdd727c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4e703d5b4ea0cec57690e58d05fd2761814a43d18084383ae22744bb544d552 +size 1272 diff --git a/assets/voxygen/voxel/npc/boar/female/head.vox b/assets/voxygen/voxel/npc/boar/female/head.vox new file mode 100644 index 0000000000..055972a439 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aae059e0e5796dc063df58edf4338b7a20fcd2b29109630adbb65dbc07ff7960 +size 2152 diff --git a/assets/voxygen/voxel/npc/boar/male/chest.vox b/assets/voxygen/voxel/npc/boar/male/chest.vox new file mode 100644 index 0000000000..622266f2be --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb2f0ea4e177e150504d81e3661c07c0dfeffbbfe47618a630688dab4a41cca0 +size 2924 diff --git a/assets/voxygen/voxel/npc/boar/male/foot_bl.vox b/assets/voxygen/voxel/npc/boar/male/foot_bl.vox new file mode 100644 index 0000000000..a3c237ae89 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:966a70b915d1fdbd1307d43071942cb07cd7494b6e8c484a6cd9f1b7ab21a22f +size 1256 diff --git a/assets/voxygen/voxel/npc/boar/male/foot_br.vox b/assets/voxygen/voxel/npc/boar/male/foot_br.vox new file mode 100644 index 0000000000..aeac19e52f --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:778eb369e58f108ab4e4be7547a84622d3b52d4677360e2a1214c5068cec3c71 +size 1256 diff --git a/assets/voxygen/voxel/npc/boar/male/foot_fl.vox b/assets/voxygen/voxel/npc/boar/male/foot_fl.vox new file mode 100644 index 0000000000..6a7eb90734 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:381858b085cb93df0f13c26c77bc0d21ed81b6b8fcbd28752b6e430c50c908b9 +size 1272 diff --git a/assets/voxygen/voxel/npc/boar/male/foot_fr.vox b/assets/voxygen/voxel/npc/boar/male/foot_fr.vox new file mode 100644 index 0000000000..e1cdd727c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4e703d5b4ea0cec57690e58d05fd2761814a43d18084383ae22744bb544d552 +size 1272 diff --git a/assets/voxygen/voxel/npc/boar/male/head.vox b/assets/voxygen/voxel/npc/boar/male/head.vox new file mode 100644 index 0000000000..dbd27eae9a --- /dev/null +++ b/assets/voxygen/voxel/npc/boar/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96488b885a3f5af3e54939144254dec1885c076878199417adb85e5455263bab +size 2220 diff --git a/assets/voxygen/voxel/npc/cat/female/chest.vox b/assets/voxygen/voxel/npc/cat/female/chest.vox new file mode 100644 index 0000000000..1bc63d191a --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9178fe1351af01b688d786def9f88f5304c701119b4206242c8a88c3aa2bd86 +size 1504 diff --git a/assets/voxygen/voxel/npc/cat/female/foot_bl.vox b/assets/voxygen/voxel/npc/cat/female/foot_bl.vox new file mode 100644 index 0000000000..7ce51f8ef4 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f8a2992d2046e9ce7282411e698d4a517047935f300bc506ad7aea5a874940e +size 1208 diff --git a/assets/voxygen/voxel/npc/cat/female/foot_br.vox b/assets/voxygen/voxel/npc/cat/female/foot_br.vox new file mode 100644 index 0000000000..4a9d9180f0 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95ab9658db4afd6eef0ce23d1daf67ab6d07fff35aea641164e57f6963505ef2 +size 1208 diff --git a/assets/voxygen/voxel/npc/cat/female/foot_fl.vox b/assets/voxygen/voxel/npc/cat/female/foot_fl.vox new file mode 100644 index 0000000000..1187956984 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bfd8c0a663563adb544a6a260bcb11442003fef1ee6ec41e1856aef54ab5ea0 +size 1168 diff --git a/assets/voxygen/voxel/npc/cat/female/foot_fr.vox b/assets/voxygen/voxel/npc/cat/female/foot_fr.vox new file mode 100644 index 0000000000..69426e6eca --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb8500173296a3319987ccf7683a45d6e745151e23a551c1deac0b72908894b +size 1168 diff --git a/assets/voxygen/voxel/npc/cat/female/head.vox b/assets/voxygen/voxel/npc/cat/female/head.vox new file mode 100644 index 0000000000..d209a50e34 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc31311dece576f3b17776baee1ff6de05bf3247490b084cd801ff008d52fde8 +size 1592 diff --git a/assets/voxygen/voxel/npc/cat/male/chest.vox b/assets/voxygen/voxel/npc/cat/male/chest.vox new file mode 100644 index 0000000000..f9735d4a8c --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:787dcfa25802523b7fff86d0bd9550244c109992990aab92baec550dd7c625ec +size 1504 diff --git a/assets/voxygen/voxel/npc/cat/male/foot_bl.vox b/assets/voxygen/voxel/npc/cat/male/foot_bl.vox new file mode 100644 index 0000000000..8c47b3ef56 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da74ca43f9ddf35b387ac7d7521b9bcebb2f7305b59adc0a3d583400ccd3cdd5 +size 1208 diff --git a/assets/voxygen/voxel/npc/cat/male/foot_br.vox b/assets/voxygen/voxel/npc/cat/male/foot_br.vox new file mode 100644 index 0000000000..039940b998 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95157bdf1ebcdbae5e808abda74d5e6cc64456807c1e5ff4e3ce967bda6b904f +size 1208 diff --git a/assets/voxygen/voxel/npc/cat/male/foot_fl.vox b/assets/voxygen/voxel/npc/cat/male/foot_fl.vox new file mode 100644 index 0000000000..b53dc867e9 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c583a50a87ed31f5b5d6110fe5790b9d322165cb437425709b7f755c9946686c +size 1168 diff --git a/assets/voxygen/voxel/npc/cat/male/foot_fr.vox b/assets/voxygen/voxel/npc/cat/male/foot_fr.vox new file mode 100644 index 0000000000..77fbb446e9 --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63eee23d23176b12908fd5a472c049d13fc9a3b6cfcdfe0291f6e52887b0e33f +size 1168 diff --git a/assets/voxygen/voxel/npc/cat/male/head.vox b/assets/voxygen/voxel/npc/cat/male/head.vox new file mode 100644 index 0000000000..c6b038fe5c --- /dev/null +++ b/assets/voxygen/voxel/npc/cat/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c9cc7605a79f308302fdb21177c3a2ae6d0f632995cdcc5e1bdb8816e3b726f +size 1592 diff --git a/assets/voxygen/voxel/npc/chicken/female/head.vox b/assets/voxygen/voxel/npc/chicken/female/head.vox new file mode 100644 index 0000000000..3fe802fc64 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5656f1603c1a21e346a301cf45c9f7116b548f1976fb8bda464d915de2a16362 +size 1224 diff --git a/assets/voxygen/voxel/npc/chicken/female/leg_l.vox b/assets/voxygen/voxel/npc/chicken/female/leg_l.vox new file mode 100644 index 0000000000..f3f3f92eaf --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af7c4dee1203ed93f41878122df5b8206fec38fc65898b3a52b4d1762431e13d +size 1128 diff --git a/assets/voxygen/voxel/npc/chicken/female/leg_r.vox b/assets/voxygen/voxel/npc/chicken/female/leg_r.vox new file mode 100644 index 0000000000..97e0669b46 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96611b035b2996dd8918322112cad637692794a0ff4239fce2163aa6a982a192 +size 1128 diff --git a/assets/voxygen/voxel/npc/chicken/female/tail.vox b/assets/voxygen/voxel/npc/chicken/female/tail.vox new file mode 100644 index 0000000000..c3b77472ec --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270d6bc07ecc4af63cc4fc2f9920a4955829ce6a58dbb15c705fcdb3c3d045c8 +size 1156 diff --git a/assets/voxygen/voxel/npc/chicken/female/torso.vox b/assets/voxygen/voxel/npc/chicken/female/torso.vox new file mode 100644 index 0000000000..fbd421dd1b --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20c70403e4f9f308e24716063ee366a76b258a510e89c202f88d995aa1ec1ba9 +size 1576 diff --git a/assets/voxygen/voxel/npc/chicken/female/wing.vox b/assets/voxygen/voxel/npc/chicken/female/wing.vox new file mode 100644 index 0000000000..1d61299c87 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/wing.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13ef0b8426b14e7c7e76bfe966321dc1cdfed877ff4761d11fd95945e9ed87be +size 1144 diff --git a/assets/voxygen/voxel/npc/chicken/male/head.vox b/assets/voxygen/voxel/npc/chicken/male/head.vox new file mode 100644 index 0000000000..dc5f528386 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:745b56e29acdf0a37c035bc4947dcc61f5dac0e16085bf83c1c8988fa34f3c90 +size 1232 diff --git a/assets/voxygen/voxel/npc/chicken/male/leg_l.vox b/assets/voxygen/voxel/npc/chicken/male/leg_l.vox new file mode 100644 index 0000000000..070a3ca5ff --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9b67581e39726b4632bcf5e505571ba4891c7b90ead0c0b01e1020985fb002c +size 1128 diff --git a/assets/voxygen/voxel/npc/chicken/male/leg_r.vox b/assets/voxygen/voxel/npc/chicken/male/leg_r.vox new file mode 100644 index 0000000000..74e6351068 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6913c2b05a3b606f32320b23544c8ed67540037aaef1c682b232326aa2179fd4 +size 1128 diff --git a/assets/voxygen/voxel/npc/chicken/male/tail.vox b/assets/voxygen/voxel/npc/chicken/male/tail.vox new file mode 100644 index 0000000000..bdb29e071e --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91b8dc32d83e2e8a402552f5a05bdec3abbe1332d53351d1141b28a23d409abd +size 1176 diff --git a/assets/voxygen/voxel/npc/chicken/male/torso.vox b/assets/voxygen/voxel/npc/chicken/male/torso.vox new file mode 100644 index 0000000000..2adddf0e3c --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7455f6b4936d9c1009b17f5b861600e7f3fad5413416e252c91c70bf49c85e4 +size 1576 diff --git a/assets/voxygen/voxel/npc/chicken/male/wing.vox b/assets/voxygen/voxel/npc/chicken/male/wing.vox new file mode 100644 index 0000000000..3066677037 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/wing.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e73b6f0275e1da6f07bcf7a5531202d322407802c593c0f7b6344f147527397b +size 1144 diff --git a/assets/voxygen/voxel/npc/dodarock/female/chest.vox b/assets/voxygen/voxel/npc/dodarock/female/chest.vox new file mode 100644 index 0000000000..9ed2e87887 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fa581ce169d998d8ad26289b46418cf88bc5c397b84e0ea36abb12cd53c7483 +size 3868 diff --git a/assets/voxygen/voxel/npc/dodarock/female/foot_bl.vox b/assets/voxygen/voxel/npc/dodarock/female/foot_bl.vox new file mode 100644 index 0000000000..bfbdd68728 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8e4b030554994fded35de771cdc04f699b0d5dfab7ced47b9ea684652b2c63e +size 1232 diff --git a/assets/voxygen/voxel/npc/dodarock/female/foot_br.vox b/assets/voxygen/voxel/npc/dodarock/female/foot_br.vox new file mode 100644 index 0000000000..0c7ad50b24 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c1569a875d6218b1a51796a93ac7b9985350ad6fa71fe6b5622415d7bbca424 +size 1232 diff --git a/assets/voxygen/voxel/npc/dodarock/female/foot_fl.vox b/assets/voxygen/voxel/npc/dodarock/female/foot_fl.vox new file mode 100644 index 0000000000..3cf115fee0 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65f05a9b69715cb5fffb6c82166e59fa2054619783aa9cbec44849bdbb593607 +size 1548 diff --git a/assets/voxygen/voxel/npc/dodarock/female/foot_fr.vox b/assets/voxygen/voxel/npc/dodarock/female/foot_fr.vox new file mode 100644 index 0000000000..be2a1b29ed --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1306dc7261b141997acdebb492c9ac766245618963c8bc18355e4b705e8b2d36 +size 1548 diff --git a/assets/voxygen/voxel/npc/dodarock/female/head.vox b/assets/voxygen/voxel/npc/dodarock/female/head.vox new file mode 100644 index 0000000000..b61653abea --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf5051514e840a46cf38c6b44e6b1f3cf10a1c7f0ef1945e334315d313e6b414 +size 3236 diff --git a/assets/voxygen/voxel/npc/dodarock/male/chest.vox b/assets/voxygen/voxel/npc/dodarock/male/chest.vox new file mode 100644 index 0000000000..9ed2e87887 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fa581ce169d998d8ad26289b46418cf88bc5c397b84e0ea36abb12cd53c7483 +size 3868 diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox new file mode 100644 index 0000000000..bfbdd68728 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8e4b030554994fded35de771cdc04f699b0d5dfab7ced47b9ea684652b2c63e +size 1232 diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_br.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_br.vox new file mode 100644 index 0000000000..0c7ad50b24 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c1569a875d6218b1a51796a93ac7b9985350ad6fa71fe6b5622415d7bbca424 +size 1232 diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox new file mode 100644 index 0000000000..3cf115fee0 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65f05a9b69715cb5fffb6c82166e59fa2054619783aa9cbec44849bdbb593607 +size 1548 diff --git a/assets/voxygen/voxel/npc/dodarock/male/foot_fr.vox b/assets/voxygen/voxel/npc/dodarock/male/foot_fr.vox new file mode 100644 index 0000000000..be2a1b29ed --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1306dc7261b141997acdebb492c9ac766245618963c8bc18355e4b705e8b2d36 +size 1548 diff --git a/assets/voxygen/voxel/npc/dodarock/male/head.vox b/assets/voxygen/voxel/npc/dodarock/male/head.vox new file mode 100644 index 0000000000..b61653abea --- /dev/null +++ b/assets/voxygen/voxel/npc/dodarock/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf5051514e840a46cf38c6b44e6b1f3cf10a1c7f0ef1945e334315d313e6b414 +size 3236 diff --git a/assets/voxygen/voxel/npc/duck/female/head.vox b/assets/voxygen/voxel/npc/duck/female/head.vox new file mode 100644 index 0000000000..3b26df99d5 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81e5bc6d27fc6f8946331487853c0c8c1cee1b8bf08efb4393340ede5e1ec490 +size 1216 diff --git a/assets/voxygen/voxel/npc/duck/female/leg_l.vox b/assets/voxygen/voxel/npc/duck/female/leg_l.vox new file mode 100644 index 0000000000..3fb63af787 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b86bdb9f386d7ec40fecc6f3877282c3f8e6a4e84454d5c9eb54228bea45f5ba +size 1128 diff --git a/assets/voxygen/voxel/npc/duck/female/leg_r.vox b/assets/voxygen/voxel/npc/duck/female/leg_r.vox new file mode 100644 index 0000000000..3be613af5c --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:483b2b9d8617f0f902f98578a96844242442831762dd4afa09e1198798924079 +size 1128 diff --git a/assets/voxygen/voxel/npc/duck/female/tail.vox b/assets/voxygen/voxel/npc/duck/female/tail.vox new file mode 100644 index 0000000000..0c0e2707eb --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618e0daa8cd2901c75e3fe17658a79a335835e2b7bbb00c5bfb7138314168ec1 +size 1156 diff --git a/assets/voxygen/voxel/npc/duck/female/torso.vox b/assets/voxygen/voxel/npc/duck/female/torso.vox new file mode 100644 index 0000000000..7125dfee9d --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f2d93cf83277b348fcb0775554e77a78315ec9890570486701da787175cb37b +size 1576 diff --git a/assets/voxygen/voxel/npc/duck/female/wing.vox b/assets/voxygen/voxel/npc/duck/female/wing.vox new file mode 100644 index 0000000000..9849a28317 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/wing.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6ca0fc4e689a37163e7c5b64db9cae5e2a79791489326bd67a393ab6cc3b9e9 +size 1144 diff --git a/assets/voxygen/voxel/npc/duck/male/head.vox b/assets/voxygen/voxel/npc/duck/male/head.vox new file mode 100644 index 0000000000..684343bdfe --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee6a99b5e62b4bf623ae2df82a31b59fcbca98239e9bbece43bc53e0782bbcec +size 1216 diff --git a/assets/voxygen/voxel/npc/duck/male/leg_l.vox b/assets/voxygen/voxel/npc/duck/male/leg_l.vox new file mode 100644 index 0000000000..3fb63af787 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b86bdb9f386d7ec40fecc6f3877282c3f8e6a4e84454d5c9eb54228bea45f5ba +size 1128 diff --git a/assets/voxygen/voxel/npc/duck/male/leg_r.vox b/assets/voxygen/voxel/npc/duck/male/leg_r.vox new file mode 100644 index 0000000000..3be613af5c --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:483b2b9d8617f0f902f98578a96844242442831762dd4afa09e1198798924079 +size 1128 diff --git a/assets/voxygen/voxel/npc/duck_m/tail.vox b/assets/voxygen/voxel/npc/duck/male/tail.vox similarity index 100% rename from assets/voxygen/voxel/npc/duck_m/tail.vox rename to assets/voxygen/voxel/npc/duck/male/tail.vox diff --git a/assets/voxygen/voxel/npc/duck/male/torso.vox b/assets/voxygen/voxel/npc/duck/male/torso.vox new file mode 100644 index 0000000000..8f2b02aa1b --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f44ec1e38436dcb5236696922956349593a725cfd95cdae5279bd0d2e7f39ded +size 1576 diff --git a/assets/voxygen/voxel/npc/duck/male/wing.vox b/assets/voxygen/voxel/npc/duck/male/wing.vox new file mode 100644 index 0000000000..5e83039067 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/wing.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd07b1d470989d85762b47d14afbf0dd0438c4557144d4216c0cdd4921e42d75 +size 1144 diff --git a/assets/voxygen/voxel/npc/duck_m/body.vox b/assets/voxygen/voxel/npc/duck_m/body.vox deleted file mode 100644 index 19a3ba1a3b..0000000000 --- a/assets/voxygen/voxel/npc/duck_m/body.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:695d8f719c5bb550643cf3e276cc984ee0953e35cba3da7a0d17bce9b3b8f2dd -size 56063 diff --git a/assets/voxygen/voxel/npc/duck_m/head.vox b/assets/voxygen/voxel/npc/duck_m/head.vox deleted file mode 100644 index 466c83223b..0000000000 --- a/assets/voxygen/voxel/npc/duck_m/head.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b8c1abcecd2c0cc979d2babe83d3797949a986dab1580f50097b08ebe919a190 -size 55703 diff --git a/assets/voxygen/voxel/npc/duck_m/leg_l.vox b/assets/voxygen/voxel/npc/duck_m/leg_l.vox deleted file mode 100644 index 515df8f571..0000000000 --- a/assets/voxygen/voxel/npc/duck_m/leg_l.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:804f7a03dae44eaf54e36c424b7ec00b2c345f8d9f5326f7769ee01aca65a6cb -size 55615 diff --git a/assets/voxygen/voxel/npc/duck_m/leg_r.vox b/assets/voxygen/voxel/npc/duck_m/leg_r.vox deleted file mode 100644 index 0257a695e9..0000000000 --- a/assets/voxygen/voxel/npc/duck_m/leg_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60ff0228f74dae0a6c0b7624b031e38032f473fe40c8bf28a3e71144e64ae4cf -size 55615 diff --git a/assets/voxygen/voxel/npc/duck_m/wing.vox b/assets/voxygen/voxel/npc/duck_m/wing.vox deleted file mode 100644 index afea120592..0000000000 --- a/assets/voxygen/voxel/npc/duck_m/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ed2820afb08af1175ddad78a2a429d57cb9c951abdc0f1215498fd89ba59784 -size 55631 diff --git a/assets/voxygen/voxel/npc/fox/female/chest.vox b/assets/voxygen/voxel/npc/fox/female/chest.vox new file mode 100644 index 0000000000..55145d81a7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b79636274948a21c8ba2365308df7bdf9528e616e2c8d5ebf2705bc5b8657a48 +size 1632 diff --git a/assets/voxygen/voxel/npc/fox/female/foot_bl.vox b/assets/voxygen/voxel/npc/fox/female/foot_bl.vox new file mode 100644 index 0000000000..4d19cdbbba --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb3fb3ffee0736247c7187d14a2f7efae7f6ce517fec4c0ab49137605494efa4 +size 1200 diff --git a/assets/voxygen/voxel/npc/fox/female/foot_br.vox b/assets/voxygen/voxel/npc/fox/female/foot_br.vox new file mode 100644 index 0000000000..4fa88e72a1 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95e5f826066196bc85bb226e756768f3df8cbc91c5f7e48a3fb7af671683b7b2 +size 1200 diff --git a/assets/voxygen/voxel/npc/fox/female/foot_fl.vox b/assets/voxygen/voxel/npc/fox/female/foot_fl.vox new file mode 100644 index 0000000000..858d72a1a9 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c337dd67a451dbd4e0f4eb005f19fc1948186c8212604d3debf8bd60dbb933c +size 1156 diff --git a/assets/voxygen/voxel/npc/fox/female/foot_fr.vox b/assets/voxygen/voxel/npc/fox/female/foot_fr.vox new file mode 100644 index 0000000000..793ff41f2a --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97c17c8090213ac8bdd0b76190ddc5ab65ea2ef34ee50cdde95549446a370431 +size 1156 diff --git a/assets/voxygen/voxel/npc/fox/female/head.vox b/assets/voxygen/voxel/npc/fox/female/head.vox new file mode 100644 index 0000000000..f109ad02ac --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3bae3afdb8853e7a104d47e408c9c76538ad9fc938ad382363fc9fbaa9bb12c +size 1460 diff --git a/assets/voxygen/voxel/npc/fox/male/chest.vox b/assets/voxygen/voxel/npc/fox/male/chest.vox new file mode 100644 index 0000000000..5a741a7200 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac890c4817b8c6bee3429b63dcbffddec3b58a7ac93f94bd3cbd5ce12d5d5663 +size 1632 diff --git a/assets/voxygen/voxel/npc/fox/male/foot_bl.vox b/assets/voxygen/voxel/npc/fox/male/foot_bl.vox new file mode 100644 index 0000000000..e444e3e6d0 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dac3eb3e69f7c82a3f070a8c61868469a1562ada1b5f4266e15ff769d86622e +size 1200 diff --git a/assets/voxygen/voxel/npc/fox/male/foot_br.vox b/assets/voxygen/voxel/npc/fox/male/foot_br.vox new file mode 100644 index 0000000000..05635c403e --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81dadb018ee78ca56bb4bf6a34ed42ee82ff76f693250b6dff2781a4099ece84 +size 1200 diff --git a/assets/voxygen/voxel/npc/fox/male/foot_fl.vox b/assets/voxygen/voxel/npc/fox/male/foot_fl.vox new file mode 100644 index 0000000000..e241d4fbdd --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cd0197f2e6d0434101866f1d9587f521145649ae4b5073587c854948d2bab8e +size 1156 diff --git a/assets/voxygen/voxel/npc/fox/male/foot_fr.vox b/assets/voxygen/voxel/npc/fox/male/foot_fr.vox new file mode 100644 index 0000000000..17b9098872 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14ebd8bce42b7eb5981eb6386aa9465d3a281dc016a23491d34d91607ba91794 +size 1156 diff --git a/assets/voxygen/voxel/npc/fox/male/head.vox b/assets/voxygen/voxel/npc/fox/male/head.vox new file mode 100644 index 0000000000..d4d9c8a322 --- /dev/null +++ b/assets/voxygen/voxel/npc/fox/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:667ac08f1728516487e4b5d2f29527354a2c549211386a1070580a3ec2ce315c +size 1460 diff --git a/assets/voxygen/voxel/npc/fungome/female/chest.vox b/assets/voxygen/voxel/npc/fungome/female/chest.vox new file mode 100644 index 0000000000..b3c3001ead --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6266cf063932bde665aebe3708e65300a1f929205225418d0e17985dff82e908 +size 2840 diff --git a/assets/voxygen/voxel/npc/fungome/female/feet_b.vox b/assets/voxygen/voxel/npc/fungome/female/feet_b.vox new file mode 100644 index 0000000000..2aebd5d5c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/female/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f56c8a2c4fcbb3a495cad034de59840078c4613447874876e22e5f442658a20a +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/female/feet_f.vox b/assets/voxygen/voxel/npc/fungome/female/feet_f.vox new file mode 100644 index 0000000000..2aebd5d5c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/female/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f56c8a2c4fcbb3a495cad034de59840078c4613447874876e22e5f442658a20a +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/female/head.vox b/assets/voxygen/voxel/npc/fungome/female/head.vox new file mode 100644 index 0000000000..68d5137b0b --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3e2257aad4e4b5ba7bc43206ce8e3e19ebf4f96758a20f927589a9795197426 +size 1300 diff --git a/assets/voxygen/voxel/npc/fungome/female/tail.vox b/assets/voxygen/voxel/npc/fungome/female/tail.vox new file mode 100644 index 0000000000..c0d69871b7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c4dc3e1de0732fd1e1cbdb5b8bcaf0df7f7549130624d4d6cf82d9fe0132df +size 1108 diff --git a/assets/voxygen/voxel/npc/fungome/male/chest.vox b/assets/voxygen/voxel/npc/fungome/male/chest.vox new file mode 100644 index 0000000000..b3c3001ead --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6266cf063932bde665aebe3708e65300a1f929205225418d0e17985dff82e908 +size 2840 diff --git a/assets/voxygen/voxel/npc/fungome/male/feet_b.vox b/assets/voxygen/voxel/npc/fungome/male/feet_b.vox new file mode 100644 index 0000000000..2aebd5d5c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f56c8a2c4fcbb3a495cad034de59840078c4613447874876e22e5f442658a20a +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/feet_f.vox b/assets/voxygen/voxel/npc/fungome/male/feet_f.vox new file mode 100644 index 0000000000..2aebd5d5c1 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f56c8a2c4fcbb3a495cad034de59840078c4613447874876e22e5f442658a20a +size 1128 diff --git a/assets/voxygen/voxel/npc/fungome/male/head.vox b/assets/voxygen/voxel/npc/fungome/male/head.vox new file mode 100644 index 0000000000..68d5137b0b --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3e2257aad4e4b5ba7bc43206ce8e3e19ebf4f96758a20f927589a9795197426 +size 1300 diff --git a/assets/voxygen/voxel/npc/fungome/male/tail.vox b/assets/voxygen/voxel/npc/fungome/male/tail.vox new file mode 100644 index 0000000000..c0d69871b7 --- /dev/null +++ b/assets/voxygen/voxel/npc/fungome/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c4dc3e1de0732fd1e1cbdb5b8bcaf0df7f7549130624d4d6cf82d9fe0132df +size 1108 diff --git a/assets/voxygen/voxel/npc/gecko/female/chest.vox b/assets/voxygen/voxel/npc/gecko/female/chest.vox new file mode 100644 index 0000000000..5bfce4e9b0 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0f3c9de244922e529ecf3b5be4f2c5b59030d5ec3cc4d31647d3b294645390f +size 1268 diff --git a/assets/voxygen/voxel/npc/gecko/female/feet_b.vox b/assets/voxygen/voxel/npc/gecko/female/feet_b.vox new file mode 100644 index 0000000000..0e6ac3aaf0 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/female/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c27fa19b797d1c973c6e6155b47df80caeed8c3e1f793f0854b603198e57ea5 +size 1112 diff --git a/assets/voxygen/voxel/npc/gecko/female/feet_f.vox b/assets/voxygen/voxel/npc/gecko/female/feet_f.vox new file mode 100644 index 0000000000..450e1421c7 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/female/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d5f09fb478759d81983e61609c461c87f8e79e533e067533306e25b941c3e15 +size 1112 diff --git a/assets/voxygen/voxel/npc/gecko/female/head.vox b/assets/voxygen/voxel/npc/gecko/female/head.vox new file mode 100644 index 0000000000..95b106dbed --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35891c200c205b7848f2dbf40fe2074d1ce0b1543cb7a6075fb22be589b98c2e +size 1372 diff --git a/assets/voxygen/voxel/npc/gecko/female/tail.vox b/assets/voxygen/voxel/npc/gecko/female/tail.vox new file mode 100644 index 0000000000..bb8a7563f9 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:451f6c6a9d83da6acd25d9048e69c40cd3b9b3ff312267a988aae35df37ab238 +size 1124 diff --git a/assets/voxygen/voxel/npc/gecko/male/chest.vox b/assets/voxygen/voxel/npc/gecko/male/chest.vox new file mode 100644 index 0000000000..5bfce4e9b0 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0f3c9de244922e529ecf3b5be4f2c5b59030d5ec3cc4d31647d3b294645390f +size 1268 diff --git a/assets/voxygen/voxel/npc/gecko/male/feet_b.vox b/assets/voxygen/voxel/npc/gecko/male/feet_b.vox new file mode 100644 index 0000000000..0e6ac3aaf0 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c27fa19b797d1c973c6e6155b47df80caeed8c3e1f793f0854b603198e57ea5 +size 1112 diff --git a/assets/voxygen/voxel/npc/gecko/male/feet_f.vox b/assets/voxygen/voxel/npc/gecko/male/feet_f.vox new file mode 100644 index 0000000000..450e1421c7 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d5f09fb478759d81983e61609c461c87f8e79e533e067533306e25b941c3e15 +size 1112 diff --git a/assets/voxygen/voxel/npc/gecko/male/head.vox b/assets/voxygen/voxel/npc/gecko/male/head.vox new file mode 100644 index 0000000000..95b106dbed --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35891c200c205b7848f2dbf40fe2074d1ce0b1543cb7a6075fb22be589b98c2e +size 1372 diff --git a/assets/voxygen/voxel/npc/gecko/male/tail.vox b/assets/voxygen/voxel/npc/gecko/male/tail.vox new file mode 100644 index 0000000000..bb8a7563f9 --- /dev/null +++ b/assets/voxygen/voxel/npc/gecko/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:451f6c6a9d83da6acd25d9048e69c40cd3b9b3ff312267a988aae35df37ab238 +size 1124 diff --git a/assets/voxygen/voxel/npc/giant/female/foot_l.vox b/assets/voxygen/voxel/npc/giant/female/foot_l.vox new file mode 100644 index 0000000000..a6e7f95b14 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/foot_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0381fb00349446b2b7bb9b3569037bc745699bfaf2ade019efde70e233a5c4c3 +size 1964 diff --git a/assets/voxygen/voxel/npc/giant/female/foot_r.vox b/assets/voxygen/voxel/npc/giant/female/foot_r.vox new file mode 100644 index 0000000000..a6e7f95b14 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0381fb00349446b2b7bb9b3569037bc745699bfaf2ade019efde70e233a5c4c3 +size 1964 diff --git a/assets/voxygen/voxel/npc/giant/female/hand_l.vox b/assets/voxygen/voxel/npc/giant/female/hand_l.vox new file mode 100644 index 0000000000..25decb62bc --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/hand_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:944eddaefc49572e18222028419cc2ecf492bc90a665c43ab7ecb1d8c8bd8044 +size 1392 diff --git a/assets/voxygen/voxel/npc/giant/female/hand_r.vox b/assets/voxygen/voxel/npc/giant/female/hand_r.vox new file mode 100644 index 0000000000..958ee44410 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/hand_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7f35050d1534a1add47893c9651ec220aac67e6190747a4b3c947744c9a9a36 +size 1392 diff --git a/assets/voxygen/voxel/npc/giant/female/head.vox b/assets/voxygen/voxel/npc/giant/female/head.vox new file mode 100644 index 0000000000..c8788e4449 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbeea43aec6edc007c8d271271837664edbd46400200bf5f0bbfe2332f5c6675 +size 5756 diff --git a/assets/voxygen/voxel/npc/giant/female/leg_l.vox b/assets/voxygen/voxel/npc/giant/female/leg_l.vox new file mode 100644 index 0000000000..8172ab59a3 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3565904f0822154d0474ea6498a02a9ee3604fa919f6417af0fdaf49014ed25 +size 1576 diff --git a/assets/voxygen/voxel/npc/giant/female/leg_r.vox b/assets/voxygen/voxel/npc/giant/female/leg_r.vox new file mode 100644 index 0000000000..35057ff177 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f75264495aaf6ad3568758bd6fdf53a2f9cf05d2d1a7dcacc0735253ed6564 +size 1576 diff --git a/assets/voxygen/voxel/npc/giant/female/shoulder_l.vox b/assets/voxygen/voxel/npc/giant/female/shoulder_l.vox new file mode 100644 index 0000000000..f9792d5649 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/shoulder_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40dc9568ab2764fcfe0343c1c2591f547ec06cc2f259bfbe063bf135c0bfd5f +size 2120 diff --git a/assets/voxygen/voxel/npc/giant/female/shoulder_r.vox b/assets/voxygen/voxel/npc/giant/female/shoulder_r.vox new file mode 100644 index 0000000000..fca8f2940a --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/shoulder_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9dd690641b1f3fb441fe9c80fabdaf74d8a57c8c5cfc383755de9398c009c42 +size 2120 diff --git a/assets/voxygen/voxel/npc/giant/female/torso_lower.vox b/assets/voxygen/voxel/npc/giant/female/torso_lower.vox new file mode 100644 index 0000000000..9b42645538 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/torso_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2bc46d0453a37acff0fb6dad72e89720e4acc58c9b524d28242a4d7efdda20e +size 1868 diff --git a/assets/voxygen/voxel/npc/giant/female/torso_upper.vox b/assets/voxygen/voxel/npc/giant/female/torso_upper.vox new file mode 100644 index 0000000000..56b1bffafe --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/female/torso_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62ef18d8a1d599b5de13a6d383af92562aa982dde6fca3356400138614d22657 +size 4932 diff --git a/assets/voxygen/voxel/npc/giant/male/foot_l.vox b/assets/voxygen/voxel/npc/giant/male/foot_l.vox new file mode 100644 index 0000000000..a6e7f95b14 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/foot_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0381fb00349446b2b7bb9b3569037bc745699bfaf2ade019efde70e233a5c4c3 +size 1964 diff --git a/assets/voxygen/voxel/npc/giant/male/foot_r.vox b/assets/voxygen/voxel/npc/giant/male/foot_r.vox new file mode 100644 index 0000000000..a6e7f95b14 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0381fb00349446b2b7bb9b3569037bc745699bfaf2ade019efde70e233a5c4c3 +size 1964 diff --git a/assets/voxygen/voxel/npc/giant/male/hand_l.vox b/assets/voxygen/voxel/npc/giant/male/hand_l.vox new file mode 100644 index 0000000000..25decb62bc --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/hand_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:944eddaefc49572e18222028419cc2ecf492bc90a665c43ab7ecb1d8c8bd8044 +size 1392 diff --git a/assets/voxygen/voxel/npc/giant/male/hand_r.vox b/assets/voxygen/voxel/npc/giant/male/hand_r.vox new file mode 100644 index 0000000000..958ee44410 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/hand_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7f35050d1534a1add47893c9651ec220aac67e6190747a4b3c947744c9a9a36 +size 1392 diff --git a/assets/voxygen/voxel/npc/giant/male/head.vox b/assets/voxygen/voxel/npc/giant/male/head.vox new file mode 100644 index 0000000000..c8788e4449 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbeea43aec6edc007c8d271271837664edbd46400200bf5f0bbfe2332f5c6675 +size 5756 diff --git a/assets/voxygen/voxel/npc/giant/male/leg_l.vox b/assets/voxygen/voxel/npc/giant/male/leg_l.vox new file mode 100644 index 0000000000..8172ab59a3 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3565904f0822154d0474ea6498a02a9ee3604fa919f6417af0fdaf49014ed25 +size 1576 diff --git a/assets/voxygen/voxel/npc/giant/male/leg_r.vox b/assets/voxygen/voxel/npc/giant/male/leg_r.vox new file mode 100644 index 0000000000..35057ff177 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f75264495aaf6ad3568758bd6fdf53a2f9cf05d2d1a7dcacc0735253ed6564 +size 1576 diff --git a/assets/voxygen/voxel/npc/giant/male/shoulder_l.vox b/assets/voxygen/voxel/npc/giant/male/shoulder_l.vox new file mode 100644 index 0000000000..f9792d5649 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/shoulder_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40dc9568ab2764fcfe0343c1c2591f547ec06cc2f259bfbe063bf135c0bfd5f +size 2120 diff --git a/assets/voxygen/voxel/npc/giant/male/shoulder_r.vox b/assets/voxygen/voxel/npc/giant/male/shoulder_r.vox new file mode 100644 index 0000000000..fca8f2940a --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/shoulder_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9dd690641b1f3fb441fe9c80fabdaf74d8a57c8c5cfc383755de9398c009c42 +size 2120 diff --git a/assets/voxygen/voxel/npc/giant/male/torso_lower.vox b/assets/voxygen/voxel/npc/giant/male/torso_lower.vox new file mode 100644 index 0000000000..9b42645538 --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/torso_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2bc46d0453a37acff0fb6dad72e89720e4acc58c9b524d28242a4d7efdda20e +size 1868 diff --git a/assets/voxygen/voxel/npc/giant/male/torso_upper.vox b/assets/voxygen/voxel/npc/giant/male/torso_upper.vox new file mode 100644 index 0000000000..56b1bffafe --- /dev/null +++ b/assets/voxygen/voxel/npc/giant/male/torso_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62ef18d8a1d599b5de13a6d383af92562aa982dde6fca3356400138614d22657 +size 4932 diff --git a/assets/voxygen/voxel/npc/goose/female/head.vox b/assets/voxygen/voxel/npc/goose/female/head.vox new file mode 100644 index 0000000000..c860381d53 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:838272b8bdf5aef2f030a08bec2dcc27a463ee9cc4aeaac19400cf0be7c49674 +size 1376 diff --git a/assets/voxygen/voxel/npc/goose/female/leg_l.vox b/assets/voxygen/voxel/npc/goose/female/leg_l.vox new file mode 100644 index 0000000000..d55ea91e81 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/female/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5279fc8f6bf609a2e454325e2d1bfd42f8ad957be849eace1115faef8e09bfc2 +size 1132 diff --git a/assets/voxygen/voxel/npc/goose/female/leg_r.vox b/assets/voxygen/voxel/npc/goose/female/leg_r.vox new file mode 100644 index 0000000000..4a0313fad9 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72b528c2fb661def8ed68c2cb6b5b6fac4e189392ae01d958c981d644db3d6ac +size 1132 diff --git a/assets/voxygen/voxel/npc/goose/female/tail.vox b/assets/voxygen/voxel/npc/goose/female/tail.vox new file mode 100644 index 0000000000..3c93ae58ec --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d14b35c2f92b946a7ed794e04fafaf09fcb285e05060e3b700dcb9c9a05906 +size 1248 diff --git a/assets/voxygen/voxel/npc/goose/female/torso.vox b/assets/voxygen/voxel/npc/goose/female/torso.vox new file mode 100644 index 0000000000..e4a0465587 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/female/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45336cbd13c3a205599d24ac6d1c5bf6bd673ed014a7452da03a492e65ecdd2f +size 2460 diff --git a/assets/voxygen/voxel/npc/goose/female/wing.vox b/assets/voxygen/voxel/npc/goose/female/wing.vox new file mode 100644 index 0000000000..b747bd6f4c --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/female/wing.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6c34a1ac2d80c70443166472d3f557aada9c16f05e20661bd99bb1a1301ad8d +size 1172 diff --git a/assets/voxygen/voxel/npc/goose/male/head.vox b/assets/voxygen/voxel/npc/goose/male/head.vox new file mode 100644 index 0000000000..c860381d53 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:838272b8bdf5aef2f030a08bec2dcc27a463ee9cc4aeaac19400cf0be7c49674 +size 1376 diff --git a/assets/voxygen/voxel/npc/goose/male/leg_l.vox b/assets/voxygen/voxel/npc/goose/male/leg_l.vox new file mode 100644 index 0000000000..d55ea91e81 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5279fc8f6bf609a2e454325e2d1bfd42f8ad957be849eace1115faef8e09bfc2 +size 1132 diff --git a/assets/voxygen/voxel/npc/goose/male/leg_r.vox b/assets/voxygen/voxel/npc/goose/male/leg_r.vox new file mode 100644 index 0000000000..4a0313fad9 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72b528c2fb661def8ed68c2cb6b5b6fac4e189392ae01d958c981d644db3d6ac +size 1132 diff --git a/assets/voxygen/voxel/npc/goose/male/tail.vox b/assets/voxygen/voxel/npc/goose/male/tail.vox new file mode 100644 index 0000000000..3c93ae58ec --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d14b35c2f92b946a7ed794e04fafaf09fcb285e05060e3b700dcb9c9a05906 +size 1248 diff --git a/assets/voxygen/voxel/npc/goose/male/torso.vox b/assets/voxygen/voxel/npc/goose/male/torso.vox new file mode 100644 index 0000000000..e4a0465587 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45336cbd13c3a205599d24ac6d1c5bf6bd673ed014a7452da03a492e65ecdd2f +size 2460 diff --git a/assets/voxygen/voxel/npc/goose/male/wing.vox b/assets/voxygen/voxel/npc/goose/male/wing.vox new file mode 100644 index 0000000000..b747bd6f4c --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/wing.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6c34a1ac2d80c70443166472d3f557aada9c16f05e20661bd99bb1a1301ad8d +size 1172 diff --git a/assets/voxygen/voxel/npc/holladon/female/chest.vox b/assets/voxygen/voxel/npc/holladon/female/chest.vox new file mode 100644 index 0000000000..99bd964c2d --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01d2624d38eff5729e36c02ecf5f55c200dc5f3cd54bc0ef4406bdfba25bb5b7 +size 2320 diff --git a/assets/voxygen/voxel/npc/holladon/female/foot_bl.vox b/assets/voxygen/voxel/npc/holladon/female/foot_bl.vox new file mode 100644 index 0000000000..a8bf362869 --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcce6b18422e3e3b642e62e689cab55e2070b5256bc223b52d72d7c518d4b0ed +size 1196 diff --git a/assets/voxygen/voxel/npc/holladon/female/foot_br.vox b/assets/voxygen/voxel/npc/holladon/female/foot_br.vox new file mode 100644 index 0000000000..e4184c7690 --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e7dee876086a5856742a805f8ab80c321ebb64c21b0a7f857e5d2aec7453306 +size 1196 diff --git a/assets/voxygen/voxel/npc/holladon/female/foot_fl.vox b/assets/voxygen/voxel/npc/holladon/female/foot_fl.vox new file mode 100644 index 0000000000..20436cd81a --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdd7fe6dafd0b74416463a988418d9ae4e0b5ea3c014c6fdf8200f4b0b8973a0 +size 1184 diff --git a/assets/voxygen/voxel/npc/holladon/female/foot_fr.vox b/assets/voxygen/voxel/npc/holladon/female/foot_fr.vox new file mode 100644 index 0000000000..05167204d8 --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd8d4ba6094dc6c83b25d57f16fdcf036e4c157dac7470743411fc77592e8ef7 +size 1184 diff --git a/assets/voxygen/voxel/npc/holladon/female/head.vox b/assets/voxygen/voxel/npc/holladon/female/head.vox new file mode 100644 index 0000000000..6b319d7fcc --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfba8f3bd8a34f05963c3644634495c1567a13d0cc42e1881bb3f8522af4d4f9 +size 1676 diff --git a/assets/voxygen/voxel/npc/holladon/male/chest.vox b/assets/voxygen/voxel/npc/holladon/male/chest.vox new file mode 100644 index 0000000000..99bd964c2d --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01d2624d38eff5729e36c02ecf5f55c200dc5f3cd54bc0ef4406bdfba25bb5b7 +size 2320 diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_bl.vox b/assets/voxygen/voxel/npc/holladon/male/foot_bl.vox new file mode 100644 index 0000000000..a8bf362869 --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcce6b18422e3e3b642e62e689cab55e2070b5256bc223b52d72d7c518d4b0ed +size 1196 diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_br.vox b/assets/voxygen/voxel/npc/holladon/male/foot_br.vox new file mode 100644 index 0000000000..e4184c7690 --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e7dee876086a5856742a805f8ab80c321ebb64c21b0a7f857e5d2aec7453306 +size 1196 diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox b/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox new file mode 100644 index 0000000000..20436cd81a --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdd7fe6dafd0b74416463a988418d9ae4e0b5ea3c014c6fdf8200f4b0b8973a0 +size 1184 diff --git a/assets/voxygen/voxel/npc/holladon/male/foot_fr.vox b/assets/voxygen/voxel/npc/holladon/male/foot_fr.vox new file mode 100644 index 0000000000..05167204d8 --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd8d4ba6094dc6c83b25d57f16fdcf036e4c157dac7470743411fc77592e8ef7 +size 1184 diff --git a/assets/voxygen/voxel/npc/holladon/male/head.vox b/assets/voxygen/voxel/npc/holladon/male/head.vox new file mode 100644 index 0000000000..6b319d7fcc --- /dev/null +++ b/assets/voxygen/voxel/npc/holladon/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfba8f3bd8a34f05963c3644634495c1567a13d0cc42e1881bb3f8522af4d4f9 +size 1676 diff --git a/assets/voxygen/voxel/npc/jackalope/female/chest.vox b/assets/voxygen/voxel/npc/jackalope/female/chest.vox new file mode 100644 index 0000000000..7cb3b89cf1 --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb982aa17793394e9972cd27259222bd9d87bd56801e9fb37cbeefb2f460767 +size 1748 diff --git a/assets/voxygen/voxel/npc/jackalope/female/foot_bl.vox b/assets/voxygen/voxel/npc/jackalope/female/foot_bl.vox new file mode 100644 index 0000000000..efbc0f88ba --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ff7aaaf7fb12c68f29e90121862efd7f4500df902b9d83e3828de3a628389df +size 1296 diff --git a/assets/voxygen/voxel/npc/jackalope/female/foot_br.vox b/assets/voxygen/voxel/npc/jackalope/female/foot_br.vox new file mode 100644 index 0000000000..55b9b9d21c --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04da13ca9c68dfdc58f32d385d482ae37544fabac4c92ac13820ae858d3a4be1 +size 1296 diff --git a/assets/voxygen/voxel/npc/jackalope/female/foot_fl.vox b/assets/voxygen/voxel/npc/jackalope/female/foot_fl.vox new file mode 100644 index 0000000000..7ebcb26e49 --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f05e59572f10d14316f5633e11dadbb64b74fe2fe92542c0c78630770b52827f +size 1164 diff --git a/assets/voxygen/voxel/npc/jackalope/female/foot_fr.vox b/assets/voxygen/voxel/npc/jackalope/female/foot_fr.vox new file mode 100644 index 0000000000..1ca33a3960 --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61cb8ee173957ff56da0a5372d2d75091e00ad4384a766daffe53f5448e8b016 +size 1164 diff --git a/assets/voxygen/voxel/npc/jackalope/female/head.vox b/assets/voxygen/voxel/npc/jackalope/female/head.vox new file mode 100644 index 0000000000..6c1ff8243f --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00f90c53bafe5cf31ddd6ddd847f8c99d2693835ac184a8ef0cc10503469595d +size 1628 diff --git a/assets/voxygen/voxel/npc/jackalope/male/chest.vox b/assets/voxygen/voxel/npc/jackalope/male/chest.vox new file mode 100644 index 0000000000..7cb3b89cf1 --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb982aa17793394e9972cd27259222bd9d87bd56801e9fb37cbeefb2f460767 +size 1748 diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox new file mode 100644 index 0000000000..efbc0f88ba --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ff7aaaf7fb12c68f29e90121862efd7f4500df902b9d83e3828de3a628389df +size 1296 diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_br.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_br.vox new file mode 100644 index 0000000000..55b9b9d21c --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04da13ca9c68dfdc58f32d385d482ae37544fabac4c92ac13820ae858d3a4be1 +size 1296 diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox new file mode 100644 index 0000000000..7ebcb26e49 --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f05e59572f10d14316f5633e11dadbb64b74fe2fe92542c0c78630770b52827f +size 1164 diff --git a/assets/voxygen/voxel/npc/jackalope/male/foot_fr.vox b/assets/voxygen/voxel/npc/jackalope/male/foot_fr.vox new file mode 100644 index 0000000000..1ca33a3960 --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61cb8ee173957ff56da0a5372d2d75091e00ad4384a766daffe53f5448e8b016 +size 1164 diff --git a/assets/voxygen/voxel/npc/jackalope/male/head.vox b/assets/voxygen/voxel/npc/jackalope/male/head.vox new file mode 100644 index 0000000000..6c1ff8243f --- /dev/null +++ b/assets/voxygen/voxel/npc/jackalope/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00f90c53bafe5cf31ddd6ddd847f8c99d2693835ac184a8ef0cc10503469595d +size 1628 diff --git a/assets/voxygen/voxel/npc/knight/foot_l.vox b/assets/voxygen/voxel/npc/knight/foot_l.vox deleted file mode 100644 index d5946e40ed..0000000000 --- a/assets/voxygen/voxel/npc/knight/foot_l.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ef4829618aa75b7d87bf608eb06c761f03f798912982e2edf971a2999531be8 -size 1388 diff --git a/assets/voxygen/voxel/npc/knight/foot_r.vox b/assets/voxygen/voxel/npc/knight/foot_r.vox deleted file mode 100644 index 83361e2b9e..0000000000 --- a/assets/voxygen/voxel/npc/knight/foot_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:634d800724de41dd2755f3c066aa748797aff5c299c620651d736e2a8095772e -size 1388 diff --git a/assets/voxygen/voxel/npc/knight/hand_l.vox b/assets/voxygen/voxel/npc/knight/hand_l.vox deleted file mode 100644 index d6fb9a604e..0000000000 --- a/assets/voxygen/voxel/npc/knight/hand_l.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:392002386275e85e7fcc9d2174baf9da9d6df8e40818b0aee184c191dfe736a5 -size 1440 diff --git a/assets/voxygen/voxel/npc/knight/hand_r.vox b/assets/voxygen/voxel/npc/knight/hand_r.vox deleted file mode 100644 index 7f297f3cd8..0000000000 --- a/assets/voxygen/voxel/npc/knight/hand_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9257231eac4887eec381a900b743b0b02fae1d626146767b79042c3b6ee135a -size 1432 diff --git a/assets/voxygen/voxel/npc/knight/head.vox b/assets/voxygen/voxel/npc/knight/head.vox deleted file mode 100644 index 70f7667c63..0000000000 --- a/assets/voxygen/voxel/npc/knight/head.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4432921d3f584bdcdf5ea47bb89771532bdaa43a0c2bc65d6ba10f61e7a2f123 -size 3524 diff --git a/assets/voxygen/voxel/npc/knight/leg_l.vox b/assets/voxygen/voxel/npc/knight/leg_l.vox deleted file mode 100644 index 8f200e1f5a..0000000000 --- a/assets/voxygen/voxel/npc/knight/leg_l.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b183b026fdee036061550b9b7fa790e5921ae19a7355b1ff6e478f8a2cdfa489 -size 1776 diff --git a/assets/voxygen/voxel/npc/knight/leg_r.vox b/assets/voxygen/voxel/npc/knight/leg_r.vox deleted file mode 100644 index c60d410e74..0000000000 --- a/assets/voxygen/voxel/npc/knight/leg_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60563e0e3cf012f3da6f3d5069fd3450cf73c7273b3e2ac55082daa5bc1b0f8b -size 1776 diff --git a/assets/voxygen/voxel/npc/knight/lower_torso.vox b/assets/voxygen/voxel/npc/knight/lower_torso.vox deleted file mode 100644 index e04193bc0b..0000000000 --- a/assets/voxygen/voxel/npc/knight/lower_torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a9f2658e6da77d24671ea4375f24703714b1d9ed0d6e035dbddefe4fc595393 -size 4260 diff --git a/assets/voxygen/voxel/npc/knight/shoulder_l.vox b/assets/voxygen/voxel/npc/knight/shoulder_l.vox deleted file mode 100644 index f227e0e4db..0000000000 --- a/assets/voxygen/voxel/npc/knight/shoulder_l.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:11e0fcaef237348c3a7d2375f3714d62ee9e0f707a189612f600eac506dffc3e -size 1748 diff --git a/assets/voxygen/voxel/npc/knight/shoulder_r.vox b/assets/voxygen/voxel/npc/knight/shoulder_r.vox deleted file mode 100644 index 624d5be848..0000000000 --- a/assets/voxygen/voxel/npc/knight/shoulder_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0f03637a6b4574d0554473e9d971a595ba09053d732beea48d03388c613b558c -size 1748 diff --git a/assets/voxygen/voxel/npc/knight/torso_upper.vox b/assets/voxygen/voxel/npc/knight/torso_upper.vox deleted file mode 100644 index e4ada8306d..0000000000 --- a/assets/voxygen/voxel/npc/knight/torso_upper.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:07437596c5a7947da998b5bb53bc87ab4e3bfb4d9f94c1202bf60b8736b67c5c -size 6832 diff --git a/assets/voxygen/voxel/npc/lion/female/ears.vox b/assets/voxygen/voxel/npc/lion/female/ears.vox new file mode 100644 index 0000000000..b83f27d280 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5da8b177a8ee03c37859aad386f5b02b576b3b0fb78b8ed9285c6caa6b03cdef +size 1144 diff --git a/assets/voxygen/voxel/npc/lion/female/foot_lb.vox b/assets/voxygen/voxel/npc/lion/female/foot_lb.vox new file mode 100644 index 0000000000..1cc8a58f4e --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb425c1b1c2de5f34aad8b446d11452316e4ff817f0363485a341acfcd610615 +size 1236 diff --git a/assets/voxygen/voxel/npc/lion/female/foot_lf.vox b/assets/voxygen/voxel/npc/lion/female/foot_lf.vox new file mode 100644 index 0000000000..130a75c6e6 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39094f47c1b493dcd2830f6b968574a3f1b9645df833dcd660a8e6b99eb96e10 +size 1192 diff --git a/assets/voxygen/voxel/npc/lion/female/foot_rb.vox b/assets/voxygen/voxel/npc/lion/female/foot_rb.vox new file mode 100644 index 0000000000..789add3149 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70f71d140c6fe3e06b58cf494b80c083e65c378f9c9bb917dd61a57be53fb37d +size 1236 diff --git a/assets/voxygen/voxel/npc/lion/female/foot_rf.vox b/assets/voxygen/voxel/npc/lion/female/foot_rf.vox new file mode 100644 index 0000000000..536317ba2a --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6d8c0b488da818ece1b432cceb25b6b6918ca6dabf861c16f4501a72783e1da +size 1192 diff --git a/assets/voxygen/voxel/npc/lion/female/head_lower.vox b/assets/voxygen/voxel/npc/lion/female/head_lower.vox new file mode 100644 index 0000000000..a6e896767c --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61a60d1011650fac7611fd15fefa0d902008e4a0c303fe04c09ba4f3e4c75c60 +size 4612 diff --git a/assets/voxygen/voxel/npc/lion/female/head_upper.vox b/assets/voxygen/voxel/npc/lion/female/head_upper.vox new file mode 100644 index 0000000000..4d4b920f19 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a67df6d3da3297238d0ed88ea748ffacc9fb668a8bb84f967912a0c67635e43 +size 2480 diff --git a/assets/voxygen/voxel/npc/lion/female/jaw.vox b/assets/voxygen/voxel/npc/lion/female/jaw.vox new file mode 100644 index 0000000000..4cbd653974 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3dd8b80b13d2b48774212987d1a79f6ed3c5e455b0f40dbf87f207b537c8993 +size 1164 diff --git a/assets/voxygen/voxel/npc/lion/female/tail.vox b/assets/voxygen/voxel/npc/lion/female/tail.vox new file mode 100644 index 0000000000..bdd60af624 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cf58ea617498f68b3372c394ac7c518d39e58a9a3d54fe83da2445a859aeab9 +size 1140 diff --git a/assets/voxygen/voxel/npc/lion/female/torso_back.vox b/assets/voxygen/voxel/npc/lion/female/torso_back.vox new file mode 100644 index 0000000000..a0784e9f45 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7ceaec1b3d9a25dc1bfbd94c99baf1a142d93fd1d8d67f2202c03bc573d140e +size 4764 diff --git a/assets/voxygen/voxel/npc/lion/female/torso_front.vox b/assets/voxygen/voxel/npc/lion/female/torso_front.vox new file mode 100644 index 0000000000..b80e7486ba --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1856787c6983d1bdd7278098b3a8eb9a4a8d31e1a78f1fdaa29e535389c4265 +size 5880 diff --git a/assets/voxygen/voxel/npc/lion/male/ears.vox b/assets/voxygen/voxel/npc/lion/male/ears.vox new file mode 100644 index 0000000000..b83f27d280 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5da8b177a8ee03c37859aad386f5b02b576b3b0fb78b8ed9285c6caa6b03cdef +size 1144 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_lb.vox b/assets/voxygen/voxel/npc/lion/male/foot_lb.vox new file mode 100644 index 0000000000..1cc8a58f4e --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb425c1b1c2de5f34aad8b446d11452316e4ff817f0363485a341acfcd610615 +size 1236 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_lf.vox b/assets/voxygen/voxel/npc/lion/male/foot_lf.vox new file mode 100644 index 0000000000..130a75c6e6 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39094f47c1b493dcd2830f6b968574a3f1b9645df833dcd660a8e6b99eb96e10 +size 1192 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_rb.vox b/assets/voxygen/voxel/npc/lion/male/foot_rb.vox new file mode 100644 index 0000000000..789add3149 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70f71d140c6fe3e06b58cf494b80c083e65c378f9c9bb917dd61a57be53fb37d +size 1236 diff --git a/assets/voxygen/voxel/npc/lion/male/foot_rf.vox b/assets/voxygen/voxel/npc/lion/male/foot_rf.vox new file mode 100644 index 0000000000..536317ba2a --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6d8c0b488da818ece1b432cceb25b6b6918ca6dabf861c16f4501a72783e1da +size 1192 diff --git a/assets/voxygen/voxel/npc/lion/male/head_lower.vox b/assets/voxygen/voxel/npc/lion/male/head_lower.vox new file mode 100644 index 0000000000..a6e896767c --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61a60d1011650fac7611fd15fefa0d902008e4a0c303fe04c09ba4f3e4c75c60 +size 4612 diff --git a/assets/voxygen/voxel/npc/lion/male/head_upper.vox b/assets/voxygen/voxel/npc/lion/male/head_upper.vox new file mode 100644 index 0000000000..4d4b920f19 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a67df6d3da3297238d0ed88ea748ffacc9fb668a8bb84f967912a0c67635e43 +size 2480 diff --git a/assets/voxygen/voxel/npc/lion/male/jaw.vox b/assets/voxygen/voxel/npc/lion/male/jaw.vox new file mode 100644 index 0000000000..4cbd653974 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3dd8b80b13d2b48774212987d1a79f6ed3c5e455b0f40dbf87f207b537c8993 +size 1164 diff --git a/assets/voxygen/voxel/npc/lion/male/tail.vox b/assets/voxygen/voxel/npc/lion/male/tail.vox new file mode 100644 index 0000000000..bdd60af624 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cf58ea617498f68b3372c394ac7c518d39e58a9a3d54fe83da2445a859aeab9 +size 1140 diff --git a/assets/voxygen/voxel/npc/lion/male/torso_back.vox b/assets/voxygen/voxel/npc/lion/male/torso_back.vox new file mode 100644 index 0000000000..a0784e9f45 --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7ceaec1b3d9a25dc1bfbd94c99baf1a142d93fd1d8d67f2202c03bc573d140e +size 4764 diff --git a/assets/voxygen/voxel/npc/lion/male/torso_front.vox b/assets/voxygen/voxel/npc/lion/male/torso_front.vox new file mode 100644 index 0000000000..b80e7486ba --- /dev/null +++ b/assets/voxygen/voxel/npc/lion/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1856787c6983d1bdd7278098b3a8eb9a4a8d31e1a78f1fdaa29e535389c4265 +size 5880 diff --git a/assets/voxygen/voxel/npc/monitor/female/foot_lb.vox b/assets/voxygen/voxel/npc/monitor/female/foot_lb.vox new file mode 100644 index 0000000000..e87a1559d6 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca3cadf65632c1f33be01defde7e9aa0b40a3c73487d13798835a10a4cc69766 +size 1188 diff --git a/assets/voxygen/voxel/npc/monitor/female/foot_lf.vox b/assets/voxygen/voxel/npc/monitor/female/foot_lf.vox new file mode 100644 index 0000000000..f78b3f308e --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:531f74d9e976f2c5eeb901e7119d51fd9b884d9f6808574ee4adcd1208a505a4 +size 1156 diff --git a/assets/voxygen/voxel/npc/monitor/female/foot_rb.vox b/assets/voxygen/voxel/npc/monitor/female/foot_rb.vox new file mode 100644 index 0000000000..662a277056 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:623316d753a546cba938b90dcc2c7cc4d439c556120f4f77d1e3e9bb6576fd90 +size 1188 diff --git a/assets/voxygen/voxel/npc/monitor/female/foot_rf.vox b/assets/voxygen/voxel/npc/monitor/female/foot_rf.vox new file mode 100644 index 0000000000..e87a1559d6 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca3cadf65632c1f33be01defde7e9aa0b40a3c73487d13798835a10a4cc69766 +size 1188 diff --git a/assets/voxygen/voxel/npc/monitor/female/head_lower.vox b/assets/voxygen/voxel/npc/monitor/female/head_lower.vox new file mode 100644 index 0000000000..64218a9882 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c56d9b653b3024884c90f54ce0ae7ec0d025b5168b56ff827d474ea5cb9aff2 +size 1488 diff --git a/assets/voxygen/voxel/npc/monitor/female/head_upper.vox b/assets/voxygen/voxel/npc/monitor/female/head_upper.vox new file mode 100644 index 0000000000..1813e3348e --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeac9770d83233807c78484e3b5b5735d3b1cd64b221463185f7afe3b7fa985c +size 1968 diff --git a/assets/voxygen/voxel/npc/monitor/female/jaw.vox b/assets/voxygen/voxel/npc/monitor/female/jaw.vox new file mode 100644 index 0000000000..38f4a2cad6 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8f1ed4297a32a8d82134b413d7d12f8c872b7219ea8816be43dde34062a6ac2 +size 1240 diff --git a/assets/voxygen/voxel/npc/monitor/female/tail.vox b/assets/voxygen/voxel/npc/monitor/female/tail.vox new file mode 100644 index 0000000000..464f0d7cea --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c820ac6d830720b16d2d6a189e1f1bb0ee53eae05ab1d4a649c7b3e0b8a9c80 +size 1216 diff --git a/assets/voxygen/voxel/npc/monitor/female/torso_back.vox b/assets/voxygen/voxel/npc/monitor/female/torso_back.vox new file mode 100644 index 0000000000..2c356a2536 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31f836170639602f91dd8b69fe3e1050470ae18675c7dfb70beea22e79df4dfc +size 1704 diff --git a/assets/voxygen/voxel/npc/monitor/female/torso_front.vox b/assets/voxygen/voxel/npc/monitor/female/torso_front.vox new file mode 100644 index 0000000000..7dcc04845d --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5bc8b1ca8dc4769726317b163dc1490478eb0d594d3dbbcc6f5c23240a07c1a +size 2064 diff --git a/assets/voxygen/voxel/npc/monitor/male/foot_lb.vox b/assets/voxygen/voxel/npc/monitor/male/foot_lb.vox new file mode 100644 index 0000000000..e87a1559d6 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca3cadf65632c1f33be01defde7e9aa0b40a3c73487d13798835a10a4cc69766 +size 1188 diff --git a/assets/voxygen/voxel/npc/monitor/male/foot_lf.vox b/assets/voxygen/voxel/npc/monitor/male/foot_lf.vox new file mode 100644 index 0000000000..f78b3f308e --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:531f74d9e976f2c5eeb901e7119d51fd9b884d9f6808574ee4adcd1208a505a4 +size 1156 diff --git a/assets/voxygen/voxel/npc/monitor/male/foot_rb.vox b/assets/voxygen/voxel/npc/monitor/male/foot_rb.vox new file mode 100644 index 0000000000..662a277056 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:623316d753a546cba938b90dcc2c7cc4d439c556120f4f77d1e3e9bb6576fd90 +size 1188 diff --git a/assets/voxygen/voxel/npc/monitor/male/foot_rf.vox b/assets/voxygen/voxel/npc/monitor/male/foot_rf.vox new file mode 100644 index 0000000000..e87a1559d6 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca3cadf65632c1f33be01defde7e9aa0b40a3c73487d13798835a10a4cc69766 +size 1188 diff --git a/assets/voxygen/voxel/npc/monitor/male/head_lower.vox b/assets/voxygen/voxel/npc/monitor/male/head_lower.vox new file mode 100644 index 0000000000..64218a9882 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c56d9b653b3024884c90f54ce0ae7ec0d025b5168b56ff827d474ea5cb9aff2 +size 1488 diff --git a/assets/voxygen/voxel/npc/monitor/male/head_upper.vox b/assets/voxygen/voxel/npc/monitor/male/head_upper.vox new file mode 100644 index 0000000000..1813e3348e --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeac9770d83233807c78484e3b5b5735d3b1cd64b221463185f7afe3b7fa985c +size 1968 diff --git a/assets/voxygen/voxel/npc/monitor/male/jaw.vox b/assets/voxygen/voxel/npc/monitor/male/jaw.vox new file mode 100644 index 0000000000..38f4a2cad6 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8f1ed4297a32a8d82134b413d7d12f8c872b7219ea8816be43dde34062a6ac2 +size 1240 diff --git a/assets/voxygen/voxel/npc/monitor/male/tail.vox b/assets/voxygen/voxel/npc/monitor/male/tail.vox new file mode 100644 index 0000000000..464f0d7cea --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c820ac6d830720b16d2d6a189e1f1bb0ee53eae05ab1d4a649c7b3e0b8a9c80 +size 1216 diff --git a/assets/voxygen/voxel/npc/monitor/male/torso_back.vox b/assets/voxygen/voxel/npc/monitor/male/torso_back.vox new file mode 100644 index 0000000000..2c356a2536 --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31f836170639602f91dd8b69fe3e1050470ae18675c7dfb70beea22e79df4dfc +size 1704 diff --git a/assets/voxygen/voxel/npc/monitor/male/torso_front.vox b/assets/voxygen/voxel/npc/monitor/male/torso_front.vox new file mode 100644 index 0000000000..7dcc04845d --- /dev/null +++ b/assets/voxygen/voxel/npc/monitor/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5bc8b1ca8dc4769726317b163dc1490478eb0d594d3dbbcc6f5c23240a07c1a +size 2064 diff --git a/assets/voxygen/voxel/npc/peacock/female/chest.vox b/assets/voxygen/voxel/npc/peacock/female/chest.vox new file mode 100644 index 0000000000..efec8ac0ca --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24688eaad7d459d4a4c0eba71edaca1ba83ec09552b970ac581c6e2e2081f880 +size 1932 diff --git a/assets/voxygen/voxel/npc/peacock/female/head.vox b/assets/voxygen/voxel/npc/peacock/female/head.vox new file mode 100644 index 0000000000..50dc38ee2d --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9318efd5aaca66db669aa8bbb17ac9a86cba2248716eddeae19b34b6dc8a1483 +size 1456 diff --git a/assets/voxygen/voxel/npc/peacock/female/leg_l.vox b/assets/voxygen/voxel/npc/peacock/female/leg_l.vox new file mode 100644 index 0000000000..197007765d --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65324a119fffd476420a60c1d93bc570536d86e219d2344bafe558d5a3e2d989 +size 1140 diff --git a/assets/voxygen/voxel/npc/peacock/female/leg_r.vox b/assets/voxygen/voxel/npc/peacock/female/leg_r.vox new file mode 100644 index 0000000000..850fd36ec8 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dbc9d4d6b2057fbbab1341e868eb0802e590b6230301327da2733e075659194 +size 1140 diff --git a/assets/voxygen/voxel/npc/peacock/female/tail.vox b/assets/voxygen/voxel/npc/peacock/female/tail.vox new file mode 100644 index 0000000000..85d004020f --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb2c1a3591acaea7e963648fd0253edbab593602ff9d006562d18373a82b411d +size 1320 diff --git a/assets/voxygen/voxel/npc/peacock/female/torso.vox b/assets/voxygen/voxel/npc/peacock/female/torso.vox new file mode 100644 index 0000000000..58b5a9b000 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3887edeebda253b90f44441205a28eadd1e5b94c9f3868c0f8f610d31af02aba +size 2296 diff --git a/assets/voxygen/voxel/npc/peacock/female/wing_l.vox b/assets/voxygen/voxel/npc/peacock/female/wing_l.vox new file mode 100644 index 0000000000..38d478e204 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/wing_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cabee12279731078145b3b3329da1f592401c6eb720fcc58caef9fd09a0c0bd8 +size 1236 diff --git a/assets/voxygen/voxel/npc/peacock/female/wing_r.vox b/assets/voxygen/voxel/npc/peacock/female/wing_r.vox new file mode 100644 index 0000000000..747d997150 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/wing_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abf9f847e7dc9c9ad319082d9b6438d8747185cdef53b4daff8fc6ae4a83ab72 +size 1236 diff --git a/assets/voxygen/voxel/npc/peacock/male/chest.vox b/assets/voxygen/voxel/npc/peacock/male/chest.vox new file mode 100644 index 0000000000..efec8ac0ca --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24688eaad7d459d4a4c0eba71edaca1ba83ec09552b970ac581c6e2e2081f880 +size 1932 diff --git a/assets/voxygen/voxel/npc/peacock/male/head.vox b/assets/voxygen/voxel/npc/peacock/male/head.vox new file mode 100644 index 0000000000..50dc38ee2d --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9318efd5aaca66db669aa8bbb17ac9a86cba2248716eddeae19b34b6dc8a1483 +size 1456 diff --git a/assets/voxygen/voxel/npc/peacock/male/leg_l.vox b/assets/voxygen/voxel/npc/peacock/male/leg_l.vox new file mode 100644 index 0000000000..197007765d --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65324a119fffd476420a60c1d93bc570536d86e219d2344bafe558d5a3e2d989 +size 1140 diff --git a/assets/voxygen/voxel/npc/peacock/male/leg_r.vox b/assets/voxygen/voxel/npc/peacock/male/leg_r.vox new file mode 100644 index 0000000000..850fd36ec8 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dbc9d4d6b2057fbbab1341e868eb0802e590b6230301327da2733e075659194 +size 1140 diff --git a/assets/voxygen/voxel/npc/peacock/male/tail.vox b/assets/voxygen/voxel/npc/peacock/male/tail.vox new file mode 100644 index 0000000000..85d004020f --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb2c1a3591acaea7e963648fd0253edbab593602ff9d006562d18373a82b411d +size 1320 diff --git a/assets/voxygen/voxel/npc/peacock/male/torso.vox b/assets/voxygen/voxel/npc/peacock/male/torso.vox new file mode 100644 index 0000000000..58b5a9b000 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/torso.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3887edeebda253b90f44441205a28eadd1e5b94c9f3868c0f8f610d31af02aba +size 2296 diff --git a/assets/voxygen/voxel/npc/peacock/male/wing_l.vox b/assets/voxygen/voxel/npc/peacock/male/wing_l.vox new file mode 100644 index 0000000000..38d478e204 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/wing_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cabee12279731078145b3b3329da1f592401c6eb720fcc58caef9fd09a0c0bd8 +size 1236 diff --git a/assets/voxygen/voxel/npc/peacock/male/wing_r.vox b/assets/voxygen/voxel/npc/peacock/male/wing_r.vox new file mode 100644 index 0000000000..747d997150 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/wing_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abf9f847e7dc9c9ad319082d9b6438d8747185cdef53b4daff8fc6ae4a83ab72 +size 1236 diff --git a/assets/voxygen/voxel/npc/pig/female/chest.vox b/assets/voxygen/voxel/npc/pig/female/chest.vox new file mode 100644 index 0000000000..f06dbf7e7c --- /dev/null +++ b/assets/voxygen/voxel/npc/pig/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d01ebd49961130923af7c50a975e4a1050ce6906e46a8af7330898a27ce6e3a1 +size 2752 diff --git a/assets/voxygen/voxel/npc/pig/female/foot_l.vox b/assets/voxygen/voxel/npc/pig/female/foot_l.vox new file mode 100644 index 0000000000..518432bf67 --- /dev/null +++ b/assets/voxygen/voxel/npc/pig/female/foot_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55a443d2826d552d8bf102c4914a8e8f320a9560c29a1dcf77c8c08212f7bc9e +size 1144 diff --git a/assets/voxygen/voxel/npc/pig/female/foot_r.vox b/assets/voxygen/voxel/npc/pig/female/foot_r.vox new file mode 100644 index 0000000000..2506fc9a35 --- /dev/null +++ b/assets/voxygen/voxel/npc/pig/female/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fcb492dc6627ad5a1e1519a18eef5e477ffc2b204f022ae77f477213e6da75d +size 1144 diff --git a/assets/voxygen/voxel/npc/pig/female/head.vox b/assets/voxygen/voxel/npc/pig/female/head.vox new file mode 100644 index 0000000000..4559259d51 --- /dev/null +++ b/assets/voxygen/voxel/npc/pig/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a773dc802bff2d93a62a0c495c37c1de61002a5ad642441253d848c0b621e5e +size 2720 diff --git a/assets/voxygen/voxel/npc/pig_purple/chest.vox b/assets/voxygen/voxel/npc/pig/male/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/pig_purple/chest.vox rename to assets/voxygen/voxel/npc/pig/male/chest.vox diff --git a/assets/voxygen/voxel/npc/pig_purple/leg_l.vox b/assets/voxygen/voxel/npc/pig/male/foot_l.vox similarity index 100% rename from assets/voxygen/voxel/npc/pig_purple/leg_l.vox rename to assets/voxygen/voxel/npc/pig/male/foot_l.vox diff --git a/assets/voxygen/voxel/npc/pig_purple/leg_r.vox b/assets/voxygen/voxel/npc/pig/male/foot_r.vox similarity index 100% rename from assets/voxygen/voxel/npc/pig_purple/leg_r.vox rename to assets/voxygen/voxel/npc/pig/male/foot_r.vox diff --git a/assets/voxygen/voxel/npc/pig_purple/head.vox b/assets/voxygen/voxel/npc/pig/male/head.vox similarity index 100% rename from assets/voxygen/voxel/npc/pig_purple/head.vox rename to assets/voxygen/voxel/npc/pig/male/head.vox diff --git a/assets/voxygen/voxel/npc/quokka/female/chest.vox b/assets/voxygen/voxel/npc/quokka/female/chest.vox new file mode 100644 index 0000000000..af2069b4f1 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84140cc082752707b15a5f7e8342820ec5d8ae41c9dd61249352d35179fa4461 +size 3928 diff --git a/assets/voxygen/voxel/npc/quokka/female/foot_bl.vox b/assets/voxygen/voxel/npc/quokka/female/foot_bl.vox new file mode 100644 index 0000000000..895fe053b8 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:615cfbbbb395c89695963347f99103fa2f291f040898038ba3d05e66d4cfa927 +size 1188 diff --git a/assets/voxygen/voxel/npc/quokka/female/foot_br.vox b/assets/voxygen/voxel/npc/quokka/female/foot_br.vox new file mode 100644 index 0000000000..d72af08983 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f560e45d3d7cd70e913bb009a3eebb2390304cad1fec4611da8b2020a79dd904 +size 1188 diff --git a/assets/voxygen/voxel/npc/quokka/female/foot_fl.vox b/assets/voxygen/voxel/npc/quokka/female/foot_fl.vox new file mode 100644 index 0000000000..1c213ffda6 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77c5bf0656594dc80ff47f2fdf0afd0ffa7c96045a8e0f80e03eaeeae20dba87 +size 1164 diff --git a/assets/voxygen/voxel/npc/quokka/female/foot_fr.vox b/assets/voxygen/voxel/npc/quokka/female/foot_fr.vox new file mode 100644 index 0000000000..cba098f695 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:789b7ce6793bcc9bdc2f1edfd627788ae0187ecfe2937c67d4f31a2d468c75c0 +size 1164 diff --git a/assets/voxygen/voxel/npc/quokka/female/head.vox b/assets/voxygen/voxel/npc/quokka/female/head.vox new file mode 100644 index 0000000000..0cd442286b --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bde80d9aada68898e93c03a1be4a39ac5116283990f61ce57e6daa4726281535 +size 1668 diff --git a/assets/voxygen/voxel/npc/quokka/male/chest.vox b/assets/voxygen/voxel/npc/quokka/male/chest.vox new file mode 100644 index 0000000000..af2069b4f1 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84140cc082752707b15a5f7e8342820ec5d8ae41c9dd61249352d35179fa4461 +size 3928 diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox b/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox new file mode 100644 index 0000000000..895fe053b8 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:615cfbbbb395c89695963347f99103fa2f291f040898038ba3d05e66d4cfa927 +size 1188 diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_br.vox b/assets/voxygen/voxel/npc/quokka/male/foot_br.vox new file mode 100644 index 0000000000..d72af08983 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f560e45d3d7cd70e913bb009a3eebb2390304cad1fec4611da8b2020a79dd904 +size 1188 diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_fl.vox b/assets/voxygen/voxel/npc/quokka/male/foot_fl.vox new file mode 100644 index 0000000000..1c213ffda6 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77c5bf0656594dc80ff47f2fdf0afd0ffa7c96045a8e0f80e03eaeeae20dba87 +size 1164 diff --git a/assets/voxygen/voxel/npc/quokka/male/foot_fr.vox b/assets/voxygen/voxel/npc/quokka/male/foot_fr.vox new file mode 100644 index 0000000000..cba098f695 --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:789b7ce6793bcc9bdc2f1edfd627788ae0187ecfe2937c67d4f31a2d468c75c0 +size 1164 diff --git a/assets/voxygen/voxel/npc/quokka/male/head.vox b/assets/voxygen/voxel/npc/quokka/male/head.vox new file mode 100644 index 0000000000..0cd442286b --- /dev/null +++ b/assets/voxygen/voxel/npc/quokka/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bde80d9aada68898e93c03a1be4a39ac5116283990f61ce57e6daa4726281535 +size 1668 diff --git a/assets/voxygen/voxel/npc/raccoon/female/chest.vox b/assets/voxygen/voxel/npc/raccoon/female/chest.vox new file mode 100644 index 0000000000..f7e114e232 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:239e3588e6e949ebe139366cc622c72ed1266cb54364be8ea9c614d7feb7d22a +size 2080 diff --git a/assets/voxygen/voxel/npc/raccoon/female/foot_bl.vox b/assets/voxygen/voxel/npc/raccoon/female/foot_bl.vox new file mode 100644 index 0000000000..00f545a150 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6356277a1f8d2ba4fae22cb8bd591a9670857cfd4436293975bc6094775f9600 +size 1156 diff --git a/assets/voxygen/voxel/npc/raccoon/female/foot_br.vox b/assets/voxygen/voxel/npc/raccoon/female/foot_br.vox new file mode 100644 index 0000000000..4c82095d3b --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f0333e558b9d737de8b2710fe271b82b9c1d9c22539dfa6a78eb77230e1310 +size 1156 diff --git a/assets/voxygen/voxel/npc/raccoon/female/foot_fl.vox b/assets/voxygen/voxel/npc/raccoon/female/foot_fl.vox new file mode 100644 index 0000000000..8ce37308f4 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0adf6fc53289f95c27f2460d62bf0a70e59559f2a1ef310e6e850c73ba6f79f4 +size 1128 diff --git a/assets/voxygen/voxel/npc/raccoon/female/foot_fr.vox b/assets/voxygen/voxel/npc/raccoon/female/foot_fr.vox new file mode 100644 index 0000000000..8ce37308f4 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0adf6fc53289f95c27f2460d62bf0a70e59559f2a1ef310e6e850c73ba6f79f4 +size 1128 diff --git a/assets/voxygen/voxel/npc/raccoon/female/head.vox b/assets/voxygen/voxel/npc/raccoon/female/head.vox new file mode 100644 index 0000000000..055cee1293 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12770477f8bb15304a622926c43d52d9ef7ff38b45e8fa8e6983411fd3fd0232 +size 1584 diff --git a/assets/voxygen/voxel/npc/raccoon/male/chest.vox b/assets/voxygen/voxel/npc/raccoon/male/chest.vox new file mode 100644 index 0000000000..f7e114e232 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:239e3588e6e949ebe139366cc622c72ed1266cb54364be8ea9c614d7feb7d22a +size 2080 diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox new file mode 100644 index 0000000000..00f545a150 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6356277a1f8d2ba4fae22cb8bd591a9670857cfd4436293975bc6094775f9600 +size 1156 diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_br.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_br.vox new file mode 100644 index 0000000000..4c82095d3b --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f0333e558b9d737de8b2710fe271b82b9c1d9c22539dfa6a78eb77230e1310 +size 1156 diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_fl.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_fl.vox new file mode 100644 index 0000000000..8ce37308f4 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0adf6fc53289f95c27f2460d62bf0a70e59559f2a1ef310e6e850c73ba6f79f4 +size 1128 diff --git a/assets/voxygen/voxel/npc/raccoon/male/foot_fr.vox b/assets/voxygen/voxel/npc/raccoon/male/foot_fr.vox new file mode 100644 index 0000000000..8ce37308f4 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0adf6fc53289f95c27f2460d62bf0a70e59559f2a1ef310e6e850c73ba6f79f4 +size 1128 diff --git a/assets/voxygen/voxel/npc/raccoon/male/head.vox b/assets/voxygen/voxel/npc/raccoon/male/head.vox new file mode 100644 index 0000000000..055cee1293 --- /dev/null +++ b/assets/voxygen/voxel/npc/raccoon/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12770477f8bb15304a622926c43d52d9ef7ff38b45e8fa8e6983411fd3fd0232 +size 1584 diff --git a/assets/voxygen/voxel/npc/rat/female/chest.vox b/assets/voxygen/voxel/npc/rat/female/chest.vox new file mode 100644 index 0000000000..b52ca54ea4 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c46d59e54f15dd391deffd416050ed7da07fc4bdd9440fa956ab3f65078d1fac +size 3636 diff --git a/assets/voxygen/voxel/npc/rat/female/feet_b.vox b/assets/voxygen/voxel/npc/rat/female/feet_b.vox new file mode 100644 index 0000000000..b5792500cd --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/female/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 +size 1168 diff --git a/assets/voxygen/voxel/npc/rat/female/feet_f.vox b/assets/voxygen/voxel/npc/rat/female/feet_f.vox new file mode 100644 index 0000000000..b5792500cd --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/female/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 +size 1168 diff --git a/assets/voxygen/voxel/npc/rat/female/head.vox b/assets/voxygen/voxel/npc/rat/female/head.vox new file mode 100644 index 0000000000..6e680d1028 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61fb2a387492fd6aef77b26184e90afd712316aa21090617ee621d6fd76be722 +size 1656 diff --git a/assets/voxygen/voxel/npc/rat/female/tail.vox b/assets/voxygen/voxel/npc/rat/female/tail.vox new file mode 100644 index 0000000000..43015d4188 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52e33f3f0b42eae270513d68e8bfd39f70d2e838789dc83156ea4c5b4b3e33f3 +size 1136 diff --git a/assets/voxygen/voxel/npc/rat/male/chest.vox b/assets/voxygen/voxel/npc/rat/male/chest.vox new file mode 100644 index 0000000000..b52ca54ea4 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c46d59e54f15dd391deffd416050ed7da07fc4bdd9440fa956ab3f65078d1fac +size 3636 diff --git a/assets/voxygen/voxel/npc/rat/male/feet_b.vox b/assets/voxygen/voxel/npc/rat/male/feet_b.vox new file mode 100644 index 0000000000..b5792500cd --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 +size 1168 diff --git a/assets/voxygen/voxel/npc/rat/male/feet_f.vox b/assets/voxygen/voxel/npc/rat/male/feet_f.vox new file mode 100644 index 0000000000..b5792500cd --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 +size 1168 diff --git a/assets/voxygen/voxel/npc/rat/male/feet_r.vox b/assets/voxygen/voxel/npc/rat/male/feet_r.vox new file mode 100644 index 0000000000..b5792500cd --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/feet_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27898b0c3795da3c958f15146921d3baa8191a7d73961285e78d48a5d240af1 +size 1168 diff --git a/assets/voxygen/voxel/npc/rat/male/head.vox b/assets/voxygen/voxel/npc/rat/male/head.vox new file mode 100644 index 0000000000..6e680d1028 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61fb2a387492fd6aef77b26184e90afd712316aa21090617ee621d6fd76be722 +size 1656 diff --git a/assets/voxygen/voxel/npc/rat/male/tail.vox b/assets/voxygen/voxel/npc/rat/male/tail.vox new file mode 100644 index 0000000000..43015d4188 --- /dev/null +++ b/assets/voxygen/voxel/npc/rat/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52e33f3f0b42eae270513d68e8bfd39f70d2e838789dc83156ea4c5b4b3e33f3 +size 1136 diff --git a/assets/voxygen/voxel/npc/saber/female/ears.vox b/assets/voxygen/voxel/npc/saber/female/ears.vox new file mode 100644 index 0000000000..825817d3e6 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae1a3f2f418ac1de3e29ff14f31577cf5d7fde2c401a6933b6d354077206bf7 +size 1160 diff --git a/assets/voxygen/voxel/npc/saber/female/foot_lb.vox b/assets/voxygen/voxel/npc/saber/female/foot_lb.vox new file mode 100644 index 0000000000..440c288ce3 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:634c863f6b0ac9a10d7458394d2a7945d88a68c1702be2ac4c49f9e701e64c00 +size 1244 diff --git a/assets/voxygen/voxel/npc/saber/female/foot_lf.vox b/assets/voxygen/voxel/npc/saber/female/foot_lf.vox new file mode 100644 index 0000000000..b98446b9f3 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1062143f418d7568210d1aacf34260f403b9f9c5d7f7d02580c66f08af6c12a0 +size 1172 diff --git a/assets/voxygen/voxel/npc/saber/female/foot_rb.vox b/assets/voxygen/voxel/npc/saber/female/foot_rb.vox new file mode 100644 index 0000000000..14fe710b19 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:311deb826b15abdc2d076686caa536a36876eee3e7c03fef5424c69a71c78191 +size 1244 diff --git a/assets/voxygen/voxel/npc/saber/female/foot_rf.vox b/assets/voxygen/voxel/npc/saber/female/foot_rf.vox new file mode 100644 index 0000000000..ecc7374469 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3a9bef911c33dd6d5c60c0da3de573427217219d6ba906195a7943a9a388179 +size 1172 diff --git a/assets/voxygen/voxel/npc/saber/female/head_lower.vox b/assets/voxygen/voxel/npc/saber/female/head_lower.vox new file mode 100644 index 0000000000..5a7c99841e --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e64daef79b999d91548cc3c448053a9616cebf1849ba8e596587f794563b28c +size 2408 diff --git a/assets/voxygen/voxel/npc/saber/female/head_upper.vox b/assets/voxygen/voxel/npc/saber/female/head_upper.vox new file mode 100644 index 0000000000..558ba1e3fd --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37b959699e7e865e8be7424f99c24f99ecdd39250f7c7586a3db5c8b7292e767 +size 2624 diff --git a/assets/voxygen/voxel/npc/saber/female/jaw.vox b/assets/voxygen/voxel/npc/saber/female/jaw.vox new file mode 100644 index 0000000000..ef613e0dd1 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:218ec9669d22c2861a0b176e9600fd88709d75d1251c7a3bb258e6f6375af390 +size 1208 diff --git a/assets/voxygen/voxel/npc/saber/female/tail.vox b/assets/voxygen/voxel/npc/saber/female/tail.vox new file mode 100644 index 0000000000..5f6d9e153f --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a2b36ea6b228b1f1b2f8466c34a25013197b2dceb84437a1f6da85da8e904e6 +size 1192 diff --git a/assets/voxygen/voxel/npc/saber/female/torso_back.vox b/assets/voxygen/voxel/npc/saber/female/torso_back.vox new file mode 100644 index 0000000000..ca412b867a --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b70d5725f9a46c6a5307130f8655f822b3d5957ff97e68358b7c5a86647988a0 +size 4512 diff --git a/assets/voxygen/voxel/npc/saber/female/torso_front.vox b/assets/voxygen/voxel/npc/saber/female/torso_front.vox new file mode 100644 index 0000000000..734b4c335c --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54feae2833321861b39ca9ee9fd3a3c7b6fea7724fd85f73cd1d9c0b04b765e1 +size 3968 diff --git a/assets/voxygen/voxel/npc/saber/male/ears.vox b/assets/voxygen/voxel/npc/saber/male/ears.vox new file mode 100644 index 0000000000..825817d3e6 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae1a3f2f418ac1de3e29ff14f31577cf5d7fde2c401a6933b6d354077206bf7 +size 1160 diff --git a/assets/voxygen/voxel/npc/saber/male/foot_lb.vox b/assets/voxygen/voxel/npc/saber/male/foot_lb.vox new file mode 100644 index 0000000000..440c288ce3 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:634c863f6b0ac9a10d7458394d2a7945d88a68c1702be2ac4c49f9e701e64c00 +size 1244 diff --git a/assets/voxygen/voxel/npc/saber/male/foot_lf.vox b/assets/voxygen/voxel/npc/saber/male/foot_lf.vox new file mode 100644 index 0000000000..b98446b9f3 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1062143f418d7568210d1aacf34260f403b9f9c5d7f7d02580c66f08af6c12a0 +size 1172 diff --git a/assets/voxygen/voxel/npc/saber/male/foot_rb.vox b/assets/voxygen/voxel/npc/saber/male/foot_rb.vox new file mode 100644 index 0000000000..14fe710b19 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:311deb826b15abdc2d076686caa536a36876eee3e7c03fef5424c69a71c78191 +size 1244 diff --git a/assets/voxygen/voxel/npc/saber/male/foot_rf.vox b/assets/voxygen/voxel/npc/saber/male/foot_rf.vox new file mode 100644 index 0000000000..ecc7374469 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3a9bef911c33dd6d5c60c0da3de573427217219d6ba906195a7943a9a388179 +size 1172 diff --git a/assets/voxygen/voxel/npc/saber/male/head_lower.vox b/assets/voxygen/voxel/npc/saber/male/head_lower.vox new file mode 100644 index 0000000000..5a7c99841e --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e64daef79b999d91548cc3c448053a9616cebf1849ba8e596587f794563b28c +size 2408 diff --git a/assets/voxygen/voxel/npc/saber/male/head_upper.vox b/assets/voxygen/voxel/npc/saber/male/head_upper.vox new file mode 100644 index 0000000000..558ba1e3fd --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37b959699e7e865e8be7424f99c24f99ecdd39250f7c7586a3db5c8b7292e767 +size 2624 diff --git a/assets/voxygen/voxel/npc/saber/male/jaw.vox b/assets/voxygen/voxel/npc/saber/male/jaw.vox new file mode 100644 index 0000000000..ef613e0dd1 --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:218ec9669d22c2861a0b176e9600fd88709d75d1251c7a3bb258e6f6375af390 +size 1208 diff --git a/assets/voxygen/voxel/npc/saber/male/tail.vox b/assets/voxygen/voxel/npc/saber/male/tail.vox new file mode 100644 index 0000000000..5f6d9e153f --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a2b36ea6b228b1f1b2f8466c34a25013197b2dceb84437a1f6da85da8e904e6 +size 1192 diff --git a/assets/voxygen/voxel/npc/saber/male/torso_back.vox b/assets/voxygen/voxel/npc/saber/male/torso_back.vox new file mode 100644 index 0000000000..ca412b867a --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b70d5725f9a46c6a5307130f8655f822b3d5957ff97e68358b7c5a86647988a0 +size 4512 diff --git a/assets/voxygen/voxel/npc/saber/male/torso_front.vox b/assets/voxygen/voxel/npc/saber/male/torso_front.vox new file mode 100644 index 0000000000..734b4c335c --- /dev/null +++ b/assets/voxygen/voxel/npc/saber/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54feae2833321861b39ca9ee9fd3a3c7b6fea7724fd85f73cd1d9c0b04b765e1 +size 3968 diff --git a/assets/voxygen/voxel/npc/sheep/female/chest.vox b/assets/voxygen/voxel/npc/sheep/female/chest.vox new file mode 100644 index 0000000000..44cc47df63 --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7df5790855c6f01b3a5f72436d9682ca5d2f5c22cb202cc9c4527cc264fe69b +size 3384 diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_l.vox b/assets/voxygen/voxel/npc/sheep/female/foot_l.vox new file mode 100644 index 0000000000..420983704f --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/female/foot_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ff2f232823f1aaeb218908d568678ad54c9955243a711e1e30b2f93efeacfa4 +size 1176 diff --git a/assets/voxygen/voxel/npc/sheep/female/foot_r.vox b/assets/voxygen/voxel/npc/sheep/female/foot_r.vox new file mode 100644 index 0000000000..fe9d7eaac8 --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/female/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a92a0148e46f2127b9d04b3bbfc874ed0ab670b4821f684b7ac83768c58f3a7 +size 1176 diff --git a/assets/voxygen/voxel/npc/sheep/female/head.vox b/assets/voxygen/voxel/npc/sheep/female/head.vox new file mode 100644 index 0000000000..b73deee331 --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9afd4b0377c1a29586d614cd40b1b8bafb9bbc0e6655386eb2a4c97e9ed645a6 +size 1568 diff --git a/assets/voxygen/voxel/npc/sheep/male/chest.vox b/assets/voxygen/voxel/npc/sheep/male/chest.vox new file mode 100644 index 0000000000..44cc47df63 --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7df5790855c6f01b3a5f72436d9682ca5d2f5c22cb202cc9c4527cc264fe69b +size 3384 diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_l.vox b/assets/voxygen/voxel/npc/sheep/male/foot_l.vox new file mode 100644 index 0000000000..420983704f --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/male/foot_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ff2f232823f1aaeb218908d568678ad54c9955243a711e1e30b2f93efeacfa4 +size 1176 diff --git a/assets/voxygen/voxel/npc/sheep/male/foot_r.vox b/assets/voxygen/voxel/npc/sheep/male/foot_r.vox new file mode 100644 index 0000000000..fe9d7eaac8 --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a92a0148e46f2127b9d04b3bbfc874ed0ab670b4821f684b7ac83768c58f3a7 +size 1176 diff --git a/assets/voxygen/voxel/npc/sheep/male/head.vox b/assets/voxygen/voxel/npc/sheep/male/head.vox new file mode 100644 index 0000000000..b73deee331 --- /dev/null +++ b/assets/voxygen/voxel/npc/sheep/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9afd4b0377c1a29586d614cd40b1b8bafb9bbc0e6655386eb2a4c97e9ed645a6 +size 1568 diff --git a/assets/voxygen/voxel/npc/skunk/female/chest.vox b/assets/voxygen/voxel/npc/skunk/female/chest.vox new file mode 100644 index 0000000000..4ea55206b4 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68717cbc5bacc6345f37f95ed2fc5d59f3c50e796e9d2ec732190a275c9d7900 +size 2992 diff --git a/assets/voxygen/voxel/npc/skunk/female/foot_bl.vox b/assets/voxygen/voxel/npc/skunk/female/foot_bl.vox new file mode 100644 index 0000000000..c93c67d71d --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/female/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19a023c1991305c934b2591bb0ee45bf49fb828c101009d48fffe30e105af8b2 +size 1152 diff --git a/assets/voxygen/voxel/npc/skunk/female/foot_br.vox b/assets/voxygen/voxel/npc/skunk/female/foot_br.vox new file mode 100644 index 0000000000..c93c67d71d --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/female/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19a023c1991305c934b2591bb0ee45bf49fb828c101009d48fffe30e105af8b2 +size 1152 diff --git a/assets/voxygen/voxel/npc/skunk/female/foot_fl.vox b/assets/voxygen/voxel/npc/skunk/female/foot_fl.vox new file mode 100644 index 0000000000..710980ea33 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/female/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7318ab936d59e1a90d408a0caabda086bb15abe91d342f76d888e25ca7ed3ad +size 1140 diff --git a/assets/voxygen/voxel/npc/skunk/female/foot_fr.vox b/assets/voxygen/voxel/npc/skunk/female/foot_fr.vox new file mode 100644 index 0000000000..0bc8b5f991 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/female/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9604864b8c09add4efe7efc2ef467992cb224777acaf07c3996815024cd00c1b +size 1140 diff --git a/assets/voxygen/voxel/npc/skunk/female/head.vox b/assets/voxygen/voxel/npc/skunk/female/head.vox new file mode 100644 index 0000000000..56b0427ea6 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:052d951e90d925540d348168b974f62756d90dcc3cea0d062cc2d0d8a7017820 +size 1232 diff --git a/assets/voxygen/voxel/npc/skunk/male/chest.vox b/assets/voxygen/voxel/npc/skunk/male/chest.vox new file mode 100644 index 0000000000..4ea55206b4 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68717cbc5bacc6345f37f95ed2fc5d59f3c50e796e9d2ec732190a275c9d7900 +size 2992 diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_bl.vox b/assets/voxygen/voxel/npc/skunk/male/foot_bl.vox new file mode 100644 index 0000000000..c93c67d71d --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/male/foot_bl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19a023c1991305c934b2591bb0ee45bf49fb828c101009d48fffe30e105af8b2 +size 1152 diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_br.vox b/assets/voxygen/voxel/npc/skunk/male/foot_br.vox new file mode 100644 index 0000000000..c93c67d71d --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/male/foot_br.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19a023c1991305c934b2591bb0ee45bf49fb828c101009d48fffe30e105af8b2 +size 1152 diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_fl.vox b/assets/voxygen/voxel/npc/skunk/male/foot_fl.vox new file mode 100644 index 0000000000..710980ea33 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/male/foot_fl.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7318ab936d59e1a90d408a0caabda086bb15abe91d342f76d888e25ca7ed3ad +size 1140 diff --git a/assets/voxygen/voxel/npc/skunk/male/foot_fr.vox b/assets/voxygen/voxel/npc/skunk/male/foot_fr.vox new file mode 100644 index 0000000000..0bc8b5f991 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/male/foot_fr.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9604864b8c09add4efe7efc2ef467992cb224777acaf07c3996815024cd00c1b +size 1140 diff --git a/assets/voxygen/voxel/npc/skunk/male/head.vox b/assets/voxygen/voxel/npc/skunk/male/head.vox new file mode 100644 index 0000000000..56b0427ea6 --- /dev/null +++ b/assets/voxygen/voxel/npc/skunk/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:052d951e90d925540d348168b974f62756d90dcc3cea0d062cc2d0d8a7017820 +size 1232 diff --git a/assets/voxygen/voxel/npc/squirrel/female/chest.vox b/assets/voxygen/voxel/npc/squirrel/female/chest.vox new file mode 100644 index 0000000000..d3ef9e4e8d --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b379b111e3e4c629b49b653310070d4a91f4cd40aef58f36c176ec7c2acafc +size 1212 diff --git a/assets/voxygen/voxel/npc/squirrel/female/feet_b.vox b/assets/voxygen/voxel/npc/squirrel/female/feet_b.vox new file mode 100644 index 0000000000..016a819839 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/female/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce618962f93c5a5e53d09fcb3b1410565d6a3a8a10868011a869e7b886dca05a +size 1112 diff --git a/assets/voxygen/voxel/npc/squirrel/female/feet_f.vox b/assets/voxygen/voxel/npc/squirrel/female/feet_f.vox new file mode 100644 index 0000000000..016a819839 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/female/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce618962f93c5a5e53d09fcb3b1410565d6a3a8a10868011a869e7b886dca05a +size 1112 diff --git a/assets/voxygen/voxel/npc/squirrel/female/head.vox b/assets/voxygen/voxel/npc/squirrel/female/head.vox new file mode 100644 index 0000000000..c0f7b856db --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ab082812e15cccf183525025bcec751e6c1995fcd4756b919eda82c53c76a9b +size 1264 diff --git a/assets/voxygen/voxel/npc/squirrel/female/tail.vox b/assets/voxygen/voxel/npc/squirrel/female/tail.vox new file mode 100644 index 0000000000..648f09505f --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3faa8bfd0bedaea5cf14b3d5ca69e47848c0cbe40938e8caa9ca0c0d57aa5edf +size 1208 diff --git a/assets/voxygen/voxel/npc/squirrel/male/chest.vox b/assets/voxygen/voxel/npc/squirrel/male/chest.vox new file mode 100644 index 0000000000..d3ef9e4e8d --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b379b111e3e4c629b49b653310070d4a91f4cd40aef58f36c176ec7c2acafc +size 1212 diff --git a/assets/voxygen/voxel/npc/squirrel/male/feet_b.vox b/assets/voxygen/voxel/npc/squirrel/male/feet_b.vox new file mode 100644 index 0000000000..016a819839 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce618962f93c5a5e53d09fcb3b1410565d6a3a8a10868011a869e7b886dca05a +size 1112 diff --git a/assets/voxygen/voxel/npc/squirrel/male/feet_f.vox b/assets/voxygen/voxel/npc/squirrel/male/feet_f.vox new file mode 100644 index 0000000000..016a819839 --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce618962f93c5a5e53d09fcb3b1410565d6a3a8a10868011a869e7b886dca05a +size 1112 diff --git a/assets/voxygen/voxel/npc/squirrel/male/head.vox b/assets/voxygen/voxel/npc/squirrel/male/head.vox new file mode 100644 index 0000000000..c0f7b856db --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ab082812e15cccf183525025bcec751e6c1995fcd4756b919eda82c53c76a9b +size 1264 diff --git a/assets/voxygen/voxel/npc/squirrel/male/tail.vox b/assets/voxygen/voxel/npc/squirrel/male/tail.vox new file mode 100644 index 0000000000..648f09505f --- /dev/null +++ b/assets/voxygen/voxel/npc/squirrel/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3faa8bfd0bedaea5cf14b3d5ca69e47848c0cbe40938e8caa9ca0c0d57aa5edf +size 1208 diff --git a/assets/voxygen/voxel/npc/tarasque/female/ears.vox b/assets/voxygen/voxel/npc/tarasque/female/ears.vox new file mode 100644 index 0000000000..8e8b4ae349 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74a86100a33d90d8b68900f9b1789980838e7b27c1267b317be0ce26c07e7320 +size 1160 diff --git a/assets/voxygen/voxel/npc/tarasque/female/foot_lb.vox b/assets/voxygen/voxel/npc/tarasque/female/foot_lb.vox new file mode 100644 index 0000000000..723f148f69 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71235096d961b491ef299506822d6eb1a282369061a8e626f374cda2e7785993 +size 1300 diff --git a/assets/voxygen/voxel/npc/tarasque/female/foot_lf.vox b/assets/voxygen/voxel/npc/tarasque/female/foot_lf.vox new file mode 100644 index 0000000000..25986b40d4 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b409f160e4dc520d4d771d3e7c76eb34ec4ace26df02d160f7684e6fc415122 +size 1344 diff --git a/assets/voxygen/voxel/npc/tarasque/female/foot_rb.vox b/assets/voxygen/voxel/npc/tarasque/female/foot_rb.vox new file mode 100644 index 0000000000..b3c8e7d76c --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78d4d1294cbdda02cbad93f29c90e7ea19455d498a141100500a18e10f456d53 +size 1300 diff --git a/assets/voxygen/voxel/npc/tarasque/female/foot_rf.vox b/assets/voxygen/voxel/npc/tarasque/female/foot_rf.vox new file mode 100644 index 0000000000..8a7948141e --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf1433cbcdec149af7aaf00916b5651598394fbe4a51ac5a2bd3bcb1be65dc5e +size 1344 diff --git a/assets/voxygen/voxel/npc/tarasque/female/head_lower.vox b/assets/voxygen/voxel/npc/tarasque/female/head_lower.vox new file mode 100644 index 0000000000..e34021788f --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de23d6bbe56982bf1b1ec8b6a6e28a9e4729b9f8b49f468fb9c059b27c7448cc +size 1796 diff --git a/assets/voxygen/voxel/npc/tarasque/female/head_upper.vox b/assets/voxygen/voxel/npc/tarasque/female/head_upper.vox new file mode 100644 index 0000000000..199cfbb6c5 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f037c72efd9252a0f5a084f57f9226677fea740568565887b5a0acf7e369487 +size 3024 diff --git a/assets/voxygen/voxel/npc/tarasque/female/jaw.vox b/assets/voxygen/voxel/npc/tarasque/female/jaw.vox new file mode 100644 index 0000000000..8314a070ce --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d737b9a267e671baf54c251d7c8cdbac79d68979437db35cb92e37cddfe4f9e7 +size 1208 diff --git a/assets/voxygen/voxel/npc/tarasque/female/tail.vox b/assets/voxygen/voxel/npc/tarasque/female/tail.vox new file mode 100644 index 0000000000..8a321b1440 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:462e82ce939066a2f496ef04e7bfff842485150678bc8505a0b3b49244df2c6d +size 1208 diff --git a/assets/voxygen/voxel/npc/tarasque/female/torso_back.vox b/assets/voxygen/voxel/npc/tarasque/female/torso_back.vox new file mode 100644 index 0000000000..ffd7234404 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7791321c306ebba405b31a93f7b80e5b1cd81239201c44facd1cf49a570e909c +size 3800 diff --git a/assets/voxygen/voxel/npc/tarasque/female/torso_front.vox b/assets/voxygen/voxel/npc/tarasque/female/torso_front.vox new file mode 100644 index 0000000000..d4d7d2fb99 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2f5243e3fe4bf71a56502996fc70e3046997084f0d6f8fcd045a3ae8d130bf +size 4744 diff --git a/assets/voxygen/voxel/npc/tarasque/male/ears.vox b/assets/voxygen/voxel/npc/tarasque/male/ears.vox new file mode 100644 index 0000000000..8e8b4ae349 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74a86100a33d90d8b68900f9b1789980838e7b27c1267b317be0ce26c07e7320 +size 1160 diff --git a/assets/voxygen/voxel/npc/tarasque/male/foot_lb.vox b/assets/voxygen/voxel/npc/tarasque/male/foot_lb.vox new file mode 100644 index 0000000000..723f148f69 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71235096d961b491ef299506822d6eb1a282369061a8e626f374cda2e7785993 +size 1300 diff --git a/assets/voxygen/voxel/npc/tarasque/male/foot_lf.vox b/assets/voxygen/voxel/npc/tarasque/male/foot_lf.vox new file mode 100644 index 0000000000..25986b40d4 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b409f160e4dc520d4d771d3e7c76eb34ec4ace26df02d160f7684e6fc415122 +size 1344 diff --git a/assets/voxygen/voxel/npc/tarasque/male/foot_rb.vox b/assets/voxygen/voxel/npc/tarasque/male/foot_rb.vox new file mode 100644 index 0000000000..b3c8e7d76c --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78d4d1294cbdda02cbad93f29c90e7ea19455d498a141100500a18e10f456d53 +size 1300 diff --git a/assets/voxygen/voxel/npc/tarasque/male/foot_rf.vox b/assets/voxygen/voxel/npc/tarasque/male/foot_rf.vox new file mode 100644 index 0000000000..8a7948141e --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf1433cbcdec149af7aaf00916b5651598394fbe4a51ac5a2bd3bcb1be65dc5e +size 1344 diff --git a/assets/voxygen/voxel/npc/tarasque/male/head_lower.vox b/assets/voxygen/voxel/npc/tarasque/male/head_lower.vox new file mode 100644 index 0000000000..e34021788f --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de23d6bbe56982bf1b1ec8b6a6e28a9e4729b9f8b49f468fb9c059b27c7448cc +size 1796 diff --git a/assets/voxygen/voxel/npc/tarasque/male/head_upper.vox b/assets/voxygen/voxel/npc/tarasque/male/head_upper.vox new file mode 100644 index 0000000000..199cfbb6c5 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f037c72efd9252a0f5a084f57f9226677fea740568565887b5a0acf7e369487 +size 3024 diff --git a/assets/voxygen/voxel/npc/tarasque/male/jaw.vox b/assets/voxygen/voxel/npc/tarasque/male/jaw.vox new file mode 100644 index 0000000000..8314a070ce --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d737b9a267e671baf54c251d7c8cdbac79d68979437db35cb92e37cddfe4f9e7 +size 1208 diff --git a/assets/voxygen/voxel/npc/tarasque/male/tail.vox b/assets/voxygen/voxel/npc/tarasque/male/tail.vox new file mode 100644 index 0000000000..8a321b1440 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:462e82ce939066a2f496ef04e7bfff842485150678bc8505a0b3b49244df2c6d +size 1208 diff --git a/assets/voxygen/voxel/npc/tarasque/male/torso_back.vox b/assets/voxygen/voxel/npc/tarasque/male/torso_back.vox new file mode 100644 index 0000000000..ffd7234404 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7791321c306ebba405b31a93f7b80e5b1cd81239201c44facd1cf49a570e909c +size 3800 diff --git a/assets/voxygen/voxel/npc/tarasque/male/torso_front.vox b/assets/voxygen/voxel/npc/tarasque/male/torso_front.vox new file mode 100644 index 0000000000..d4d7d2fb99 --- /dev/null +++ b/assets/voxygen/voxel/npc/tarasque/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2f5243e3fe4bf71a56502996fc70e3046997084f0d6f8fcd045a3ae8d130bf +size 4744 diff --git a/assets/voxygen/voxel/npc/turtle/female/chest.vox b/assets/voxygen/voxel/npc/turtle/female/chest.vox new file mode 100644 index 0000000000..f69772001d --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/turtle/female/feet_b.vox b/assets/voxygen/voxel/npc/turtle/female/feet_b.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/female/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/female/feet_f.vox b/assets/voxygen/voxel/npc/turtle/female/feet_f.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/female/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/female/head.vox b/assets/voxygen/voxel/npc/turtle/female/head.vox new file mode 100644 index 0000000000..9a5982b2de --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/turtle/female/tail.vox b/assets/voxygen/voxel/npc/turtle/female/tail.vox new file mode 100644 index 0000000000..20bbc2175d --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/turtle/male/chest.vox b/assets/voxygen/voxel/npc/turtle/male/chest.vox new file mode 100644 index 0000000000..f69772001d --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0775e3698498c2e4c37cfb688574e8f007091339f432ae62c6b140960a9469b2 +size 3736 diff --git a/assets/voxygen/voxel/npc/turtle/male/feet_b.vox b/assets/voxygen/voxel/npc/turtle/male/feet_b.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/feet_b.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/feet_f.vox b/assets/voxygen/voxel/npc/turtle/male/feet_f.vox new file mode 100644 index 0000000000..aabf0927e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/feet_f.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3299c704002ab62aa14d0b0aa2da336e5c87b2fe3f3e226d67f0cd3e0f2bd983 +size 1128 diff --git a/assets/voxygen/voxel/npc/turtle/male/head.vox b/assets/voxygen/voxel/npc/turtle/male/head.vox new file mode 100644 index 0000000000..9a5982b2de --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:986b4105c5302fe05a466091294d4e97659565502ae9da71de79466432417b04 +size 1376 diff --git a/assets/voxygen/voxel/npc/turtle/male/tail.vox b/assets/voxygen/voxel/npc/turtle/male/tail.vox new file mode 100644 index 0000000000..20bbc2175d --- /dev/null +++ b/assets/voxygen/voxel/npc/turtle/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d24e458ceb1dde4d39a7f372c897d4393ccfbced455fdd08bca558ed060695ab +size 1116 diff --git a/assets/voxygen/voxel/npc/tuskram/female/foot_lb.vox b/assets/voxygen/voxel/npc/tuskram/female/foot_lb.vox new file mode 100644 index 0000000000..5c2c0051e8 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1439e4406921cacdc68ba1d073674ab74cfe6a102b15f37398a2f93b4f41f64 +size 1344 diff --git a/assets/voxygen/voxel/npc/tuskram/female/foot_lf.vox b/assets/voxygen/voxel/npc/tuskram/female/foot_lf.vox new file mode 100644 index 0000000000..4d0938032e --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:468e16decc1c5bfa8e2104834dca0b8dc4e365c36105d2d3a8586b7ec2a6a4ee +size 1196 diff --git a/assets/voxygen/voxel/npc/tuskram/female/foot_rb.vox b/assets/voxygen/voxel/npc/tuskram/female/foot_rb.vox new file mode 100644 index 0000000000..2cf4dc24cd --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9471b4710e331ed1b45cd1792b22c04797a737454f33b0225d4a4cb86ee5703 +size 1344 diff --git a/assets/voxygen/voxel/npc/tuskram/female/foot_rf.vox b/assets/voxygen/voxel/npc/tuskram/female/foot_rf.vox new file mode 100644 index 0000000000..8bc1adc785 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5440f4007e17ff3d9b529f24b7a8dce329937a67833b66d207647f9532806159 +size 1196 diff --git a/assets/voxygen/voxel/npc/tuskram/female/head_lower.vox b/assets/voxygen/voxel/npc/tuskram/female/head_lower.vox new file mode 100644 index 0000000000..0f80d31ea8 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d614bcd235285c3b537f40c9028455d29b6b61b7bd8a5db956fd9a7c168fadca +size 1600 diff --git a/assets/voxygen/voxel/npc/tuskram/female/head_upper.vox b/assets/voxygen/voxel/npc/tuskram/female/head_upper.vox new file mode 100644 index 0000000000..575c2c9955 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c501cc831e4ddf54be7cd0a31c0dbb350c6799d7ae6f7d8010111a1460973d7e +size 2808 diff --git a/assets/voxygen/voxel/npc/tuskram/female/jaw.vox b/assets/voxygen/voxel/npc/tuskram/female/jaw.vox new file mode 100644 index 0000000000..d9dd2ad2b5 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fa3163f3a5f70ba05eac3622a666a4ff2cdd690b3c17c25799687f72d1e09ce +size 1208 diff --git a/assets/voxygen/voxel/npc/tuskram/female/tail.vox b/assets/voxygen/voxel/npc/tuskram/female/tail.vox new file mode 100644 index 0000000000..ed8b56a34a --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04e39292688961ef8ab75f1552f6153f4c6445341b43b5dd1ae4f5982885b444 +size 1208 diff --git a/assets/voxygen/voxel/npc/tuskram/female/torso_back.vox b/assets/voxygen/voxel/npc/tuskram/female/torso_back.vox new file mode 100644 index 0000000000..0afcb16150 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8f04f847b5727edf1ed7da6d431c7d3a2936b40a3b33748331b108367ec2f77 +size 3392 diff --git a/assets/voxygen/voxel/npc/tuskram/female/torso_front.vox b/assets/voxygen/voxel/npc/tuskram/female/torso_front.vox new file mode 100644 index 0000000000..ce3ef5497b --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:866c9e2b40c7674c07324740c2f04b686d681a02b1de7a100cd4aa495fb411b5 +size 3272 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_lb.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_lb.vox new file mode 100644 index 0000000000..5c2c0051e8 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1439e4406921cacdc68ba1d073674ab74cfe6a102b15f37398a2f93b4f41f64 +size 1344 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_lf.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_lf.vox new file mode 100644 index 0000000000..4d0938032e --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:468e16decc1c5bfa8e2104834dca0b8dc4e365c36105d2d3a8586b7ec2a6a4ee +size 1196 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_rb.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_rb.vox new file mode 100644 index 0000000000..2cf4dc24cd --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9471b4710e331ed1b45cd1792b22c04797a737454f33b0225d4a4cb86ee5703 +size 1344 diff --git a/assets/voxygen/voxel/npc/tuskram/male/foot_rf.vox b/assets/voxygen/voxel/npc/tuskram/male/foot_rf.vox new file mode 100644 index 0000000000..8bc1adc785 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5440f4007e17ff3d9b529f24b7a8dce329937a67833b66d207647f9532806159 +size 1196 diff --git a/assets/voxygen/voxel/npc/tuskram/male/head_lower.vox b/assets/voxygen/voxel/npc/tuskram/male/head_lower.vox new file mode 100644 index 0000000000..0f80d31ea8 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d614bcd235285c3b537f40c9028455d29b6b61b7bd8a5db956fd9a7c168fadca +size 1600 diff --git a/assets/voxygen/voxel/npc/tuskram/male/head_upper.vox b/assets/voxygen/voxel/npc/tuskram/male/head_upper.vox new file mode 100644 index 0000000000..575c2c9955 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c501cc831e4ddf54be7cd0a31c0dbb350c6799d7ae6f7d8010111a1460973d7e +size 2808 diff --git a/assets/voxygen/voxel/npc/tuskram/male/jaw.vox b/assets/voxygen/voxel/npc/tuskram/male/jaw.vox new file mode 100644 index 0000000000..d9dd2ad2b5 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fa3163f3a5f70ba05eac3622a666a4ff2cdd690b3c17c25799687f72d1e09ce +size 1208 diff --git a/assets/voxygen/voxel/npc/tuskram/male/tail.vox b/assets/voxygen/voxel/npc/tuskram/male/tail.vox new file mode 100644 index 0000000000..ed8b56a34a --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04e39292688961ef8ab75f1552f6153f4c6445341b43b5dd1ae4f5982885b444 +size 1208 diff --git a/assets/voxygen/voxel/npc/tuskram/male/torso_back.vox b/assets/voxygen/voxel/npc/tuskram/male/torso_back.vox new file mode 100644 index 0000000000..0afcb16150 --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8f04f847b5727edf1ed7da6d431c7d3a2936b40a3b33748331b108367ec2f77 +size 3392 diff --git a/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox b/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox new file mode 100644 index 0000000000..ce3ef5497b --- /dev/null +++ b/assets/voxygen/voxel/npc/tuskram/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:866c9e2b40c7674c07324740c2f04b686d681a02b1de7a100cd4aa495fb411b5 +size 3272 diff --git a/assets/voxygen/voxel/npc/viper/female/foot_lb.vox b/assets/voxygen/voxel/npc/viper/female/foot_lb.vox new file mode 100644 index 0000000000..6dccf5d2c6 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a13a74c18cf49365cd38796cd579724ea259459aaa816071c12f275e3c04b4d4 +size 1196 diff --git a/assets/voxygen/voxel/npc/viper/female/foot_lf.vox b/assets/voxygen/voxel/npc/viper/female/foot_lf.vox new file mode 100644 index 0000000000..d3d12d1f01 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77df90d2f3af9f811e6ba8e77927081fed8c9d1999ad95c1181b3b051b18812d +size 1172 diff --git a/assets/voxygen/voxel/npc/viper/female/foot_rb.vox b/assets/voxygen/voxel/npc/viper/female/foot_rb.vox new file mode 100644 index 0000000000..e8b9ae89d7 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f07e9f7aeee2cfe515ee80dacd70761ee87ec6591a28fed924f67d1123e4ab4 +size 1196 diff --git a/assets/voxygen/voxel/npc/viper/female/foot_rf.vox b/assets/voxygen/voxel/npc/viper/female/foot_rf.vox new file mode 100644 index 0000000000..6cd5a27c74 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:599019b83cf9a5c1bfe7a6bd4496c8c152fe2b162ec54c157b92297201c5e186 +size 1172 diff --git a/assets/voxygen/voxel/npc/viper/female/head_lower.vox b/assets/voxygen/voxel/npc/viper/female/head_lower.vox new file mode 100644 index 0000000000..20b58d5e71 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:452520e2dc069cf5d511a7c9627a04c19b029277658a2c9665ae97de758b203d +size 1576 diff --git a/assets/voxygen/voxel/npc/viper/female/head_upper.vox b/assets/voxygen/voxel/npc/viper/female/head_upper.vox new file mode 100644 index 0000000000..a7461711a1 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:931bcc829004378a692bb7b801dd9a6225a294bf9dbf1052fa21133eb0987142 +size 2552 diff --git a/assets/voxygen/voxel/npc/viper/female/jaw.vox b/assets/voxygen/voxel/npc/viper/female/jaw.vox new file mode 100644 index 0000000000..c43ef3b36f --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5180038d764a1164f04dea23fd83a768892eac2fbc8293f12a80321e905113f4 +size 1272 diff --git a/assets/voxygen/voxel/npc/viper/female/tail.vox b/assets/voxygen/voxel/npc/viper/female/tail.vox new file mode 100644 index 0000000000..8ddb753fc7 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d8751e41730e825a0325892538211169e34058889871edfc800aafc71247ae5 +size 1200 diff --git a/assets/voxygen/voxel/npc/viper/female/torso_back.vox b/assets/voxygen/voxel/npc/viper/female/torso_back.vox new file mode 100644 index 0000000000..3c178ac063 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e93b005f1621f6389a7c966f44169611116f04b63297dc5032186ceb93befcd9 +size 2392 diff --git a/assets/voxygen/voxel/npc/viper/female/torso_front.vox b/assets/voxygen/voxel/npc/viper/female/torso_front.vox new file mode 100644 index 0000000000..e5b8935ef4 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/female/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6b04470bcb3ad718c90c130c6ce30c3df5400ac997a0a76687dc8ad4d598f51 +size 3392 diff --git a/assets/voxygen/voxel/npc/viper/male/foot_lb.vox b/assets/voxygen/voxel/npc/viper/male/foot_lb.vox new file mode 100644 index 0000000000..6dccf5d2c6 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a13a74c18cf49365cd38796cd579724ea259459aaa816071c12f275e3c04b4d4 +size 1196 diff --git a/assets/voxygen/voxel/npc/viper/male/foot_lf.vox b/assets/voxygen/voxel/npc/viper/male/foot_lf.vox new file mode 100644 index 0000000000..d3d12d1f01 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77df90d2f3af9f811e6ba8e77927081fed8c9d1999ad95c1181b3b051b18812d +size 1172 diff --git a/assets/voxygen/voxel/npc/viper/male/foot_rb.vox b/assets/voxygen/voxel/npc/viper/male/foot_rb.vox new file mode 100644 index 0000000000..e8b9ae89d7 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f07e9f7aeee2cfe515ee80dacd70761ee87ec6591a28fed924f67d1123e4ab4 +size 1196 diff --git a/assets/voxygen/voxel/npc/viper/male/foot_rf.vox b/assets/voxygen/voxel/npc/viper/male/foot_rf.vox new file mode 100644 index 0000000000..6cd5a27c74 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:599019b83cf9a5c1bfe7a6bd4496c8c152fe2b162ec54c157b92297201c5e186 +size 1172 diff --git a/assets/voxygen/voxel/npc/viper/male/head_lower.vox b/assets/voxygen/voxel/npc/viper/male/head_lower.vox new file mode 100644 index 0000000000..20b58d5e71 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:452520e2dc069cf5d511a7c9627a04c19b029277658a2c9665ae97de758b203d +size 1576 diff --git a/assets/voxygen/voxel/npc/viper/male/head_upper.vox b/assets/voxygen/voxel/npc/viper/male/head_upper.vox new file mode 100644 index 0000000000..a7461711a1 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:931bcc829004378a692bb7b801dd9a6225a294bf9dbf1052fa21133eb0987142 +size 2552 diff --git a/assets/voxygen/voxel/npc/viper/male/jaw.vox b/assets/voxygen/voxel/npc/viper/male/jaw.vox new file mode 100644 index 0000000000..c43ef3b36f --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5180038d764a1164f04dea23fd83a768892eac2fbc8293f12a80321e905113f4 +size 1272 diff --git a/assets/voxygen/voxel/npc/viper/male/tail.vox b/assets/voxygen/voxel/npc/viper/male/tail.vox new file mode 100644 index 0000000000..8ddb753fc7 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d8751e41730e825a0325892538211169e34058889871edfc800aafc71247ae5 +size 1200 diff --git a/assets/voxygen/voxel/npc/viper/male/torso_back.vox b/assets/voxygen/voxel/npc/viper/male/torso_back.vox new file mode 100644 index 0000000000..3c178ac063 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e93b005f1621f6389a7c966f44169611116f04b63297dc5032186ceb93befcd9 +size 2392 diff --git a/assets/voxygen/voxel/npc/viper/male/torso_front.vox b/assets/voxygen/voxel/npc/viper/male/torso_front.vox new file mode 100644 index 0000000000..e5b8935ef4 --- /dev/null +++ b/assets/voxygen/voxel/npc/viper/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6b04470bcb3ad718c90c130c6ce30c3df5400ac997a0a76687dc8ad4d598f51 +size 3392 diff --git a/assets/voxygen/voxel/npc/wolf/ears.vox b/assets/voxygen/voxel/npc/wolf/female/ears.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/ears.vox rename to assets/voxygen/voxel/npc/wolf/female/ears.vox diff --git a/assets/voxygen/voxel/npc/wolf/female/foot_lb.vox b/assets/voxygen/voxel/npc/wolf/female/foot_lb.vox new file mode 100644 index 0000000000..0603ea3a54 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/female/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e447d49b2deaa89c8354ae5115c39a32da2c825feac209b49e05270467f7b59 +size 1484 diff --git a/assets/voxygen/voxel/npc/wolf/foot_lf.vox b/assets/voxygen/voxel/npc/wolf/female/foot_lf.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/foot_lf.vox rename to assets/voxygen/voxel/npc/wolf/female/foot_lf.vox diff --git a/assets/voxygen/voxel/npc/wolf/female/foot_rb.vox b/assets/voxygen/voxel/npc/wolf/female/foot_rb.vox new file mode 100644 index 0000000000..9347fc7e81 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/female/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eebe081e0d65424d1fadd6f37b9305aa444d545abcff9398270d3dd24636bdd +size 1484 diff --git a/assets/voxygen/voxel/npc/wolf/foot_rf.vox b/assets/voxygen/voxel/npc/wolf/female/foot_rf.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/foot_rf.vox rename to assets/voxygen/voxel/npc/wolf/female/foot_rf.vox diff --git a/assets/voxygen/voxel/npc/wolf/head_lower.vox b/assets/voxygen/voxel/npc/wolf/female/head_lower.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/head_lower.vox rename to assets/voxygen/voxel/npc/wolf/female/head_lower.vox diff --git a/assets/voxygen/voxel/npc/wolf/head_upper.vox b/assets/voxygen/voxel/npc/wolf/female/head_upper.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/head_upper.vox rename to assets/voxygen/voxel/npc/wolf/female/head_upper.vox diff --git a/assets/voxygen/voxel/npc/wolf/jaw.vox b/assets/voxygen/voxel/npc/wolf/female/jaw.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/jaw.vox rename to assets/voxygen/voxel/npc/wolf/female/jaw.vox diff --git a/assets/voxygen/voxel/npc/wolf/tail.vox b/assets/voxygen/voxel/npc/wolf/female/tail.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/tail.vox rename to assets/voxygen/voxel/npc/wolf/female/tail.vox diff --git a/assets/voxygen/voxel/npc/wolf/torso_back.vox b/assets/voxygen/voxel/npc/wolf/female/torso_back.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/torso_back.vox rename to assets/voxygen/voxel/npc/wolf/female/torso_back.vox diff --git a/assets/voxygen/voxel/npc/wolf/torso_mid.vox b/assets/voxygen/voxel/npc/wolf/female/torso_front.vox similarity index 100% rename from assets/voxygen/voxel/npc/wolf/torso_mid.vox rename to assets/voxygen/voxel/npc/wolf/female/torso_front.vox diff --git a/assets/voxygen/voxel/npc/wolf/foot_lb.vox b/assets/voxygen/voxel/npc/wolf/foot_lb.vox deleted file mode 100644 index 3d08b2c5d9..0000000000 --- a/assets/voxygen/voxel/npc/wolf/foot_lb.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:babd73717f66de32d4f4d9f4b7292282868f5144d471b884482b954706329a6a -size 44451 diff --git a/assets/voxygen/voxel/npc/wolf/foot_rb.vox b/assets/voxygen/voxel/npc/wolf/foot_rb.vox deleted file mode 100644 index 3c867f0b8e..0000000000 --- a/assets/voxygen/voxel/npc/wolf/foot_rb.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:66999e39ff845b84abf89ecb75cf235d8858c9ef0e7b3be5cd0b3cf16f0103de -size 44451 diff --git a/assets/voxygen/voxel/npc/wolf/male/ears.vox b/assets/voxygen/voxel/npc/wolf/male/ears.vox new file mode 100644 index 0000000000..b7c6231844 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/ears.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85da6b879004886b43a159a04b65417ab5d2ce7025f40ddf840f6a6099bd7e0a +size 44307 diff --git a/assets/voxygen/voxel/npc/wolf/male/foot_lb.vox b/assets/voxygen/voxel/npc/wolf/male/foot_lb.vox new file mode 100644 index 0000000000..0603ea3a54 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/foot_lb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e447d49b2deaa89c8354ae5115c39a32da2c825feac209b49e05270467f7b59 +size 1484 diff --git a/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox b/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox new file mode 100644 index 0000000000..7c5c2e8b64 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/foot_lf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f24f04d38cceb52344d33de69baeead27cb50fec15c6ef80d6115a4be6a419f +size 44451 diff --git a/assets/voxygen/voxel/npc/wolf/male/foot_rb.vox b/assets/voxygen/voxel/npc/wolf/male/foot_rb.vox new file mode 100644 index 0000000000..14fe710b19 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/foot_rb.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:311deb826b15abdc2d076686caa536a36876eee3e7c03fef5424c69a71c78191 +size 1244 diff --git a/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox b/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox new file mode 100644 index 0000000000..5473932907 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/foot_rf.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0e5984c410c1cf6891ae966541e25eb19ffefb56a2bf82d0d762c9d4b5464b0 +size 44451 diff --git a/assets/voxygen/voxel/npc/wolf/male/head_lower.vox b/assets/voxygen/voxel/npc/wolf/male/head_lower.vox new file mode 100644 index 0000000000..51bfcf9e2d --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/head_lower.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77d567a024aabc463b938e662f0340d1d88a62686950e12cdd583039fd32b893 +size 46691 diff --git a/assets/voxygen/voxel/npc/wolf/male/head_upper.vox b/assets/voxygen/voxel/npc/wolf/male/head_upper.vox new file mode 100644 index 0000000000..f750396fb1 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/head_upper.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:649ef3c87c3505e8599c75726236ff8e9d13caedd0bdec1155bd437cb486425f +size 47755 diff --git a/assets/voxygen/voxel/npc/wolf/male/jaw.vox b/assets/voxygen/voxel/npc/wolf/male/jaw.vox new file mode 100644 index 0000000000..df6a3470b6 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/jaw.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3190632201cc65f1a57b944cc07fd182ae3eceec2fc2852ffb3da3cd1a02d53e +size 44387 diff --git a/assets/voxygen/voxel/npc/wolf/male/tail.vox b/assets/voxygen/voxel/npc/wolf/male/tail.vox new file mode 100644 index 0000000000..3cbae3bb41 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25d41aef2c2b86c287b46ba301c8009c010750fa6c892e778ba76605c7055544 +size 44779 diff --git a/assets/voxygen/voxel/npc/wolf/male/torso_back.vox b/assets/voxygen/voxel/npc/wolf/male/torso_back.vox new file mode 100644 index 0000000000..fbcf070931 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/torso_back.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:393e513cb20d41b71e093a782938b33ed1dae801e19875342b2db72c5e964782 +size 48667 diff --git a/assets/voxygen/voxel/npc/wolf/male/torso_front.vox b/assets/voxygen/voxel/npc/wolf/male/torso_front.vox new file mode 100644 index 0000000000..d2e23b9d34 --- /dev/null +++ b/assets/voxygen/voxel/npc/wolf/male/torso_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c555e7dd857f908b787a53118d17d908a96762e3fe10f63a692d2969ac67eb5 +size 48863 diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron new file mode 100644 index 0000000000..1544a344d6 --- /dev/null +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -0,0 +1,483 @@ +({ + (Wolf, Male): ( + upper: ( + offset: (-7.0, -9.0, -5.5), + central: ("npc.wolf.male.head_upper"), + ), + lower: ( + offset: (-7.0, -4.5, -5.0), + central: ("npc.wolf.male.head_lower"), + ), + jaw: ( + offset: (-3.0, -3.0, -2.5), + central: ("npc.wolf.male.jaw"), + ), + torso_f: ( + offset: (-8.0, -5.5, -6.0), + central: ("npc.wolf.male.torso_front"), + ), + torso_b: ( + offset: (-7.0, -6.0, -6.0), + central: ("npc.wolf.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, -1.5), + central: ("npc.wolf.male.ears"), + ), + tail: ( + offset: (-2.0, -7.5, -5.0), + central: ("npc.wolf.male.tail"), + ), + ), + (Wolf, Female): ( + upper: ( + offset: (-7.0, -9.0, -5.5), + central: ("npc.wolf.female.head_upper"), + ), + lower: ( + offset: (-7.0, -4.5, -5.0), + central: ("npc.wolf.female.head_lower"), + ), + jaw: ( + offset: (-3.0, -3.0, -2.5), + central: ("npc.wolf.male.jaw"), + ), + torso_f: ( + offset: (-8.0, -5.5, -6.0), + central: ("npc.wolf.female.torso_front"), + ), + torso_b: ( + offset: (-7.0, -6.0, -6.0), + central: ("npc.wolf.female.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, -1.5), + central: ("npc.wolf.female.ears"), + ), + tail: ( + offset: (-2.0, -7.5, -5.0), + central: ("npc.wolf.female.tail"), + ), + ), + + (Saber, Male): ( + upper: ( + offset: (-4.0, -5.5, -6.5), + central: ("npc.saber.male.head_upper"), + ), + lower: ( + offset: (-4.0, -5.5, -4.0), + central: ("npc.saber.male.head_lower"), + ), + jaw: ( + offset: (-2.0, -2.5, -1.0), + central: ("npc.saber.male.jaw"), + ), + torso_f: ( + offset: (-6.0, -6.0, -5.5), + central: ("npc.saber.male.torso_front"), + ), + torso_b: ( + offset: (-6.0, -6.0, -5.0), + central: ("npc.saber.male.torso_back"), + ), + ears: ( + offset: (-5.0, -0.5, -1.5), + central: ("npc.saber.male.ears"), + ), + tail: ( + offset: (-1.0, -3.0, -4.0), + central: ("npc.saber.male.tail"), + ), + ), + (Saber, Female): ( + upper: ( + offset: (-4.0, -5.5, -6.5), + central: ("npc.saber.female.head_upper"), + ), + lower: ( + offset: (-4.0, -5.5, -4.0), + central: ("npc.saber.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -2.5, -1.0), + central: ("npc.saber.female.jaw"), + ), + torso_f: ( + offset: (-6.0, -6.0, -5.5), + central: ("npc.saber.female.torso_front"), + ), + torso_b: ( + offset: (-6.0, -6.0, -5.0), + central: ("npc.saber.female.torso_back"), + ), + ears: ( + offset: (-5.0, -0.5, -1.5), + central: ("npc.saber.female.ears"), + ), + tail: ( + offset: (-1.0, -3.0, -4.0), + central: ("npc.saber.female.tail"), + ), + ), + (Viper, Male): ( + upper: ( + offset: (-4.0, -5.5, -5.5), + central: ("npc.viper.male.head_upper"), + ), + lower: ( + offset: (-3.0, -4.5, -2.5), + central: ("npc.viper.male.head_lower"), + ), + jaw: ( + offset: (-3.0, -2.5, -1.0), + central: ("npc.viper.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -6.5, -3.5), + central: ("npc.viper.male.torso_front"), + ), + torso_b: ( + offset: (-4.0, -7.0, -3.0), + central: ("npc.viper.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.5, 1.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -5.0, -1.5), + central: ("armor.empty"), + ), + ), + (Viper, Female): ( + upper: ( + offset: (-4.0, -5.5, -5.5), + central: ("npc.viper.female.head_upper"), + ), + lower: ( + offset: (-3.0, -4.5, -2.5), + central: ("npc.viper.female.head_lower"), + ), + jaw: ( + offset: (-3.0, -2.5, -1.0), + central: ("npc.viper.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -6.5, -3.5), + central: ("npc.viper.female.torso_front"), + ), + torso_b: ( + offset: (-4.0, -7.0, -3.0), + central: ("npc.viper.female.torso_back"), + ), + ears: ( + offset: (-3.0, -1.5, 1.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -5.0, -1.5), + central: ("npc.viper.male.tail"), + ), + ), + (Tuskram, Male): ( + upper: ( + offset: (-4.0, -6.5, -7.0), + central: ("npc.tuskram.female.head_upper"), + ), + lower: ( + offset: (-3.0, -4.5, -2.0), + central: ("npc.tuskram.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -1.0, -1.0), + central: ("npc.tuskram.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -6.0, -4.0), + central: ("npc.tuskram.male.torso_front"), + ), + torso_b: ( + offset: (-5.0, -6.0, -4.0), + central: ("npc.tuskram.male.torso_back"), + ), + ears: ( + offset: (-2.0, -1.0, -1.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -2.5, -4.0), + central: ("npc.tuskram.male.tail"), + ), + ), + (Tuskram, Female): ( + upper: ( + offset: (-4.0, -6.5, -7.0), + central: ("npc.tuskram.female.head_upper"), + ), + lower: ( + offset: (-3.0, -4.5, -2.0), + central: ("npc.tuskram.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -1.0, -1.0), + central: ("npc.tuskram.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -6.0, -4.0), + central: ("npc.tuskram.female.torso_front"), + ), + torso_b: ( + offset: (-5.0, -6.0, -4.0), + central: ("npc.tuskram.female.torso_back"), + ), + ears: ( + offset: (-2.0, -1.0, -1.0), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -2.5, -4.0), + central: ("npc.tuskram.male.tail"), + ), + ), + (Alligator, Male): ( + upper: ( + offset: (-4.0, -5.0, -6.0), + central: ("npc.alligator.male.head_upper"), + ), + lower: ( + offset: (-4.0, -4.5, -1.5), + central: ("npc.alligator.male.head_lower"), + ), + jaw: ( + offset: (-2.0, -7.0, -1.0), + central: ("npc.alligator.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -6.5, -2.5), + central: ("npc.alligator.male.torso_front"), + ), + torso_b: ( + offset: (-4.0, -7.0, -2.0), + central: ("npc.alligator.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, -0.5), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -4.5, -1.5), + central: ("npc.alligator.male.tail"), + ), + ), + (Alligator, Female): ( + upper: ( + offset: (-4.0, -5.0, -6.0), + central: ("npc.alligator.female.head_upper"), + ), + lower: ( + offset: (-4.0, -4.5, -1.5), + central: ("npc.alligator.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -7.0, -1.0), + central: ("npc.alligator.female.jaw"), + ), + torso_f: ( + offset: (-5.0, -6.5, -2.5), + central: ("npc.alligator.female.torso_front"), + ), + torso_b: ( + offset: (-4.0, -7.0, -2.0), + central: ("npc.alligator.female.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, -0.5), + central: ("armor.empty"), + ), + tail: ( + offset: (-2.0, -4.5, -1.5), + central: ("npc.alligator.male.tail"), + ), + ), + (Monitor, Male): ( + upper: ( + offset: (-3.0, -6.5, -2.5), + central: ("npc.monitor.female.head_upper"), + ), + lower: ( + offset: (-3.0, -4.5, -1.5), + central: ("npc.monitor.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -3.0, -1.0), + central: ("npc.monitor.male.jaw"), + ), + torso_f: ( + offset: (-4.0, -6.5, -2.0), + central: ("npc.monitor.male.torso_front"), + ), + torso_b: ( + offset: (-3.0, -6.5, -1.5), + central: ("npc.monitor.male.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, -0.5), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -6.5, -1.0), + central: ("npc.monitor.male.tail"), + ), + ), + (Monitor, Female): ( + upper: ( + offset: (-3.0, -6.5, -2.5), + central: ("npc.monitor.female.head_upper"), + ), + lower: ( + offset: (-3.0, -4.5, -1.5), + central: ("npc.monitor.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -3.0, -1.0), + central: ("npc.monitor.male.jaw"), + ), + torso_f: ( + offset: (-4.0, -6.5, -2.0), + central: ("npc.monitor.female.torso_front"), + ), + torso_b: ( + offset: (-3.0, -6.5, -1.5), + central: ("npc.monitor.female.torso_back"), + ), + ears: ( + offset: (-3.0, -1.0, -0.5), + central: ("armor.empty"), + ), + tail: ( + offset: (-1.0, -6.5, -1.0), + central: ("npc.monitor.male.tail"), + ), + ), + (Lion, Male): ( + upper: ( + offset: (-4.5, -5.0, -4.0), + central: ("npc.lion.male.head_upper"), + ), + lower: ( + offset: (-6.5, -5.0, -7.0), + central: ("npc.lion.male.head_lower"), + ), + jaw: ( + offset: (-2.5, -2.5, -0.5), + central: ("npc.lion.male.jaw"), + ), + torso_f: ( + offset: (-5.5, -7.5, -5.5), + central: ("npc.lion.male.torso_front"), + ), + torso_b: ( + offset: (-6.5, -6.0, -5.0), + central: ("npc.lion.male.torso_back"), + ), + ears: ( + offset: (-3.5, -1.0, -1.0), + central: ("npc.lion.male.ears"), + ), + tail: ( + offset: (-0.5, -1.0, -8.0), + central: ("npc.lion.male.tail"), + ), + ), + (Lion, Female): ( + upper: ( + offset: (-4.5, -5.0, -4.0), + central: ("npc.lion.female.head_upper"), + ), + lower: ( + offset: (-6.5, -5.0, -7.0), + central: ("npc.lion.female.head_lower"), + ), + jaw: ( + offset: (-2.5, -2.5, -0.5), + central: ("npc.lion.male.jaw"), + ), + torso_f: ( + offset: (-5.5, -7.5, -5.5), + central: ("npc.lion.female.torso_front"), + ), + torso_b: ( + offset: (-6.5, -6.0, -5.0), + central: ("npc.lion.female.torso_back"), + ), + ears: ( + offset: (-3.5, -1.0, -1.0), + central: ("npc.lion.female.ears"), + ), + tail: ( + offset: (-0.5, -1.0, -1.0), + central: ("npc.lion.male.tail"), + ), + ), + (Tarasque, Male): ( + upper: ( + offset: (-6.0, -6.0, -9.5), + central: ("npc.tarasque.male.head_upper"), + ), + lower: ( + offset: (-3.5, -4.0, -2.5), + central: ("npc.tarasque.male.head_lower"), + ), + jaw: ( + offset: (-2.0, -2.5, -1.0), + central: ("npc.tarasque.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -7.0, -6.5), + central: ("npc.tarasque.male.torso_front"), + ), + torso_b: ( + offset: (-5.0, -6.0, -5.5), + central: ("npc.tarasque.male.torso_back"), + ), + ears: ( + offset: (-4.5, -1.0, -1.5), + central: ("npc.tarasque.male.ears"), + ), + tail: ( + offset: (-1.0, -1.5, -1.0), + central: ("npc.tarasque.male.tail"), + ), + ), + (Tarasque, Female): ( + upper: ( + offset: (-6.0, -6.0, -9.5), + central: ("npc.tarasque.female.head_upper"), + ), + lower: ( + offset: (-3.5, -4.0, -2.5), + central: ("npc.tarasque.female.head_lower"), + ), + jaw: ( + offset: (-2.0, -2.5, -1.0), + central: ("npc.tarasque.male.jaw"), + ), + torso_f: ( + offset: (-5.0, -7.0, -6.5), + central: ("npc.tarasque.female.torso_front"), + ), + torso_b: ( + offset: (-5.0, -6.0, -5.5), + central: ("npc.tarasque.female.torso_back"), + ), + ears: ( + offset: (-4.5, -1.0, -1.5), + central: ("npc.tarasque.female.ears"), + ), + tail: ( + offset: (-1.0, -1.5, -8.0), + central: ("npc.tarasque.male.tail"), + ), + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron new file mode 100644 index 0000000000..60ada93e68 --- /dev/null +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -0,0 +1,290 @@ +({ + (Wolf, Male): ( + left_front: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.wolf.male.foot_lf"), + ), + right_front: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.wolf.male.foot_rf"), + ), + left_back: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.wolf.male.foot_lb"), + ), + right_back: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.wolf.male.foot_rb"), + ), + ), + (Wolf, Female): ( + left_front: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.wolf.female.foot_lf"), + ), + right_front: ( + offset: (-2.5, -4.0, -1.5), + lateral: ("npc.wolf.female.foot_rf"), + ), + left_back: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.wolf.female.foot_lb"), + ), + right_back: ( + offset: (-2.5, -4.0, -3.0), + lateral: ("npc.wolf.female.foot_rb"), + ), + ), + (Saber, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -4.0, -3.5), + lateral: ("npc.saber.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -4.0, -3.5), + lateral: ("npc.saber.male.foot_rb"), + ), + ), + (Saber, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.saber.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -4.0, -3.5), + lateral: ("npc.saber.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.saber.female.foot_rb"), + ), + ), + (Viper, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.male.foot_rb"), + ), + ), + (Viper, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.viper.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.viper.female.foot_rb"), + ), + ), + (Tuskram, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tuskram.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tuskram.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -3.0, -3.5), + lateral: ("npc.tuskram.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -3.0, -3.5), + lateral: ("npc.tuskram.male.foot_rb"), + ), + ), + (Tuskram, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tuskram.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tuskram.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -3.0, -3.5), + lateral: ("npc.tuskram.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -3.0, -3.5), + lateral: ("npc.tuskram.female.foot_rb"), + ), + ), + (Alligator, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.male.foot_rb"), + ), + ), + (Alligator, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.alligator.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.alligator.female.foot_rb"), + ), + ), + (Monitor, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.male.foot_rb"), + ), + ), + (Monitor, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.monitor.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.monitor.female.foot_rb"), + ), + ), + (Lion, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.male.foot_rb"), + ), + ), + (Lion, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.lion.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.lion.female.foot_rb"), + ), + ), + (Tarasque, Male): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.male.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.male.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.male.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.male.foot_rb"), + ), + ), + (Tarasque, Female): ( + left_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.female.foot_lf"), + ), + right_front: ( + offset: (-1.5, -1.5, -2.5), + lateral: ("npc.tarasque.female.foot_rf"), + ), + left_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.female.foot_lb"), + ), + right_back: ( + offset: (-1.5, -2.0, -3.5), + lateral: ("npc.tarasque.female.foot_rb"), + ), + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_central_manifest.ron b/assets/voxygen/voxel/quadruped_small_central_manifest.ron new file mode 100644 index 0000000000..b2805684ba --- /dev/null +++ b/assets/voxygen/voxel/quadruped_small_central_manifest.ron @@ -0,0 +1,254 @@ +({ + (Pig, Male): ( + head: ( + offset: (-6.0, -2.5, -4.5), + central: ("npc.pig.male.head"), + ), + chest: ( + offset: (-5.0, -4.5, -5.5), + central: ("npc.pig.male.chest"), + ), + ), + (Pig, Female):( + head: ( + offset: (-6.0, -2.5, -4.5), + central: ("npc.pig.female.head"), + ), + chest: ( + offset: (-5.0, -4.5, -5.5), + central: ("npc.pig.female.chest"), + ), + ), + + (Fox, Male):( + head: ( + offset: (-3.5, -3.0, -3.5), + central: ("npc.fox.male.head"), + ), + chest: ( + offset: (-1.5, -8.0, -2.5), + central: ("npc.fox.male.chest"), + ), + ), + + (Fox, Female):( + head: ( + offset: (-3.5, -3.0, -3.5), + central: ("npc.fox.female.head"), + ), + chest: ( + offset: (-1.5, -8.0, -2.5), + central: ("npc.fox.female.chest"), + ), + ), + + (Sheep, Male):( + head: ( + offset: (-5.0, -4.5, -3.5), + central: ("npc.sheep.male.head"), + ), + chest: ( + offset: (-5.0, -6.5, -3.5), + central: ("npc.sheep.male.chest"), + ), + ), + + (Sheep, Female):( + head: ( + offset: (-5.0, -4.5, -3.5), + central: ("npc.sheep.female.head"), + ), + chest: ( + offset: (-5.0, -6.5, -3.5), + central: ("npc.sheep.female.chest"), + ), + ), + (Boar, Male):( + head: ( + offset: (-5.5, -6.5, -4.0), + central: ("npc.boar.male.head"), + ), + chest: ( + offset: (-3.5, -9.5, -4.5), + central: ("npc.boar.male.chest"), + ), + ), + (Boar, Female):( + head: ( + offset: (-5.5, -6.5, -4.0), + central: ("npc.boar.female.head"), + ), + chest: ( + offset: (-3.5, -9.5, -4.5), + central: ("npc.boar.female.chest"), + ), + ), + (Jackalope, Male):( + head: ( + offset: (-3.5, -4.5, -4.5), + central: ("npc.jackalope.male.head"), + ), + chest: ( + offset: (-1.5, -7.5, -2.5), + central: ("npc.jackalope.male.chest"), + ), + ), + (Jackalope, Female):( + head: ( + offset: (-3.5, -4.5, -4.5), + central: ("npc.jackalope.female.head"), + ), + chest: ( + offset: (-1.5, -7.5, -2.5), + central: ("npc.jackalope.female.chest"), + ), + ), + (Skunk, Male):( + head: ( + offset: (-2.0, -1.0, -2.0), + central: ("npc.skunk.male.head"), + ), + chest: ( + offset: (-4.0, -10.5, -4.5), + central: ("npc.skunk.male.chest"), + ), + ), + (Skunk, Female):( + head: ( + offset: (-2.0, -1.0, -2.0), + central: ("npc.skunk.female.head"), + ), + chest: ( + offset: (-4.0, -10.5, -4.5), + central: ("npc.skunk.female.chest"), + ), + ), + (Cat, Male):( + head: ( + offset: (-3.5, -3.0, -3.5), + central: ("npc.cat.male.head"), + ), + chest: ( + offset: (-1.5, -5.5, -2.5), + central: ("npc.cat.male.chest"), + ), + ), + (Cat, Female):( + head: ( + offset: (-3.5, -3.0, -3.5), + central: ("npc.cat.female.head"), + ), + chest: ( + offset: (-1.5, -5.5, -2.5), + central: ("npc.cat.female.chest"), + ), + ), + (Batfox, Male):( + head: ( + offset: (-9.5, -6.0, -4.0), + central: ("npc.batfox.male.head"), + ), + chest: ( + offset: (-1.5, -7.5, -2.5), + central: ("npc.batfox.male.chest"), + ), + ), + + (Batfox, Female):( + head: ( + offset: (-9.5, -6.0, -4.0), + central: ("npc.batfox.female.head"), + ), + chest: ( + offset: (-1.5, -7.5, -2.5), + central: ("npc.batfox.female.chest"), + ), + ), + + (Raccoon, Male):( + head: ( + offset: (-4.0, -4.0, -3.5), + central: ("npc.raccoon.male.head"), + ), + chest: ( + offset: (-3.0, -7.5, -3.0), + central: ("npc.raccoon.male.chest"), + ), + ), + + (Raccoon, Female):( + head: ( + offset: (-4.0, -4.0, -3.5), + central: ("npc.raccoon.female.head"), + ), + chest: ( + offset: (-3.0, -7.5, -3.0), + central: ("npc.raccoon.female.chest"), + ), + ), + + (Quokka, Male):( + head: ( + offset: (-4.5, -3.0, -4.0), + central: ("npc.quokka.male.head"), + ), + chest: ( + offset: (-5.0, -7.5, -4.0), + central: ("npc.quokka.male.chest"), + ), + ), + + (Quokka, Female):( + head: ( + offset: (-4.5, -3.0, -4.0), + central: ("npc.quokka.female.head"), + ), + chest: ( + offset: (-5.0, -7.5, -4.0), + central: ("npc.quokka.female.chest"), + ), + ), + + (Dodarock, Male):( + head: ( + offset: (-5.0, -3.5, -4.5), + central: ("npc.dodarock.male.head"), + ), + chest: ( + offset: (-5.0, -7.5, -4.5), + central: ("npc.dodarock.male.chest"), + ), + ), + + (Dodarock, Female):( + head: ( + offset: (-5.0, -3.5, -4.5), + central: ("npc.dodarock.female.head"), + ), + chest: ( + offset: (-5.0, -7.5, -4.5), + central: ("npc.dodarock.female.chest"), + ), + ), + (Holladon, Male):( + head: ( + offset: (-3.5, -3.5, -4.0), + central: ("npc.holladon.male.head"), + ), + chest: ( + offset: (-3.0, -7.5, -3.0), + central: ("npc.holladon.male.chest"), + ), + ), + + (Holladon, Female):( + head: ( + offset: (-3.5, -3.5, -4.0), + central: ("npc.holladon.female.head"), + ), + chest: ( + offset: (-3.0, -7.5, -3.0), + central: ("npc.holladon.female.chest"), + ), + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron new file mode 100644 index 0000000000..5b102d6b11 --- /dev/null +++ b/assets/voxygen/voxel/quadruped_small_lateral_manifest.ron @@ -0,0 +1,450 @@ +({ + (Pig, Male): ( + left_front: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.male.foot_l"), + ), + right_front: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.male.foot_r"), + ), + left_back: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.male.foot_l"), + ), + right_back: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.male.foot_r"), + ), + ), + (Pig, Female): ( + left_front: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.female.foot_l"), + ), + right_front: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.female.foot_r"), + ), + left_back: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.female.foot_l"), + ), + right_back: ( + offset: (-1.0, -1.0, -1.5), + lateral: ("npc.pig.female.foot_r"), + ), + ), + + (Fox, Male): ( + left_front: ( + offset: (-1.0, -2.5, -2.5), + lateral: ("npc.fox.male.foot_fl"), + ), + right_front: ( + offset: (-1.0, -2.5, -2.5), + lateral: ("npc.fox.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.fox.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.fox.male.foot_br"), + ), + ), + (Fox, Female): ( + left_front: ( + offset: (-1.0, -2.5, -2.5), + lateral: ("npc.fox.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.fox.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.fox.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.fox.female.foot_br"), + ), + ), + + (Sheep, Male): ( + left_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.male.foot_l"), + ), + right_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.male.foot_r"), + ), + left_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.male.foot_l"), + ), + right_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.male.foot_r"), + ), + ), + + (Sheep, Female): ( + left_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.female.foot_l"), + ), + right_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.female.foot_r"), + ), + left_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.female.foot_l"), + ), + right_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.sheep.female.foot_r"), + ), + ), + + (Boar, Male): ( + left_front: ( + offset: (-1.5, -3.5, -4.0), + lateral: ("npc.boar.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.boar.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.boar.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.boar.male.foot_br"), + ), + ), + + (Boar, Female): ( + left_front: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.boar.female.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.boar.female.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.boar.female.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.boar.female.foot_br"), + ), + ), + (Jackalope, Male): ( + left_front: ( + offset: (-1.5, -3.5, -4.0), + lateral: ("npc.jackalope.male.foot_fl"), + ), + right_front: ( + offset: (-1.5, -3.5, -4.0), + lateral: ("npc.jackalope.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.jackalope.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.jackalope.male.foot_br"), + ), + ), + + (Jackalope, Female): ( + left_front: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.jackalope.female.foot_fl"), + ), + right_front: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.jackalope.female.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.jackalope.female.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.5, -6.0), + lateral: ("npc.jackalope.female.foot_br"), + ), + ), + (Skunk, Male): ( + left_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.male.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.male.foot_br"), + ), + ), + + (Skunk, Female): ( + left_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -1.0, -3.5), + lateral: ("npc.skunk.female.foot_br"), + ), + + ), + (Cat, Male): ( + left_front: ( + offset: (-1.0, -1.5, -3.0), + lateral: ("npc.cat.male.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.5, -3.0), + lateral: ("npc.cat.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.0, -3.0), + lateral: ("npc.cat.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.0, -3.0), + lateral: ("npc.cat.male.foot_br"), + ), + ), + + (Cat, Female): ( + left_front: ( + offset: (-1.0, -1.5, -3.0), + lateral: ("npc.cat.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.5, -3.0), + lateral: ("npc.cat.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.0, -3.0), + lateral: ("npc.cat.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.0, -3.0), + lateral: ("npc.cat.female.foot_br"), + ), + + ), + (Batfox, Male): ( + left_front: ( + offset: (-1.0, -1.5, -3.0), + lateral: ("npc.batfox.male.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.5, -3.0), + lateral: ("npc.batfox.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.5, -3.5), + lateral: ("npc.batfox.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.5, -3.5), + lateral: ("npc.batfox.male.foot_br"), + ), + ), + + (Batfox, Female): ( + left_front: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.batfox.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.batfox.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.5, -3.5), + lateral: ("npc.batfox.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.5, -3.5), + lateral: ("npc.batfox.female.foot_br"), + ), + + ), + (Raccoon, Male): ( + left_front: ( + offset: (-0.5, -0.5, -2.5), + lateral: ("npc.raccoon.male.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.5, -2.5), + lateral: ("npc.raccoon.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.raccoon.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.raccoon.male.foot_br"), + ), + ), + + (Raccoon, Female): ( + left_front: ( + offset: (-0.5, -0.5, -2.5), + lateral: ("npc.raccoon.female.foot_fl"), + ), + right_front: ( + offset: (-0.5, -0.5, -2.5), + lateral: ("npc.raccoon.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.raccoon.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.raccoon.female.foot_br"), + ), + ), + (Quokka, Male): ( + left_front: ( + offset: (-1.0, -1.0, -2.5), + lateral: ("npc.quokka.male.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.0, -2.5), + lateral: ("npc.quokka.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.quokka.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.quokka.male.foot_br"), + ), + ), + + (Quokka, Female): ( + left_front: ( + offset: (-1.0, -1.0, -2.5), + lateral: ("npc.quokka.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -1.0, -2.5), + lateral: ("npc.quokka.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.quokka.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -1.5, -2.5), + lateral: ("npc.quokka.female.foot_br"), + ), + ), + (Dodarock, Male): ( + left_front: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.dodarock.male.foot_fl"), + ), + right_front: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.dodarock.male.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.dodarock.male.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.dodarock.male.foot_br"), + ), + ), + + (Dodarock, Female): ( + left_front: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.dodarock.female.foot_fl"), + ), + right_front: ( + offset: (-2.0, -3.0, -4.0), + lateral: ("npc.dodarock.female.foot_fr"), + ), + left_back: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.dodarock.female.foot_bl"), + ), + right_back: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.dodarock.female.foot_br"), + ), + ), + (Holladon, Male): ( + left_front: ( + offset: (-1.0, -3.0, -4.0), + lateral: ("npc.holladon.male.foot_fl"), + ), + right_front: ( + offset: (-1.0, -3.0, -4.0), + lateral: ("npc.holladon.male.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.holladon.male.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.holladon.male.foot_br"), + ), + ), + + (Holladon, Female): ( + left_front: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.holladon.female.foot_fl"), + ), + right_front: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.holladon.female.foot_fr"), + ), + left_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.holladon.female.foot_bl"), + ), + right_back: ( + offset: (-1.0, -2.0, -2.5), + lateral: ("npc.holladon.female.foot_br"), + ), + ), +}) \ No newline at end of file diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 73736b434d..ec25d4ae2e 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -1,6 +1,7 @@ pub mod biped_large; pub mod bird_medium; pub mod bird_small; +pub mod critter; pub mod dragon; pub mod fish_medium; pub mod fish_small; @@ -25,6 +26,7 @@ pub enum Body { FishSmall(fish_small::Body) = 7, BipedLarge(biped_large::Body) = 8, Object(object::Body) = 9, + Critter(critter::Body) = 10, } impl Body { @@ -42,6 +44,7 @@ impl Body { Body::Humanoid(_) => 0.5, Body::QuadrupedSmall(_) => 0.6, Body::QuadrupedMedium(_) => 0.9, + Body::Critter(_) => 0.5, Body::BirdMedium(_) => 0.5, Body::FishMedium(_) => 0.5, Body::Dragon(_) => 2.5, diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index cb30f1ba4e..f1c78f26ed 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -3,110 +3,30 @@ use rand::{seq::SliceRandom, thread_rng}; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(C)] pub struct Body { - pub head: Head, - pub upper_torso: UpperTorso, - pub lower_torso: LowerTorso, - pub shoulder_l: ShoulderL, - pub shoulder_r: ShoulderR, - pub hand_l: HandL, - pub hand_r: HandR, - pub leg_l: LegL, - pub leg_r: LegR, - pub foot_l: FootL, - pub foot_r: FootR, + pub species: Species, + pub body_type: BodyType, } + impl Body { pub fn random() -> Self { let mut rng = thread_rng(); - Self { - head: *(&ALL_HEADS).choose(&mut rng).unwrap(), - upper_torso: *(&ALL_UPPER_TORSOS).choose(&mut rng).unwrap(), - lower_torso: *(&ALL_LOWER_TORSOS).choose(&mut rng).unwrap(), - shoulder_l: *(&ALL_SHOULDER_LS).choose(&mut rng).unwrap(), - shoulder_r: *(&ALL_SHOULDER_RS).choose(&mut rng).unwrap(), - hand_l: *(&ALL_HAND_LS).choose(&mut rng).unwrap(), - hand_r: *(&ALL_HAND_RS).choose(&mut rng).unwrap(), - leg_l: *(&ALL_LEG_LS).choose(&mut rng).unwrap(), - leg_r: *(&ALL_LEG_RS).choose(&mut rng).unwrap(), - foot_l: *(&ALL_FOOT_LS).choose(&mut rng).unwrap(), - foot_r: *(&ALL_FOOT_RS).choose(&mut rng).unwrap(), - } + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + let body_type = *(&ALL_BODY_TYPES).choose(&mut rng).unwrap(); + Self { species, body_type } } } #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum Head { - Default, +pub enum Species { + Giant = 0, } -const ALL_HEADS: [Head; 1] = [Head::Default]; +pub const ALL_SPECIES: [Species; 1] = [Species::Giant]; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum UpperTorso { - Default, +pub enum BodyType { + Female = 0, + Male = 1, } -const ALL_UPPER_TORSOS: [UpperTorso; 1] = [UpperTorso::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum LowerTorso { - Default, -} -const ALL_LOWER_TORSOS: [LowerTorso; 1] = [LowerTorso::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum ShoulderL { - Default, -} -const ALL_SHOULDER_LS: [ShoulderL; 1] = [ShoulderL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum ShoulderR { - Default, -} -const ALL_SHOULDER_RS: [ShoulderR; 1] = [ShoulderR::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum HandL { - Default, -} -const ALL_HAND_LS: [HandL; 1] = [HandL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum HandR { - Default, -} -const ALL_HAND_RS: [HandR; 1] = [HandR::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum LegL { - Default, -} -const ALL_LEG_LS: [LegL; 1] = [LegL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum LegR { - Default, -} -const ALL_LEG_RS: [LegR; 1] = [LegR::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum FootL { - Default, -} -const ALL_FOOT_LS: [FootL; 1] = [FootL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum FootR { - Default, -} -const ALL_FOOT_RS: [FootR; 1] = [FootR::Default]; +pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/body/bird_medium.rs b/common/src/comp/body/bird_medium.rs index d4aafb1fcd..dbf27b56f3 100644 --- a/common/src/comp/body/bird_medium.rs +++ b/common/src/comp/body/bird_medium.rs @@ -3,74 +3,38 @@ use rand::{seq::SliceRandom, thread_rng}; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(C)] pub struct Body { - pub head: Head, - pub torso: Torso, - pub tail: Tail, - pub wing_l: WingL, - pub wing_r: WingR, - pub leg_l: LegL, - pub leg_r: LegR, + pub species: Species, + pub body_type: BodyType, } + impl Body { pub fn random() -> Self { let mut rng = thread_rng(); - Self { - head: *(&ALL_HEADS).choose(&mut rng).unwrap(), - torso: *(&ALL_TORSOS).choose(&mut rng).unwrap(), - tail: *(&ALL_TAILS).choose(&mut rng).unwrap(), - wing_l: *(&ALL_WING_LS).choose(&mut rng).unwrap(), - wing_r: *(&ALL_WING_RS).choose(&mut rng).unwrap(), - leg_l: *(&ALL_LEG_LS).choose(&mut rng).unwrap(), - leg_r: *(&ALL_LEG_RS).choose(&mut rng).unwrap(), - } + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + let body_type = *(&ALL_BODY_TYPES).choose(&mut rng).unwrap(); + Self { species, body_type } } } #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum Head { - Default, +pub enum Species { + Duck = 0, + Chicken = 1, + Goose = 2, + Peacock = 3, } -const ALL_HEADS: [Head; 1] = [Head::Default]; +pub const ALL_SPECIES: [Species; 4] = [ + Species::Duck, + Species::Chicken, + Species::Goose, + Species::Peacock, +]; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum Torso { - Default, +pub enum BodyType { + Female = 0, + Male = 1, } -const ALL_TORSOS: [Torso; 1] = [Torso::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Tail { - Default, -} -const ALL_TAILS: [Tail; 1] = [Tail::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum WingL { - Default, -} -const ALL_WING_LS: [WingL; 1] = [WingL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum WingR { - Default, -} -const ALL_WING_RS: [WingR; 1] = [WingR::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum LegL { - Default, -} -const ALL_LEG_LS: [LegL; 1] = [LegL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum LegR { - Default, -} -const ALL_LEG_RS: [LegR; 1] = [LegR::Default]; +pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/body/critter.rs b/common/src/comp/body/critter.rs new file mode 100644 index 0000000000..622ac03167 --- /dev/null +++ b/common/src/comp/body/critter.rs @@ -0,0 +1,44 @@ +use rand::{seq::SliceRandom, thread_rng}; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(C)] +pub struct Body { + pub species: Species, + pub body_type: BodyType, +} + +impl Body { + pub fn random() -> Self { + let mut rng = thread_rng(); + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + let body_type = *(&ALL_BODY_TYPES).choose(&mut rng).unwrap(); + Self { species, body_type } + } +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum Species { + Rat = 0, + Axolotl = 1, + Gecko = 2, + Turtle = 3, + Squirrel = 4, + Fungome = 5, +} +pub const ALL_SPECIES: [Species; 6] = [ + Species::Rat, + Species::Axolotl, + Species::Gecko, + Species::Turtle, + Species::Squirrel, + Species::Fungome, +]; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(u32)] +pub enum BodyType { + Female = 0, + Male = 1, +} +pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/body/giant.rs b/common/src/comp/body/giant.rs index 64b6d520d0..2980f6651c 100644 --- a/common/src/comp/body/giant.rs +++ b/common/src/comp/body/giant.rs @@ -6,7 +6,7 @@ pub struct Body { pub head: Head, pub shoulder: Shoulder, pub chest: Chest, - pub hand: Hand + pub hand: Hand, pub belt: Belt, pub pants: Pants, pub foot: Foot, diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs index 8bef83af4b..71362d7e42 100644 --- a/common/src/comp/body/quadruped_medium.rs +++ b/common/src/comp/body/quadruped_medium.rs @@ -3,111 +3,46 @@ use rand::{seq::SliceRandom, thread_rng}; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(C)] pub struct Body { - pub head_upper: HeadUpper, - pub jaw: Jaw, - pub head_lower: HeadLower, - pub tail: Tail, - pub torso_back: TorsoBack, - pub torso_mid: TorsoMid, - pub ears: Ears, - pub foot_lf: FootLF, - pub foot_rf: FootRF, - pub foot_lb: FootLB, - pub foot_rb: FootRB, + pub species: Species, + pub body_type: BodyType, } impl Body { pub fn random() -> Self { let mut rng = thread_rng(); - Self { - head_upper: *(&ALL_HEADS_UPPER).choose(&mut rng).unwrap(), - jaw: *(&ALL_JAWS).choose(&mut rng).unwrap(), - head_lower: *(&ALL_HEADS_LOWER).choose(&mut rng).unwrap(), - tail: *(&ALL_TAILS).choose(&mut rng).unwrap(), - torso_back: *(&ALL_TORSOS_BACK).choose(&mut rng).unwrap(), - torso_mid: *(&ALL_TORSOS_MID).choose(&mut rng).unwrap(), - ears: *(&ALL_EARS).choose(&mut rng).unwrap(), - foot_lf: *(&ALL_FEETS_LF).choose(&mut rng).unwrap(), - foot_rf: *(&ALL_FEETS_RF).choose(&mut rng).unwrap(), - foot_lb: *(&ALL_FEETS_LB).choose(&mut rng).unwrap(), - foot_rb: *(&ALL_FEETS_RB).choose(&mut rng).unwrap(), - } + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + let body_type = *(&ALL_BODY_TYPES).choose(&mut rng).unwrap(); + Self { species, body_type } } } #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum HeadUpper { - Default, +pub enum Species { + Wolf = 0, + Saber = 1, + Viper = 2, + Tuskram = 3, + Alligator = 4, + Monitor = 5, + Lion = 6, + Tarasque = 7, } -const ALL_HEADS_UPPER: [HeadUpper; 1] = [HeadUpper::Default]; +pub const ALL_SPECIES: [Species; 8] = [ + Species::Wolf, + Species::Saber, + Species::Viper, + Species::Tuskram, + Species::Alligator, + Species::Monitor, + Species::Lion, + Species::Tarasque, +]; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[repr(u32)] -pub enum Jaw { - Default, +pub enum BodyType { + Female = 0, + Male = 1, } -const ALL_JAWS: [Jaw; 1] = [Jaw::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum HeadLower { - Default, -} -const ALL_HEADS_LOWER: [HeadLower; 1] = [HeadLower::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Tail { - Default, -} -const ALL_TAILS: [Tail; 1] = [Tail::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum TorsoBack { - Default, -} -const ALL_TORSOS_BACK: [TorsoBack; 1] = [TorsoBack::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum TorsoMid { - Default, -} -const ALL_TORSOS_MID: [TorsoMid; 1] = [TorsoMid::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum Ears { - Default, -} -const ALL_EARS: [Ears; 1] = [Ears::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum FootLF { - Default, -} -const ALL_FEETS_LF: [FootLF; 1] = [FootLF::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum FootRF { - Default, -} -const ALL_FEETS_RF: [FootRF; 1] = [FootRF::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum FootLB { - Default, -} -const ALL_FEETS_LB: [FootLB; 1] = [FootLB::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -#[repr(u32)] -pub enum FootRB { - Default, -} -const ALL_FEETS_RB: [FootRB; 1] = [FootRB::Default]; +pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs index 0ce02d68d3..7a24087a26 100644 --- a/common/src/comp/body/quadruped_small.rs +++ b/common/src/comp/body/quadruped_small.rs @@ -1,45 +1,56 @@ use rand::{seq::SliceRandom, thread_rng}; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[repr(C)] pub struct Body { - pub head: Head, - pub chest: Chest, - pub leg_l: LegL, - pub leg_r: LegR, + pub species: Species, + pub body_type: BodyType, } impl Body { pub fn random() -> Self { let mut rng = thread_rng(); - Self { - head: *(&ALL_HEADS).choose(&mut rng).unwrap(), - chest: *(&ALL_CHESTS).choose(&mut rng).unwrap(), - leg_l: *(&ALL_LEGS_L).choose(&mut rng).unwrap(), - leg_r: *(&ALL_LEGS_R).choose(&mut rng).unwrap(), - } + let species = *(&ALL_SPECIES).choose(&mut rng).unwrap(); + let body_type = *(&ALL_BODY_TYPES).choose(&mut rng).unwrap(); + Self { species, body_type } } } #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum Head { - Default, +#[repr(u32)] +pub enum Species { + Pig = 0, + Fox = 1, + Sheep = 2, + Boar = 3, + Jackalope = 4, + Skunk = 5, + Cat = 6, + Batfox = 7, + Raccoon = 8, + Quokka = 9, + Dodarock = 10, + Holladon = 11, } -const ALL_HEADS: [Head; 1] = [Head::Default]; +pub const ALL_SPECIES: [Species; 12] = [ + Species::Pig, + Species::Fox, + Species::Sheep, + Species::Boar, + Species::Jackalope, + Species::Skunk, + Species::Cat, + Species::Batfox, + Species::Raccoon, + Species::Quokka, + Species::Dodarock, + Species::Holladon, +]; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum Chest { - Default, +#[repr(u32)] +pub enum BodyType { + Female = 0, + Male = 1, } -const ALL_CHESTS: [Chest; 1] = [Chest::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum LegL { - Default, -} -const ALL_LEGS_L: [LegL; 1] = [LegL::Default]; - -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum LegR { - Default, -} -const ALL_LEGS_R: [LegR; 1] = [LegR::Default]; +pub const ALL_BODY_TYPES: [BodyType; 2] = [BodyType::Female, BodyType::Male]; diff --git a/common/src/comp/mod.rs b/common/src/comp/mod.rs index 21f6114608..f084736af2 100644 --- a/common/src/comp/mod.rs +++ b/common/src/comp/mod.rs @@ -18,8 +18,8 @@ mod visual; pub use admin::Admin; pub use agent::Agent; pub use body::{ - biped_large, bird_medium, bird_small, dragon, fish_medium, fish_small, humanoid, object, - quadruped_medium, quadruped_small, Body, + biped_large, bird_medium, bird_small, critter, dragon, fish_medium, fish_small, humanoid, + object, quadruped_medium, quadruped_small, Body, }; pub use character_state::{ActionState, CharacterState, MovementState}; pub use controller::{ diff --git a/common/src/npc.rs b/common/src/npc.rs index 161217e5e7..c2412f341e 100644 --- a/common/src/npc.rs +++ b/common/src/npc.rs @@ -10,6 +10,9 @@ pub enum NpcKind { Humanoid, Wolf, Pig, + Duck, + Giant, + Rat, } impl NpcKind { @@ -18,6 +21,9 @@ impl NpcKind { NpcKind::Humanoid => "humanoid", NpcKind::Wolf => "wolf", NpcKind::Pig => "pig", + NpcKind::Duck => "duck", + NpcKind::Giant => "giant", + NpcKind::Rat => "rat", } } } @@ -30,6 +36,9 @@ impl FromStr for NpcKind { "humanoid" => Ok(NpcKind::Humanoid), "wolf" => Ok(NpcKind::Wolf), "pig" => Ok(NpcKind::Pig), + "duck" => Ok(NpcKind::Duck), + "giant" => Ok(NpcKind::Giant), + "rat" => Ok(NpcKind::Rat), _ => Err(()), } diff --git a/common/src/terrain/structure.rs b/common/src/terrain/structure.rs index 65a5ba7000..2c6947a062 100644 --- a/common/src/terrain/structure.rs +++ b/common/src/terrain/structure.rs @@ -16,7 +16,8 @@ pub enum StructureBlock { PineLeaves, Acacia, Mangrove, - PalmLeaves, + PalmLeavesInner, + PalmLeavesOuter, Water, GreenSludge, Fruit, @@ -110,7 +111,6 @@ impl Asset for Structure { let block = match voxel.i { 0 => StructureBlock::TemperateLeaves, 1 => StructureBlock::PineLeaves, - 2 => StructureBlock::PalmLeaves, 3 => StructureBlock::Water, 4 => StructureBlock::Acacia, 5 => StructureBlock::Mangrove, @@ -118,6 +118,8 @@ impl Asset for Structure { 7 => StructureBlock::Fruit, 9 => StructureBlock::Liana, 10 => StructureBlock::Chest, + 13 => StructureBlock::PalmLeavesOuter, + 14 => StructureBlock::PalmLeavesInner, 15 => StructureBlock::Hollow, index => { let color = palette diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 6171238892..38b0c11796 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -644,6 +644,9 @@ fn kind_to_body(kind: NpcKind) -> comp::Body { NpcKind::Humanoid => comp::Body::Humanoid(comp::humanoid::Body::random()), NpcKind::Pig => comp::Body::QuadrupedSmall(comp::quadruped_small::Body::random()), NpcKind::Wolf => comp::Body::QuadrupedMedium(comp::quadruped_medium::Body::random()), + NpcKind::Duck => comp::Body::BirdMedium(comp::bird_medium::Body::random()), + NpcKind::Giant => comp::Body::BipedLarge(comp::biped_large::Body::random()), + NpcKind::Rat => comp::Body::Critter(comp::critter::Body::random()), } } diff --git a/server/src/sys/terrain.rs b/server/src/sys/terrain.rs index 283a429329..ab96fa7d25 100644 --- a/server/src/sys/terrain.rs +++ b/server/src/sys/terrain.rs @@ -8,7 +8,7 @@ use common::{ state::TerrainChanges, terrain::TerrainGrid, }; -use rand::Rng; +use rand::{seq::SliceRandom, Rng}; use specs::{Join, Read, ReadStorage, System, Write, WriteExpect, WriteStorage}; use std::sync::Arc; use vek::*; @@ -96,19 +96,49 @@ impl<'a> System<'a> for Sys { // Handle chunk supplement for npc in supplement.npcs { - let (mut stats, mut body) = if rand::random() { - let body = comp::Body::Humanoid(comp::humanoid::Body::random()); - let stats = comp::Stats::new( - "Traveler".to_string(), - body, - Some(assets::load_expect_cloned("common.items.weapons.staff_1")), - ); - (stats, body) - } else { - let body = comp::Body::QuadrupedMedium(comp::quadruped_medium::Body::random()); - let stats = comp::Stats::new("Wolf".to_string(), body, None); - (stats, body) - }; + const SPAWN_NPCS: &'static [fn() -> (String, comp::Body, Option)] = &[ + (|| { + ( + "Traveler".into(), + comp::Body::Humanoid(comp::humanoid::Body::random()), + Some(assets::load_expect_cloned("common.items.weapons.staff_1")), + ) + }) as _, + (|| { + ( + "Wolf".into(), + comp::Body::QuadrupedMedium(comp::quadruped_medium::Body::random()), + None, + ) + }) as _, + (|| { + ( + "Duck".into(), + comp::Body::BirdMedium(comp::bird_medium::Body::random()), + None, + ) + }) as _, + (|| { + ( + "Rat".into(), + comp::Body::Critter(comp::critter::Body::random()), + None, + ) + }) as _, + (|| { + ( + "Pig".into(), + comp::Body::QuadrupedSmall(comp::quadruped_small::Body::random()), + None, + ) + }), + ]; + let (name, mut body, main) = SPAWN_NPCS + .choose(&mut rand::thread_rng()) + .expect("SPAWN_NPCS is nonempty")( + ); + let mut stats = comp::Stats::new(name, body, main); + let mut scale = 1.0; // TODO: Remove this and implement scaling or level depending on stuff like species instead diff --git a/voxygen/src/anim/biped_large/idle.rs b/voxygen/src/anim/biped_large/idle.rs index 4f74e1eee4..be4b954151 100644 --- a/voxygen/src/anim/biped_large/idle.rs +++ b/voxygen/src/anim/biped_large/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BipedLargeSkeleton, -}; +use super::{super::Animation, BipedLargeSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -22,35 +19,35 @@ impl Animation for IdleAnimation { next.head.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.head.scale = Vec3::one() / 10.88; + next.head.scale = Vec3::one() / 11.0; next.upper_torso.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.upper_torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.upper_torso.scale = Vec3::one() / 10.88; + next.upper_torso.scale = Vec3::one() / 11.0; next.lower_torso.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.lower_torso.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.lower_torso.scale = Vec3::one() / 10.88; + next.lower_torso.scale = Vec3::one(); next.shoulder_l.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.shoulder_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.shoulder_l.scale = Vec3::one() / 10.88; + next.shoulder_l.scale = Vec3::one(); next.shoulder_r.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.shoulder_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.shoulder_r.scale = Vec3::one() / 10.88; + next.shoulder_r.scale = Vec3::one(); next.hand_l.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.hand_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.hand_l.scale = Vec3::one() / 10.88; + next.hand_l.scale = Vec3::one(); next.hand_r.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.hand_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.hand_r.scale = Vec3::one() / 10.88; + next.hand_r.scale = Vec3::one(); next.leg_l.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.leg_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.leg_l.scale = Vec3::one() / 10.88; + next.leg_l.scale = Vec3::one() / 11.0; next.leg_r.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.leg_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); @@ -58,11 +55,11 @@ impl Animation for IdleAnimation { next.foot_l.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.foot_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.foot_l.scale = Vec3::one() / 10.88; + next.foot_l.scale = Vec3::one(); next.foot_r.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; next.foot_r.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.foot_r.scale = Vec3::one() / 10.88; + next.foot_r.scale = Vec3::one(); next } } diff --git a/voxygen/src/anim/biped_large/jump.rs b/voxygen/src/anim/biped_large/jump.rs index 0494cf0bb8..2eeaeac103 100644 --- a/voxygen/src/anim/biped_large/jump.rs +++ b/voxygen/src/anim/biped_large/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BipedLargeSkeleton, -}; +use super::{super::Animation, BipedLargeSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/biped_large/mod.rs b/voxygen/src/anim/biped_large/mod.rs index b1bc01d4ce..0ce749b79b 100644 --- a/voxygen/src/anim/biped_large/mod.rs +++ b/voxygen/src/anim/biped_large/mod.rs @@ -9,6 +9,7 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; #[derive(Clone)] pub struct BipedLargeSkeleton { @@ -44,6 +45,7 @@ impl BipedLargeSkeleton { } impl Skeleton for BipedLargeSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let upper_torso_mat = self.upper_torso.compute_base_matrix(); let shoulder_l_mat = self.shoulder_l.compute_base_matrix(); @@ -89,3 +91,28 @@ impl Skeleton for BipedLargeSkeleton { self.foot_r.interpolate(&target.foot_r, dt); } } + +pub struct SkeletonAttr; + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::BipedLarge(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self + } +} + +impl<'a> From<&'a comp::biped_large::Body> for SkeletonAttr { + fn from(_body: &'a comp::biped_large::Body) -> Self { + Self + } +} diff --git a/voxygen/src/anim/biped_large/run.rs b/voxygen/src/anim/biped_large/run.rs index 4f77065716..5ca044d279 100644 --- a/voxygen/src/anim/biped_large/run.rs +++ b/voxygen/src/anim/biped_large/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BipedLargeSkeleton, -}; +use super::{super::Animation, BipedLargeSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/bird_medium/idle.rs b/voxygen/src/anim/bird_medium/idle.rs index e14e48887c..c7428b89c6 100644 --- a/voxygen/src/anim/bird_medium/idle.rs +++ b/voxygen/src/anim/bird_medium/idle.rs @@ -1,8 +1,5 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BirdMediumSkeleton, -}; -//use std::{f32::consts::PI, ops::Mul}; +use super::{super::Animation, BirdMediumSkeleton, SkeletonAttr}; +use std::ops::Mul; use vek::*; pub struct IdleAnimation; @@ -13,40 +10,77 @@ impl Animation for IdleAnimation { fn update_skeleton( skeleton: &Self::Skeleton, - _global_time: Self::Dependency, - _anim_time: f64, + global_time: Self::Dependency, + anim_time: f64, _rate: &mut f32, - _skeleton_attr: &SkeletonAttr, + skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.head.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; - next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.head.scale = Vec3::one() / 10.88; + let wave_slow = (anim_time as f32 * 3.5).sin(); + let wave_slow_cos = (anim_time as f32 * 3.5).cos(); - next.torso.offset = Vec3::new(0.0, 4.5, 2.0); - next.torso.ori = Quaternion::rotation_x(0.0); - next.torso.scale = Vec3::one() * 1.01; + let duck_head_look = Vec2::new( + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); - next.tail.offset = Vec3::new(0.0, 3.1, -4.5); - next.tail.ori = Quaternion::rotation_z(0.0); - next.tail.scale = Vec3::one() * 0.98; + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 11.0; + next.head.ori = Quaternion::rotation_z(duck_head_look.x) + * Quaternion::rotation_x(duck_head_look.y + wave_slow_cos * 0.03); + next.head.scale = Vec3::one(); - next.wing_l.offset = Vec3::new(0.0, -13.0, 8.0) / 11.0; - next.wing_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.wing_l.scale = Vec3::one() / 11.0; + next.torso.offset = Vec3::new( + 0.0, + skeleton_attr.chest.0, + wave_slow * 0.3 + skeleton_attr.chest.1, + ) / 11.0; + next.torso.ori = Quaternion::rotation_y(wave_slow * 0.03); + next.torso.scale = Vec3::one() / 11.0; - next.wing_r.offset = Vec3::new(0.0, -11.7, 11.0) / 11.0; + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1) / 11.0; + next.tail.ori = Quaternion::rotation_x(wave_slow_cos * 0.03); + next.tail.scale = Vec3::one(); + + next.wing_l.offset = Vec3::new( + -skeleton_attr.wing.0, + skeleton_attr.wing.1, + skeleton_attr.wing.2, + ) / 11.0; + next.wing_l.ori = Quaternion::rotation_z(0.0); + next.wing_l.scale = Vec3::one() * 1.05; + + next.wing_r.offset = Vec3::new( + skeleton_attr.wing.0, + skeleton_attr.wing.1, + skeleton_attr.wing.2, + ) / 11.0; next.wing_r.ori = Quaternion::rotation_y(0.0); - next.wing_r.scale = Vec3::one() / 11.0; + next.wing_r.scale = Vec3::one() * 1.05; - next.leg_l.offset = Vec3::new(0.0, 0.0, 12.0) / 11.0; + next.leg_l.offset = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 11.0; next.leg_l.ori = Quaternion::rotation_y(0.0); - next.leg_l.scale = Vec3::one() / 10.5; + next.leg_l.scale = Vec3::one() / 11.0; - next.leg_r.offset = Vec3::new(0.0, 0.75, 5.25); + next.leg_r.offset = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 11.0; next.leg_r.ori = Quaternion::rotation_x(0.0); - next.leg_r.scale = Vec3::one() * 1.00; + next.leg_r.scale = Vec3::one() / 11.0; next } } diff --git a/voxygen/src/anim/bird_medium/jump.rs b/voxygen/src/anim/bird_medium/jump.rs index 14d57abe9b..f1c5fdec59 100644 --- a/voxygen/src/anim/bird_medium/jump.rs +++ b/voxygen/src/anim/bird_medium/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BirdMediumSkeleton, -}; +use super::{super::Animation, BirdMediumSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; @@ -20,33 +17,33 @@ impl Animation for JumpAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.head.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; - next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.head.scale = Vec3::one() / 10.88; + next.head.offset = Vec3::new(0.0, 0.0, 0.0) / 11.0; + next.head.ori = Quaternion::rotation_z(0.0); + next.head.scale = Vec3::one(); - next.torso.offset = Vec3::new(0.0, 4.5, 2.0); + next.torso.offset = Vec3::new(0.0, 0.0, 0.0); next.torso.ori = Quaternion::rotation_x(0.0); - next.torso.scale = Vec3::one() * 1.01; + next.torso.scale = Vec3::one() / 11.0; - next.tail.offset = Vec3::new(0.0, 3.1, -4.5); + next.tail.offset = Vec3::new(0.0, 0.0, 0.0); next.tail.ori = Quaternion::rotation_z(0.0); - next.tail.scale = Vec3::one() * 0.98; + next.tail.scale = Vec3::one(); - next.wing_l.offset = Vec3::new(0.0, -13.0, 8.0) / 11.0; - next.wing_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.wing_l.scale = Vec3::one() / 11.0; + next.wing_l.offset = Vec3::new(0.0, 0.0, 0.0) / 11.0; + next.wing_l.ori = Quaternion::rotation_z(0.0); + next.wing_l.scale = Vec3::one(); - next.wing_r.offset = Vec3::new(0.0, -11.7, 11.0) / 11.0; + next.wing_r.offset = Vec3::new(0.0, 0.0, 0.0) / 11.0; next.wing_r.ori = Quaternion::rotation_y(0.0); - next.wing_r.scale = Vec3::one() / 11.0; + next.wing_r.scale = Vec3::one(); - next.leg_l.offset = Vec3::new(0.0, 0.0, 12.0) / 11.0; + next.leg_l.offset = Vec3::new(0.0, 0.0, 0.0) / 11.0; next.leg_l.ori = Quaternion::rotation_y(0.0); - next.leg_l.scale = Vec3::one() / 10.5; + next.leg_l.scale = Vec3::one() / 11.0; - next.leg_r.offset = Vec3::new(0.0, 0.75, 5.25); + next.leg_r.offset = Vec3::new(0.0, 0.0, 0.0) / 11.0; next.leg_r.ori = Quaternion::rotation_x(0.0); - next.leg_r.scale = Vec3::one() * 1.00; + next.leg_r.scale = Vec3::one() / 11.0; next } } diff --git a/voxygen/src/anim/bird_medium/mod.rs b/voxygen/src/anim/bird_medium/mod.rs index 0ed048b719..919fc6eeb3 100644 --- a/voxygen/src/anim/bird_medium/mod.rs +++ b/voxygen/src/anim/bird_medium/mod.rs @@ -9,8 +9,9 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; -#[derive(Clone)] +#[derive(Clone, Default)] pub struct BirdMediumSkeleton { head: Bone, torso: Bone, @@ -23,19 +24,12 @@ pub struct BirdMediumSkeleton { impl BirdMediumSkeleton { pub fn new() -> Self { - Self { - head: Bone::default(), - torso: Bone::default(), - tail: Bone::default(), - wing_l: Bone::default(), - wing_r: Bone::default(), - leg_l: Bone::default(), - leg_r: Bone::default(), - } + Self::default() } } impl Skeleton for BirdMediumSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let torso_mat = self.torso.compute_base_matrix(); @@ -69,3 +63,72 @@ impl Skeleton for BirdMediumSkeleton { self.leg_r.interpolate(&target.leg_r, dt); } } + +pub struct SkeletonAttr { + head: (f32, f32), + chest: (f32, f32), + tail: (f32, f32), + wing: (f32, f32, f32), + foot: (f32, f32, f32), +} + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::BirdMedium(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self { + head: (0.0, 0.0), + chest: (0.0, 0.0), + tail: (0.0, 0.0), + wing: (0.0, 0.0, 0.0), + foot: (0.0, 0.0, 0.0), + } + } +} + +impl<'a> From<&'a comp::bird_medium::Body> for SkeletonAttr { + fn from(body: &'a comp::bird_medium::Body) -> Self { + use comp::bird_medium::Species::*; + Self { + head: match (body.species, body.body_type) { + (Duck, _) => (4.0, 4.0), + (Chicken, _) => (4.0, 4.0), + (Goose, _) => (5.0, 5.0), + (Peacock, _) => (5.0, 6.0), + }, + chest: match (body.species, body.body_type) { + (Duck, _) => (0.0, 6.0), + (Chicken, _) => (0.0, 6.0), + (Goose, _) => (0.0, 8.0), + (Peacock, _) => (0.0, 9.0), + }, + tail: match (body.species, body.body_type) { + (Duck, _) => (-3.5, 3.0), + (Chicken, _) => (-3.5, 3.0), + (Goose, _) => (-5.0, 3.0), + (Peacock, _) => (-5.0, 2.0), + }, + wing: match (body.species, body.body_type) { + (Duck, _) => (2.75, 0.0, 0.0), + (Chicken, _) => (2.75, 0.0, 0.0), + (Goose, _) => (3.75, 0.0, 0.0), + (Peacock, _) => (3.0, 0.0, 0.0), + }, + foot: match (body.species, body.body_type) { + (Duck, _) => (2.0, 0.0, 4.0), + (Chicken, _) => (2.0, 0.0, 4.0), + (Goose, _) => (2.0, 0.0, 3.0), + (Peacock, _) => (2.0, 0.5, 3.0), + }, + } + } +} diff --git a/voxygen/src/anim/bird_medium/run.rs b/voxygen/src/anim/bird_medium/run.rs index 11f825cb96..70c8d9f5e3 100644 --- a/voxygen/src/anim/bird_medium/run.rs +++ b/voxygen/src/anim/bird_medium/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BirdMediumSkeleton, -}; +use super::{super::Animation, BirdMediumSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -14,39 +11,63 @@ impl Animation for RunAnimation { fn update_skeleton( skeleton: &Self::Skeleton, (_velocity, _global_time): Self::Dependency, - _anim_time: f64, + anim_time: f64, _rate: &mut f32, - _skeleton_attr: &SkeletonAttr, + skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - next.head.offset = Vec3::new(0.0, 7.5, 15.0) / 11.0; - next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.head.scale = Vec3::one() / 10.88; + let wave = (anim_time as f32 * 18.0).sin(); + let wave_cos = (anim_time as f32 * 18.0).cos(); - next.torso.offset = Vec3::new(0.0, 4.5, 2.0); - next.torso.ori = Quaternion::rotation_x(0.0); - next.torso.scale = Vec3::one() * 1.01; + next.head.offset = + Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + wave * 0.5) / 11.0; + next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + wave_cos * 0.03); + next.head.scale = Vec3::one(); - next.tail.offset = Vec3::new(0.0, 3.1, -4.5); - next.tail.ori = Quaternion::rotation_z(0.0); - next.tail.scale = Vec3::one() * 0.98; + next.torso.offset = Vec3::new( + 0.0, + skeleton_attr.chest.0, + wave * 0.3 + skeleton_attr.chest.1, + ) / 11.0; + next.torso.ori = Quaternion::rotation_y(wave * 0.03); + next.torso.scale = Vec3::one() / 11.0; - next.wing_l.offset = Vec3::new(0.0, -13.0, 8.0) / 11.0; - next.wing_l.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); - next.wing_l.scale = Vec3::one() / 11.0; + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1) / 11.0; + next.tail.ori = Quaternion::rotation_x(wave_cos * 0.03); + next.tail.scale = Vec3::one(); - next.wing_r.offset = Vec3::new(0.0, -11.7, 11.0) / 11.0; + next.wing_l.offset = Vec3::new( + -skeleton_attr.wing.0, + skeleton_attr.wing.1, + skeleton_attr.wing.2, + ) / 11.0; + next.wing_l.ori = Quaternion::rotation_z(0.0); + next.wing_l.scale = Vec3::one() * 1.05; + + next.wing_r.offset = Vec3::new( + skeleton_attr.wing.0, + skeleton_attr.wing.1, + skeleton_attr.wing.2, + ) / 11.0; next.wing_r.ori = Quaternion::rotation_y(0.0); - next.wing_r.scale = Vec3::one() / 11.0; + next.wing_r.scale = Vec3::one() * 1.05; - next.leg_l.offset = Vec3::new(0.0, 0.0, 12.0) / 11.0; - next.leg_l.ori = Quaternion::rotation_y(0.0); - next.leg_l.scale = Vec3::one() / 10.5; + next.leg_l.offset = Vec3::new( + -skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 11.0; + next.leg_l.ori = Quaternion::rotation_x(wave_cos * 1.0); + next.leg_l.scale = Vec3::one() / 11.0; - next.leg_r.offset = Vec3::new(0.0, 0.75, 5.25); - next.leg_r.ori = Quaternion::rotation_x(0.0); - next.leg_r.scale = Vec3::one() * 1.00; + next.leg_r.offset = Vec3::new( + skeleton_attr.foot.0, + skeleton_attr.foot.1, + skeleton_attr.foot.2, + ) / 11.0; + next.leg_r.ori = Quaternion::rotation_x(wave * 1.0); + next.leg_r.scale = Vec3::one() / 11.0; next } } diff --git a/voxygen/src/anim/bird_small/idle.rs b/voxygen/src/anim/bird_small/idle.rs index 9f9c207c29..4654f3553c 100644 --- a/voxygen/src/anim/bird_small/idle.rs +++ b/voxygen/src/anim/bird_small/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BirdSmallSkeleton, -}; +use super::{super::Animation, BirdSmallSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/bird_small/jump.rs b/voxygen/src/anim/bird_small/jump.rs index 21dd935088..c0416368e2 100644 --- a/voxygen/src/anim/bird_small/jump.rs +++ b/voxygen/src/anim/bird_small/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BirdSmallSkeleton, -}; +use super::{super::Animation, BirdSmallSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/bird_small/mod.rs b/voxygen/src/anim/bird_small/mod.rs index dff5671b62..806327d4e6 100644 --- a/voxygen/src/anim/bird_small/mod.rs +++ b/voxygen/src/anim/bird_small/mod.rs @@ -9,6 +9,7 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; #[derive(Clone)] pub struct BirdSmallSkeleton { @@ -30,6 +31,7 @@ impl BirdSmallSkeleton { } impl Skeleton for BirdSmallSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let torso_mat = self.torso.compute_base_matrix(); @@ -60,3 +62,28 @@ impl Skeleton for BirdSmallSkeleton { self.wing_r.interpolate(&target.wing_r, dt); } } + +pub struct SkeletonAttr; + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::BirdSmall(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self + } +} + +impl<'a> From<&'a comp::bird_small::Body> for SkeletonAttr { + fn from(_body: &'a comp::bird_small::Body) -> Self { + Self + } +} diff --git a/voxygen/src/anim/bird_small/run.rs b/voxygen/src/anim/bird_small/run.rs index 62762cc33f..ecd1e02a1e 100644 --- a/voxygen/src/anim/bird_small/run.rs +++ b/voxygen/src/anim/bird_small/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - BirdSmallSkeleton, -}; +use super::{super::Animation, BirdSmallSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/character/attack.rs b/voxygen/src/anim/character/attack.rs index fa4594822f..8ffb9b5772 100644 --- a/voxygen/src/anim/character/attack.rs +++ b/voxygen/src/anim/character/attack.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/character/block.rs b/voxygen/src/anim/character/block.rs index d5770e49d7..0a42e9dbde 100644 --- a/voxygen/src/anim/character/block.rs +++ b/voxygen/src/anim/character/block.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/character/blockidle.rs b/voxygen/src/anim/character/blockidle.rs index e2bfda6833..d0cdeae593 100644 --- a/voxygen/src/anim/character/blockidle.rs +++ b/voxygen/src/anim/character/blockidle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/character/charge.rs b/voxygen/src/anim/character/charge.rs index 3e39ee86fc..f6a231ffaf 100644 --- a/voxygen/src/anim/character/charge.rs +++ b/voxygen/src/anim/character/charge.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/character/cidle.rs b/voxygen/src/anim/character/cidle.rs index 165331fc7d..9225204497 100644 --- a/voxygen/src/anim/character/cidle.rs +++ b/voxygen/src/anim/character/cidle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::{f32::consts::PI, ops::Mul}; diff --git a/voxygen/src/anim/character/climb.rs b/voxygen/src/anim/character/climb.rs index 84de64db14..1064cd1c94 100644 --- a/voxygen/src/anim/character/climb.rs +++ b/voxygen/src/anim/character/climb.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use vek::*; diff --git a/voxygen/src/anim/character/crun.rs b/voxygen/src/anim/character/crun.rs index b5b0da0140..59d1807a69 100644 --- a/voxygen/src/anim/character/crun.rs +++ b/voxygen/src/anim/character/crun.rs @@ -1,6 +1,6 @@ use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, + super::{Animation, }, + CharacterSkeleton,SkeletonAttr }; use common::comp::item::Tool; use std::f32::consts::PI; diff --git a/voxygen/src/anim/character/gliding.rs b/voxygen/src/anim/character/gliding.rs index d78f8a1142..02cf41e761 100644 --- a/voxygen/src/anim/character/gliding.rs +++ b/voxygen/src/anim/character/gliding.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/character/idle.rs b/voxygen/src/anim/character/idle.rs index 10a7d58c4f..2b252f027f 100644 --- a/voxygen/src/anim/character/idle.rs +++ b/voxygen/src/anim/character/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/character/jump.rs b/voxygen/src/anim/character/jump.rs index 29fb164d83..f1d5f86ae4 100644 --- a/voxygen/src/anim/character/jump.rs +++ b/voxygen/src/anim/character/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/character/mod.rs b/voxygen/src/anim/character/mod.rs index 086c63ea68..be47b1d37a 100644 --- a/voxygen/src/anim/character/mod.rs +++ b/voxygen/src/anim/character/mod.rs @@ -33,8 +33,9 @@ pub use self::wield::WieldAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self, item::Tool}; -#[derive(Clone)] +#[derive(Clone, Default)] pub struct CharacterSkeleton { head: Bone, chest: Bone, @@ -54,26 +55,12 @@ pub struct CharacterSkeleton { impl CharacterSkeleton { pub fn new() -> Self { - Self { - head: Bone::default(), - chest: Bone::default(), - belt: Bone::default(), - shorts: Bone::default(), - l_hand: Bone::default(), - r_hand: Bone::default(), - l_foot: Bone::default(), - r_foot: Bone::default(), - main: Bone::default(), - l_shoulder: Bone::default(), - r_shoulder: Bone::default(), - glider: Bone::default(), - lantern: Bone::default(), - torso: Bone::default(), - } + Self::default() } } impl Skeleton for CharacterSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let chest_mat = self.chest.compute_base_matrix(); let torso_mat = self.torso.compute_base_matrix(); @@ -118,3 +105,144 @@ impl Skeleton for CharacterSkeleton { self.torso.interpolate(&target.torso, dt); } } + +pub struct SkeletonAttr { + scaler: f32, + head_scale: f32, + neck_height: f32, + neck_forward: f32, + neck_right: f32, + weapon_x: f32, + weapon_y: f32, +} +impl SkeletonAttr { + pub fn calculate_scale(body: &comp::humanoid::Body) -> f32 { + use comp::humanoid::{BodyType::*, Race::*}; + match (body.race, body.body_type) { + (Orc, Male) => 0.95, + (Orc, Female) => 0.8, + (Human, Male) => 0.8, + (Human, Female) => 0.75, + (Elf, Male) => 0.85, + (Elf, Female) => 0.8, + (Dwarf, Male) => 0.7, + (Dwarf, Female) => 0.65, + (Undead, Male) => 0.8, + (Undead, Female) => 0.75, + (Danari, Male) => 0.58, + (Danari, Female) => 0.58, + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self { + scaler: 1.0, + head_scale: 1.0, + neck_height: 1.0, + neck_forward: 1.0, + neck_right: 1.0, + weapon_x: 1.0, + weapon_y: 1.0, + } + } +} + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::Humanoid(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { + fn from(body: &'a comp::humanoid::Body) -> Self { + use comp::humanoid::{BodyType::*, Race::*}; + Self { + scaler: SkeletonAttr::calculate_scale(body), + head_scale: match (body.race, body.body_type) { + (Orc, Male) => 0.9, + (Orc, Female) => 1.0, + (Human, Male) => 1.0, + (Human, Female) => 1.0, + (Elf, Male) => 0.95, + (Elf, Female) => 1.0, + (Dwarf, Male) => 1.0, + (Dwarf, Female) => 1.0, + (Undead, Male) => 1.0, + (Undead, Female) => 1.0, + (Danari, Male) => 1.15, + (Danari, Female) => 1.15, + }, + neck_height: match (body.race, body.body_type) { + (Orc, Male) => 0.0, + (Orc, Female) => 0.0, + (Human, Male) => 0.0, + (Human, Female) => 0.0, + (Elf, Male) => 0.0, + (Elf, Female) => 0.0, + (Dwarf, Male) => 0.0, + (Dwarf, Female) => 0.0, + (Undead, Male) => 0.5, + (Undead, Female) => 0.5, + (Danari, Male) => 0.5, + (Danari, Female) => 0.5, + }, + neck_forward: match (body.race, body.body_type) { + (Orc, Male) => 0.0, + (Orc, Female) => 0.0, + (Human, Male) => 0.5, + (Human, Female) => 0.0, + (Elf, Male) => 0.5, + (Elf, Female) => 0.5, + (Dwarf, Male) => 0.5, + (Dwarf, Female) => 0.0, + (Undead, Male) => 0.5, + (Undead, Female) => 0.5, + (Danari, Male) => 0.0, + (Danari, Female) => 0.0, + }, + neck_right: match (body.race, body.body_type) { + (Orc, Male) => 0.0, + (Orc, Female) => 0.0, + (Human, Male) => 0.0, + (Human, Female) => 0.0, + (Elf, Male) => 0.0, + (Elf, Female) => 0.0, + (Dwarf, Male) => 0.0, + (Dwarf, Female) => 0.0, + (Undead, Male) => 0.0, + (Undead, Female) => 0.0, + (Danari, Male) => 0.0, + (Danari, Female) => 0.0, + }, + weapon_x: match Tool::Hammer { + // TODO: Inventory + Tool::Sword => 0.0, + Tool::Axe => 3.0, + Tool::Hammer => 0.0, + Tool::Shield => 3.0, + Tool::Staff => 3.0, + Tool::Bow => 0.0, + Tool::Dagger => 0.0, + Tool::Debug(_) => 0.0, + }, + weapon_y: match Tool::Hammer { + // TODO: Inventory + Tool::Sword => -1.25, + Tool::Axe => 0.0, + Tool::Hammer => -2.0, + Tool::Shield => 0.0, + Tool::Staff => 0.0, + Tool::Bow => -2.0, + Tool::Dagger => -2.0, + Tool::Debug(_) => 0.0, + }, + } + } +} diff --git a/voxygen/src/anim/character/roll.rs b/voxygen/src/anim/character/roll.rs index 2e76022b01..88ae08afc8 100644 --- a/voxygen/src/anim/character/roll.rs +++ b/voxygen/src/anim/character/roll.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/character/run.rs b/voxygen/src/anim/character/run.rs index 4e5ae350d6..868330b626 100644 --- a/voxygen/src/anim/character/run.rs +++ b/voxygen/src/anim/character/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; use std::ops::Mul; @@ -140,7 +137,7 @@ impl Animation for RunAnimation { next.lantern.ori = Quaternion::rotation_y(0.0); next.lantern.scale = Vec3::one() * 0.0; - next.torso.offset = Vec3::new(0.0, 0.3 + wave * -0.08, 0.4) * skeleton_attr.scaler; + next.torso.offset = Vec3::new(0.0, -0.3 + wave * -0.08, 0.4) * skeleton_attr.scaler; next.torso.ori = Quaternion::rotation_x(wave_stop * speed * -0.06 + wave_diff * speed * -0.005) * Quaternion::rotation_y(tilt); diff --git a/voxygen/src/anim/character/sit.rs b/voxygen/src/anim/character/sit.rs index 2f1106eb2c..306f337168 100644 --- a/voxygen/src/anim/character/sit.rs +++ b/voxygen/src/anim/character/sit.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/character/sneak.rs b/voxygen/src/anim/character/sneak.rs index d48d9604d5..8872add2fb 100644 --- a/voxygen/src/anim/character/sneak.rs +++ b/voxygen/src/anim/character/sneak.rs @@ -1,6 +1,6 @@ use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, + super::{Animation, }, + CharacterSkeleton,SkeletonAttr }; use std::f32::consts::PI; use std::ops::Mul; diff --git a/voxygen/src/anim/character/stand.rs b/voxygen/src/anim/character/stand.rs index c7f5a47efb..bffcf83673 100644 --- a/voxygen/src/anim/character/stand.rs +++ b/voxygen/src/anim/character/stand.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/character/swim.rs b/voxygen/src/anim/character/swim.rs index e22b827071..1e32be47e1 100644 --- a/voxygen/src/anim/character/swim.rs +++ b/voxygen/src/anim/character/swim.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; use std::ops::Mul; diff --git a/voxygen/src/anim/character/wield.rs b/voxygen/src/anim/character/wield.rs index 9c4d41c10a..426d230ad9 100644 --- a/voxygen/src/anim/character/wield.rs +++ b/voxygen/src/anim/character/wield.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - CharacterSkeleton, -}; +use super::{super::Animation, CharacterSkeleton, SkeletonAttr}; use common::comp::item::Tool; use std::f32::consts::PI; diff --git a/voxygen/src/anim/critter/idle.rs b/voxygen/src/anim/critter/idle.rs new file mode 100644 index 0000000000..47770a7e56 --- /dev/null +++ b/voxygen/src/anim/critter/idle.rs @@ -0,0 +1,64 @@ +use super::{super::Animation, CritterAttr, CritterSkeleton}; +//use std::{f32::consts::PI, ops::Mul}; +use std::{f32::consts::PI, ops::Mul}; +use vek::*; + +pub struct IdleAnimation; + +impl Animation for IdleAnimation { + type Skeleton = CritterSkeleton; + type Dependency = f64; + + fn update_skeleton( + skeleton: &Self::Skeleton, + global_time: Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &CritterAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let wave = (anim_time as f32 * 10.0).sin(); + let wave_slow = (anim_time as f32 * 5.5 + PI).sin(); + + let rat_head_look = Vec2::new( + ((global_time + anim_time) as f32 / 3.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + ((global_time + anim_time) as f32 / 3.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 18.0; + next.head.ori = Quaternion::rotation_z(rat_head_look.x) + * Quaternion::rotation_x(rat_head_look.y + wave * 0.03); + next.head.scale = Vec3::one() / 18.0; + + next.chest.offset = Vec3::new( + 0.0, + skeleton_attr.chest.0, + skeleton_attr.chest.1 + wave * 1.0, + ) / 18.0; + next.chest.ori = Quaternion::rotation_y(wave_slow * 0.2); + next.chest.scale = Vec3::one() / 18.0; + + next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1) / 18.0; + next.feet_f.ori = Quaternion::rotation_z(0.0); + next.feet_f.scale = Vec3::one() / 18.0; + + next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1) / 18.0; + next.feet_b.ori = Quaternion::rotation_x(0.0); + next.feet_b.scale = Vec3::one() / 18.0; + + next.tail.offset = + Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1) / 18.0; + next.tail.ori = Quaternion::rotation_y(wave_slow * 0.25); + next.tail.scale = Vec3::one() / 18.0; + + next + } +} diff --git a/voxygen/src/anim/critter/jump.rs b/voxygen/src/anim/critter/jump.rs new file mode 100644 index 0000000000..342c7a03b7 --- /dev/null +++ b/voxygen/src/anim/critter/jump.rs @@ -0,0 +1,42 @@ +use super::{super::Animation, CritterAttr, CritterSkeleton}; +//use std::f32::consts::PI; +use vek::*; + +pub struct JumpAnimation; + +impl Animation for JumpAnimation { + type Skeleton = CritterSkeleton; + type Dependency = (f32, f64); + + fn update_skeleton( + skeleton: &Self::Skeleton, + _global_time: Self::Dependency, + _anim_time: f64, + _rate: &mut f32, + _skeleton_attr: &CritterAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + next.head.offset = Vec3::new(0.0, 0.0, 0.0) / 18.0; + next.head.ori = Quaternion::rotation_z(0.0); + next.head.scale = Vec3::one() / 18.0; + + next.chest.offset = Vec3::new(0.0, 0.0, 0.0) / 18.0; + next.chest.ori = Quaternion::rotation_x(0.0); + next.chest.scale = Vec3::one() / 18.0; + + next.feet_f.offset = Vec3::new(0.0, 0.0, 0.0) / 18.0; + next.feet_f.ori = Quaternion::rotation_z(0.0); + next.feet_f.scale = Vec3::one() / 18.0; + + next.feet_b.offset = Vec3::new(0.0, 0.0, 0.0) / 18.0; + next.feet_b.ori = Quaternion::rotation_x(0.0); + next.feet_b.scale = Vec3::one() / 18.0; + + next.tail.offset = Vec3::new(0.0, 0.0, 0.0) / 18.0; + next.tail.ori = Quaternion::rotation_x(0.0); + next.tail.scale = Vec3::one() / 18.0; + + next + } +} diff --git a/voxygen/src/anim/critter/mod.rs b/voxygen/src/anim/critter/mod.rs new file mode 100644 index 0000000000..f1f75878e1 --- /dev/null +++ b/voxygen/src/anim/critter/mod.rs @@ -0,0 +1,146 @@ +pub mod idle; +pub mod jump; +pub mod run; + +// Reexports +pub use self::idle::IdleAnimation; +pub use self::jump::JumpAnimation; +pub use self::run::RunAnimation; + +use super::{Bone, Skeleton}; +use crate::render::FigureBoneData; +use common::comp::{self}; + +#[derive(Clone, Default)] +pub struct CritterSkeleton { + head: Bone, + chest: Bone, + feet_f: Bone, + feet_b: Bone, + tail: Bone, +} +pub struct CritterAttr { + head: (f32, f32), + chest: (f32, f32), + feet_f: (f32, f32), + feet_b: (f32, f32), + tail: (f32, f32), +} + +impl CritterSkeleton { + pub fn new() -> Self { + Self::default() + } +} + +impl Skeleton for CritterSkeleton { + type Attr = CritterAttr; + + fn compute_matrices(&self) -> [FigureBoneData; 16] { + [ + FigureBoneData::new(self.head.compute_base_matrix()), + FigureBoneData::new(self.chest.compute_base_matrix()), + FigureBoneData::new(self.feet_f.compute_base_matrix()), + FigureBoneData::new(self.feet_b.compute_base_matrix()), + FigureBoneData::new(self.tail.compute_base_matrix()), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + FigureBoneData::default(), + ] + } + + fn interpolate(&mut self, target: &Self, dt: f32) { + self.head.interpolate(&target.head, dt); + self.chest.interpolate(&target.chest, dt); + self.feet_f.interpolate(&target.feet_f, dt); + self.feet_b.interpolate(&target.feet_b, dt); + self.tail.interpolate(&target.tail, dt); + } +} + +impl<'a> std::convert::TryFrom<&'a comp::Body> for CritterAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::Critter(body) => Ok(CritterAttr::from(body)), + _ => Err(()), + } + } +} + +impl CritterAttr { + pub fn calculate_scale(body: &comp::critter::Body) -> f32 { + match (body.species, body.body_type) { + (_, _) => 0.0, + } + } +} + +impl Default for CritterAttr { + fn default() -> Self { + Self { + head: (0.0, 0.0), + chest: (0.0, 0.0), + feet_f: (0.0, 0.0), + feet_b: (0.0, 0.0), + tail: (0.0, 0.0), + } + } +} + +impl<'a> From<&'a comp::critter::Body> for CritterAttr { + fn from(body: &'a comp::critter::Body) -> Self { + use comp::critter::Species::*; + Self { + head: match (body.species, body.body_type) { + (Rat, _) => (6.5, 7.0), + (Axolotl, _) => (5.0, 5.0), + (Gecko, _) => (5.0, 4.0), + (Turtle, _) => (8.0, 7.0), + (Squirrel, _) => (5.0, 4.0), + (Fungome, _) => (4.0, 4.0), + }, + chest: match (body.species, body.body_type) { + (Rat, _) => (0.0, 6.0), + (Axolotl, _) => (-1.0, 3.0), + (Gecko, _) => (-2.0, 3.0), + (Turtle, _) => (0.0, 6.0), + (Squirrel, _) => (0.0, 3.0), + (Fungome, _) => (0.0, 5.0), + }, + feet_f: match (body.species, body.body_type) { + (Rat, _) => (2.0, 0.5), + (Axolotl, _) => (2.0, 0.5), + (Gecko, _) => (1.0, 0.5), + (Turtle, _) => (3.0, 0.5), + (Squirrel, _) => (1.0, 0.5), + (Fungome, _) => (1.0, 0.5), + }, + feet_b: match (body.species, body.body_type) { + (Rat, _) => (-2.0, 0.5), + (Axolotl, _) => (-2.0, 0.5), + (Gecko, _) => (-2.0, 0.5), + (Turtle, _) => (-2.0, 0.5), + (Squirrel, _) => (-1.0, 0.5), + (Fungome, _) => (-2.0, 0.5), + }, + tail: match (body.species, body.body_type) { + (Rat, _) => (-8.0, 3.0), + (Axolotl, _) => (-7.0, 3.0), + (Gecko, _) => (-7.0, 2.0), + (Turtle, _) => (-6.0, 4.0), + (Squirrel, _) => (-3.0, 4.0), + (Fungome, _) => (-6.0, 3.0), + }, + } + } +} diff --git a/voxygen/src/anim/critter/run.rs b/voxygen/src/anim/critter/run.rs new file mode 100644 index 0000000000..119e74a11a --- /dev/null +++ b/voxygen/src/anim/critter/run.rs @@ -0,0 +1,52 @@ +use super::{super::Animation, CritterAttr, CritterSkeleton}; +//use std::{f32::consts::PI, ops::Mul}; +use std::f32::consts::PI; +use vek::*; + +pub struct RunAnimation; + +impl Animation for RunAnimation { + type Skeleton = CritterSkeleton; + type Dependency = (f32, f64); + + fn update_skeleton( + skeleton: &Self::Skeleton, + (_velocity, _global_time): Self::Dependency, + anim_time: f64, + _rate: &mut f32, + skeleton_attr: &CritterAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let wave = (anim_time as f32 * 13.0).sin(); + let wave_cos = (anim_time as f32 * 13.0).sin(); + let wave_slow = (anim_time as f32 * 6.5 + PI).sin(); + + next.head.offset = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1) / 18.0; + next.head.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + wave * 0.03); + next.head.scale = Vec3::one() / 18.0; + + next.chest.offset = Vec3::new( + 0.0, + skeleton_attr.chest.0 + wave * 1.0, + skeleton_attr.chest.1, + ) / 18.0; + next.chest.ori = Quaternion::rotation_y(wave_slow * 0.3); + next.chest.scale = Vec3::one() / 18.0; + + next.feet_f.offset = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1) / 18.0; + next.feet_f.ori = Quaternion::rotation_x(wave * 1.0); + next.feet_f.scale = Vec3::one() / 18.0; + + next.feet_b.offset = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1) / 18.0; + next.feet_b.ori = Quaternion::rotation_x(wave_cos * 1.0); + next.feet_b.scale = Vec3::one() / 18.0; + + next.tail.offset = + Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1) / 18.0; + next.tail.ori = Quaternion::rotation_y(wave_slow * 0.25); + next.tail.scale = Vec3::one() / 18.0; + + next + } +} diff --git a/voxygen/src/anim/dragon/idle.rs b/voxygen/src/anim/dragon/idle.rs index ae271be2fe..d1eaf0c53f 100644 --- a/voxygen/src/anim/dragon/idle.rs +++ b/voxygen/src/anim/dragon/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - DragonSkeleton, -}; +use super::{super::Animation, DragonSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/dragon/jump.rs b/voxygen/src/anim/dragon/jump.rs index 8aa98d93cd..b1b8fef078 100644 --- a/voxygen/src/anim/dragon/jump.rs +++ b/voxygen/src/anim/dragon/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - DragonSkeleton, -}; +use super::{super::Animation, DragonSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/dragon/mod.rs b/voxygen/src/anim/dragon/mod.rs index b6950956e5..6d550e7d30 100644 --- a/voxygen/src/anim/dragon/mod.rs +++ b/voxygen/src/anim/dragon/mod.rs @@ -9,6 +9,7 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; #[derive(Clone)] pub struct DragonSkeleton { @@ -48,6 +49,8 @@ impl DragonSkeleton { } impl Skeleton for DragonSkeleton { + type Attr = SkeletonAttr; + fn compute_matrices(&self) -> [FigureBoneData; 16] { let chest_front_mat = self.chest_front.compute_base_matrix(); let wing_in_l_mat = self.wing_in_l.compute_base_matrix(); @@ -90,3 +93,28 @@ impl Skeleton for DragonSkeleton { self.foot_br.interpolate(&target.foot_br, dt); } } + +pub struct SkeletonAttr; + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::Dragon(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self + } +} + +impl<'a> From<&'a comp::dragon::Body> for SkeletonAttr { + fn from(_body: &'a comp::dragon::Body) -> Self { + Self + } +} diff --git a/voxygen/src/anim/dragon/run.rs b/voxygen/src/anim/dragon/run.rs index 2abe9fae1a..1b563443b6 100644 --- a/voxygen/src/anim/dragon/run.rs +++ b/voxygen/src/anim/dragon/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - DragonSkeleton, -}; +use super::{super::Animation, DragonSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/fish_medium/idle.rs b/voxygen/src/anim/fish_medium/idle.rs index bfd71da3f5..9894e3d3fe 100644 --- a/voxygen/src/anim/fish_medium/idle.rs +++ b/voxygen/src/anim/fish_medium/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - FishMediumSkeleton, -}; +use super::{super::Animation, FishMediumSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/fish_medium/jump.rs b/voxygen/src/anim/fish_medium/jump.rs index 6b6266e402..3924aa1b85 100644 --- a/voxygen/src/anim/fish_medium/jump.rs +++ b/voxygen/src/anim/fish_medium/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - FishMediumSkeleton, -}; +use super::{super::Animation, FishMediumSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/fish_medium/mod.rs b/voxygen/src/anim/fish_medium/mod.rs index 566967a532..8b1448a68a 100644 --- a/voxygen/src/anim/fish_medium/mod.rs +++ b/voxygen/src/anim/fish_medium/mod.rs @@ -9,6 +9,7 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; #[derive(Clone)] pub struct FishMediumSkeleton { @@ -34,6 +35,7 @@ impl FishMediumSkeleton { } impl Skeleton for FishMediumSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let torso_mat = self.torso.compute_base_matrix(); let rear_mat = self.rear.compute_base_matrix(); @@ -67,3 +69,27 @@ impl Skeleton for FishMediumSkeleton { self.fin_r.interpolate(&target.fin_r, dt); } } +pub struct SkeletonAttr; + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::FishMedium(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self + } +} + +impl<'a> From<&'a comp::fish_medium::Body> for SkeletonAttr { + fn from(_body: &'a comp::fish_medium::Body) -> Self { + Self + } +} diff --git a/voxygen/src/anim/fish_medium/run.rs b/voxygen/src/anim/fish_medium/run.rs index 18886ee935..935aeef7af 100644 --- a/voxygen/src/anim/fish_medium/run.rs +++ b/voxygen/src/anim/fish_medium/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - FishMediumSkeleton, -}; +use super::{super::Animation, FishMediumSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/fish_small/idle.rs b/voxygen/src/anim/fish_small/idle.rs index 47b17ad942..ca0f5f2d1b 100644 --- a/voxygen/src/anim/fish_small/idle.rs +++ b/voxygen/src/anim/fish_small/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - FishSmallSkeleton, -}; +use super::{super::Animation, FishSmallSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/fish_small/jump.rs b/voxygen/src/anim/fish_small/jump.rs index f8088c84df..234a273d8c 100644 --- a/voxygen/src/anim/fish_small/jump.rs +++ b/voxygen/src/anim/fish_small/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - FishSmallSkeleton, -}; +use super::{super::Animation, FishSmallSkeleton, SkeletonAttr}; //use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/fish_small/mod.rs b/voxygen/src/anim/fish_small/mod.rs index 3d8b8e1184..5cc8faeb92 100644 --- a/voxygen/src/anim/fish_small/mod.rs +++ b/voxygen/src/anim/fish_small/mod.rs @@ -9,6 +9,7 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; #[derive(Clone)] pub struct FishSmallSkeleton { @@ -26,6 +27,7 @@ impl FishSmallSkeleton { } impl Skeleton for FishSmallSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let torso_mat = self.torso.compute_base_matrix(); @@ -54,3 +56,28 @@ impl Skeleton for FishSmallSkeleton { self.tail.interpolate(&target.tail, dt); } } + +pub struct SkeletonAttr; + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::FishSmall(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self + } +} + +impl<'a> From<&'a comp::fish_small::Body> for SkeletonAttr { + fn from(_body: &'a comp::fish_small::Body) -> Self { + Self + } +} diff --git a/voxygen/src/anim/fish_small/run.rs b/voxygen/src/anim/fish_small/run.rs index 0f1952c9dd..cc79aa8a43 100644 --- a/voxygen/src/anim/fish_small/run.rs +++ b/voxygen/src/anim/fish_small/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - FishSmallSkeleton, -}; +use super::{super::Animation, FishSmallSkeleton, SkeletonAttr}; //use std::{f32::consts::PI, ops::Mul}; use vek::*; diff --git a/voxygen/src/anim/fixture/mod.rs b/voxygen/src/anim/fixture/mod.rs index 22a2ba2686..80478eb3bc 100644 --- a/voxygen/src/anim/fixture/mod.rs +++ b/voxygen/src/anim/fixture/mod.rs @@ -4,6 +4,8 @@ use crate::render::FigureBoneData; #[derive(Clone)] pub struct FixtureSkeleton; +pub struct SkeletonAttr; + impl FixtureSkeleton { pub fn new() -> Self { Self {} @@ -11,6 +13,7 @@ impl FixtureSkeleton { } impl Skeleton for FixtureSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { [ FigureBoneData::new(vek::Mat4::identity()), diff --git a/voxygen/src/anim/mod.rs b/voxygen/src/anim/mod.rs index 6f69c17dc0..1a309e95c9 100644 --- a/voxygen/src/anim/mod.rs +++ b/voxygen/src/anim/mod.rs @@ -2,6 +2,7 @@ pub mod biped_large; pub mod bird_medium; pub mod bird_small; pub mod character; +pub mod critter; pub mod dragon; pub mod fish_medium; pub mod fish_small; @@ -11,7 +12,6 @@ pub mod quadruped_medium; pub mod quadruped_small; use crate::render::FigureBoneData; -use common::comp::{self, item::Tool}; use vek::*; #[derive(Copy, Clone)] @@ -21,15 +21,17 @@ pub struct Bone { pub scale: Vec3, } -impl Bone { - pub fn default() -> Self { +impl Default for Bone { + fn default() -> Self { Self { offset: Vec3::zero(), ori: Quaternion::identity(), scale: Vec3::broadcast(1.0 / 11.0), } } +} +impl Bone { pub fn compute_base_matrix(&self) -> Mat4 { Mat4::::translation_3d(self.offset) * Mat4::scaling_3d(self.scale) @@ -47,145 +49,16 @@ impl Bone { } pub trait Skeleton: Send + Sync + 'static { + type Attr; + fn compute_matrices(&self) -> [FigureBoneData; 16]; /// Change the current skeleton to be more like `target`. fn interpolate(&mut self, target: &Self, dt: f32); } -pub struct SkeletonAttr { - scaler: f32, - head_scale: f32, - neck_height: f32, - neck_forward: f32, - neck_right: f32, - weapon_x: f32, - weapon_y: f32, -} - -impl SkeletonAttr { - pub fn calculate_scale(body: &comp::humanoid::Body) -> f32 { - use comp::humanoid::{BodyType::*, Race::*}; - match (body.race, body.body_type) { - (Orc, Male) => 0.95, - (Orc, Female) => 0.8, - (Human, Male) => 0.8, - (Human, Female) => 0.75, - (Elf, Male) => 0.85, - (Elf, Female) => 0.8, - (Dwarf, Male) => 0.7, - (Dwarf, Female) => 0.65, - (Undead, Male) => 0.8, - (Undead, Female) => 0.75, - (Danari, Male) => 0.58, - (Danari, Female) => 0.58, - } - } -} - -impl Default for SkeletonAttr { - fn default() -> Self { - Self { - scaler: 1.0, - head_scale: 1.0, - neck_height: 1.0, - neck_forward: 1.0, - neck_right: 1.0, - weapon_x: 1.0, - weapon_y: 1.0, - } - } -} - -impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr { - fn from(body: &'a comp::humanoid::Body) -> Self { - use comp::humanoid::{BodyType::*, Race::*}; - Self { - scaler: SkeletonAttr::calculate_scale(body), - head_scale: match (body.race, body.body_type) { - (Orc, Male) => 0.9, - (Orc, Female) => 1.0, - (Human, Male) => 1.0, - (Human, Female) => 1.0, - (Elf, Male) => 0.95, - (Elf, Female) => 1.0, - (Dwarf, Male) => 1.0, - (Dwarf, Female) => 1.0, - (Undead, Male) => 1.0, - (Undead, Female) => 1.0, - (Danari, Male) => 1.15, - (Danari, Female) => 1.15, - }, - neck_height: match (body.race, body.body_type) { - (Orc, Male) => 0.0, - (Orc, Female) => 0.0, - (Human, Male) => 0.0, - (Human, Female) => 0.0, - (Elf, Male) => 0.0, - (Elf, Female) => 0.0, - (Dwarf, Male) => 0.0, - (Dwarf, Female) => 0.0, - (Undead, Male) => 0.5, - (Undead, Female) => 0.5, - (Danari, Male) => 0.5, - (Danari, Female) => 0.5, - }, - neck_forward: match (body.race, body.body_type) { - (Orc, Male) => 0.0, - (Orc, Female) => 0.0, - (Human, Male) => 0.5, - (Human, Female) => 0.0, - (Elf, Male) => 0.5, - (Elf, Female) => 0.5, - (Dwarf, Male) => 0.5, - (Dwarf, Female) => 0.0, - (Undead, Male) => 0.5, - (Undead, Female) => 0.5, - (Danari, Male) => 0.0, - (Danari, Female) => 0.0, - }, - neck_right: match (body.race, body.body_type) { - (Orc, Male) => 0.0, - (Orc, Female) => 0.0, - (Human, Male) => 0.0, - (Human, Female) => 0.0, - (Elf, Male) => 0.0, - (Elf, Female) => 0.0, - (Dwarf, Male) => 0.0, - (Dwarf, Female) => 0.0, - (Undead, Male) => 0.0, - (Undead, Female) => 0.0, - (Danari, Male) => 0.0, - (Danari, Female) => 0.0, - }, - weapon_x: match Tool::Hammer { - // TODO: Inventory - Tool::Sword => 0.0, - Tool::Axe => 3.0, - Tool::Hammer => 0.0, - Tool::Shield => 3.0, - Tool::Staff => 3.0, - Tool::Bow => 0.0, - Tool::Dagger => 0.0, - Tool::Debug(_) => 0.0, - }, - weapon_y: match Tool::Hammer { - // TODO: Inventory - Tool::Sword => -1.25, - Tool::Axe => 0.0, - Tool::Hammer => -2.0, - Tool::Shield => 0.0, - Tool::Staff => 0.0, - Tool::Bow => -2.0, - Tool::Dagger => -2.0, - Tool::Debug(_) => 0.0, - }, - } - } -} - pub trait Animation { - type Skeleton; + type Skeleton: Skeleton; type Dependency; /// Returns a new skeleton that is generated by the animation. @@ -194,6 +67,6 @@ pub trait Animation { dependency: Self::Dependency, anim_time: f64, rate: &mut f32, - skeleton_attr: &SkeletonAttr, + skeleton_attr: &<::Skeleton as Skeleton>::Attr, ) -> Self::Skeleton; } diff --git a/voxygen/src/anim/object/mod.rs b/voxygen/src/anim/object/mod.rs index 5ff3f185f5..e344695506 100644 --- a/voxygen/src/anim/object/mod.rs +++ b/voxygen/src/anim/object/mod.rs @@ -4,6 +4,7 @@ use vek::*; #[derive(Clone)] pub struct ObjectSkeleton; +pub struct SkeletonAttr; impl ObjectSkeleton { pub fn new() -> Self { @@ -14,6 +15,7 @@ impl ObjectSkeleton { const SCALE: f32 = 1.0 / 11.0; impl Skeleton for ObjectSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { [ FigureBoneData::new(Mat4::scaling_3d(Vec3::broadcast(SCALE))), diff --git a/voxygen/src/anim/quadruped_medium/idle.rs b/voxygen/src/anim/quadruped_medium/idle.rs index 6ae25a7474..6421629448 100644 --- a/voxygen/src/anim/quadruped_medium/idle.rs +++ b/voxygen/src/anim/quadruped_medium/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - QuadrupedMediumSkeleton, -}; +use super::{super::Animation, QuadrupedMediumSkeleton, SkeletonAttr}; use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -16,7 +13,7 @@ impl Animation for IdleAnimation { global_time: Self::Dependency, anim_time: f64, _rate: &mut f32, - _skeleton_attr: &SkeletonAttr, + skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); @@ -50,48 +47,92 @@ impl Animation for IdleAnimation { * 0.125, ); - next.head_upper.offset = Vec3::new(0.0, 7.5, 15.0 + wave_ultra_slow * 0.4) / 11.0; - next.head_upper.ori = Quaternion::rotation_z(look.x) * Quaternion::rotation_x(look.y); - next.head_upper.scale = Vec3::one() / 10.88; + next.head_upper.offset = Vec3::new( + 0.0, + skeleton_attr.head_upper.0, + skeleton_attr.head_upper.1 + wave_ultra_slow * 0.4, + ) / 11.0; + next.head_upper.ori = + Quaternion::rotation_z(0.8 * look.x) * Quaternion::rotation_x(0.8 * look.y); + next.head_upper.scale = Vec3::one() / 10.98; - next.jaw.offset = Vec3::new(0.0, 4.5 - wave_ultra_slow_cos * 0.12, 2.0 + wave_slow * 0.2); + next.head_lower.offset = Vec3::new( + 0.0, + skeleton_attr.head_lower.0, + skeleton_attr.head_lower.1 + wave_ultra_slow * 0.20, + ); + next.head_lower.ori = + Quaternion::rotation_z(-0.4 * look.x) * Quaternion::rotation_x(-0.4 * look.y); + next.head_lower.scale = Vec3::one() * 1.02; + + next.jaw.offset = Vec3::new( + 0.0, + skeleton_attr.jaw.0 - wave_ultra_slow_cos * 0.12, + skeleton_attr.jaw.1 + wave_slow * 0.2, + ); next.jaw.ori = Quaternion::rotation_x(wave_slow * 0.05); - next.jaw.scale = Vec3::one() * 1.01; + next.jaw.scale = Vec3::one() * 0.98; - next.head_lower.offset = Vec3::new(0.0, 3.1, -4.5 + wave_ultra_slow * 0.20); - next.head_lower.ori = Quaternion::rotation_z(0.0); - next.head_lower.scale = Vec3::one() * 0.98; - - next.tail.offset = Vec3::new(0.0, -13.0, 8.0 + wave_ultra_slow * 1.2) / 11.0; + next.tail.offset = Vec3::new( + 0.0, + skeleton_attr.tail.0, + skeleton_attr.tail.1 + wave_ultra_slow * 0.6, + ) / 11.0; next.tail.ori = Quaternion::rotation_z(0.0 + wave_slow * 0.2 + tailmove.x) * Quaternion::rotation_x(tailmove.y); next.tail.scale = Vec3::one() / 11.0; - next.torso_back.offset = Vec3::new(0.0, -11.7, 11.0 + wave_ultra_slow * 1.2) / 11.0; - next.torso_back.ori = Quaternion::rotation_y(wave_slow_cos * 0.015); + next.torso_back.offset = Vec3::new( + 0.0, + skeleton_attr.torso_back.0, + skeleton_attr.torso_back.1 + wave_ultra_slow * 0.6, + ) / 11.0; + next.torso_back.ori = Quaternion::rotation_y(wave_slow_cos * 0.015) + * Quaternion::rotation_z(0.1 * look.x) + * Quaternion::rotation_x(0.2 * look.y); next.torso_back.scale = Vec3::one() / 11.0; - next.torso_mid.offset = Vec3::new(0.0, 0.0, 12.0 + wave_ultra_slow * 0.7) / 11.0; + next.torso_mid.offset = Vec3::new( + 0.0, + skeleton_attr.torso_mid.0, + skeleton_attr.torso_mid.1 + wave_ultra_slow * 0.5, + ) / 11.0; next.torso_mid.ori = Quaternion::rotation_y(wave_slow * 0.015); - next.torso_mid.scale = Vec3::one() / 10.5; + next.torso_mid.scale = Vec3::one() / 10.98; - next.ears.offset = Vec3::new(0.0, 0.75, 5.25); - next.ears.ori = Quaternion::rotation_x(0.0 + wave_slow * 0.1); - next.ears.scale = Vec3::one() * 1.05; + next.ears.offset = Vec3::new(0.0, skeleton_attr.ears.0, skeleton_attr.ears.1); + next.ears.ori = Quaternion::rotation_x(0.0 + wave_ultra_slow * 0.03); + next.ears.scale = Vec3::one() / 1.02; - next.foot_lf.offset = Vec3::new(-5.0, 5.0, 2.5) / 11.0; + next.foot_lf.offset = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ) / 11.0; next.foot_lf.ori = Quaternion::rotation_x(0.0); next.foot_lf.scale = Vec3::one() / 11.0; - next.foot_rf.offset = Vec3::new(5.0, 5.0, 2.5) / 11.0; + next.foot_rf.offset = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ) / 11.0; next.foot_rf.ori = Quaternion::rotation_x(0.0); next.foot_rf.scale = Vec3::one() / 11.0; - next.foot_lb.offset = Vec3::new(-5.0, -10.0, 2.5) / 11.0; + next.foot_lb.offset = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ) / 11.0; next.foot_lb.ori = Quaternion::rotation_x(0.0); next.foot_lb.scale = Vec3::one() / 11.0; - next.foot_rb.offset = Vec3::new(5.0, -10.0, 2.5) / 11.0; + next.foot_rb.offset = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ) / 11.0; next.foot_rb.ori = Quaternion::rotation_x(0.0); next.foot_rb.scale = Vec3::one() / 11.0; diff --git a/voxygen/src/anim/quadruped_medium/jump.rs b/voxygen/src/anim/quadruped_medium/jump.rs index d262a85067..15b3e90b33 100644 --- a/voxygen/src/anim/quadruped_medium/jump.rs +++ b/voxygen/src/anim/quadruped_medium/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - QuadrupedMediumSkeleton, -}; +use super::{super::Animation, QuadrupedMediumSkeleton, SkeletonAttr}; use std::f32::consts::PI; use vek::*; @@ -29,14 +26,14 @@ impl Animation for JumpAnimation { Quaternion::rotation_z(0.0) * Quaternion::rotation_x(wave_slow * -0.25); next.head_upper.scale = Vec3::one() / 10.88; - next.jaw.offset = Vec3::new(0.0, 4.5, 2.0); - next.jaw.ori = Quaternion::rotation_x(0.0); - next.jaw.scale = Vec3::one() * 1.01; - next.head_lower.offset = Vec3::new(0.0, 3.1, -4.5); next.head_lower.ori = Quaternion::rotation_x(wave_stop * -0.1); next.head_lower.scale = Vec3::one() * 0.98; + next.jaw.offset = Vec3::new(0.0, 4.5, 2.0); + next.jaw.ori = Quaternion::rotation_x(0.0); + next.jaw.scale = Vec3::one() * 1.01; + next.tail.offset = Vec3::new(0.0, -12.0, 8.0) / 11.0; next.tail.ori = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(wave_slow * -0.25); next.tail.scale = Vec3::one() / 11.0; diff --git a/voxygen/src/anim/quadruped_medium/mod.rs b/voxygen/src/anim/quadruped_medium/mod.rs index 3f294968d8..da76f93449 100644 --- a/voxygen/src/anim/quadruped_medium/mod.rs +++ b/voxygen/src/anim/quadruped_medium/mod.rs @@ -9,12 +9,13 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; -#[derive(Clone)] +#[derive(Clone, Default)] pub struct QuadrupedMediumSkeleton { head_upper: Bone, - jaw: Bone, head_lower: Bone, + jaw: Bone, tail: Bone, torso_back: Bone, torso_mid: Bone, @@ -27,23 +28,12 @@ pub struct QuadrupedMediumSkeleton { impl QuadrupedMediumSkeleton { pub fn new() -> Self { - Self { - head_upper: Bone::default(), - jaw: Bone::default(), - head_lower: Bone::default(), - tail: Bone::default(), - torso_back: Bone::default(), - torso_mid: Bone::default(), - ears: Bone::default(), - foot_lf: Bone::default(), - foot_rf: Bone::default(), - foot_lb: Bone::default(), - foot_rb: Bone::default(), - } + Self::default() } } impl Skeleton for QuadrupedMediumSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { let ears_mat = self.ears.compute_base_matrix(); let head_upper_mat = self.head_upper.compute_base_matrix(); @@ -51,8 +41,8 @@ impl Skeleton for QuadrupedMediumSkeleton { [ FigureBoneData::new(head_upper_mat), - FigureBoneData::new(head_upper_mat * head_lower_mat * self.jaw.compute_base_matrix()), FigureBoneData::new(head_upper_mat * head_lower_mat), + FigureBoneData::new(head_upper_mat * self.jaw.compute_base_matrix()), FigureBoneData::new(self.tail.compute_base_matrix()), FigureBoneData::new(self.torso_back.compute_base_matrix()), FigureBoneData::new(self.torso_mid.compute_base_matrix()), @@ -71,8 +61,8 @@ impl Skeleton for QuadrupedMediumSkeleton { fn interpolate(&mut self, target: &Self, dt: f32) { self.head_upper.interpolate(&target.head_upper, dt); - self.jaw.interpolate(&target.jaw, dt); self.head_lower.interpolate(&target.head_lower, dt); + self.jaw.interpolate(&target.jaw, dt); self.tail.interpolate(&target.tail, dt); self.torso_back.interpolate(&target.torso_back, dt); self.torso_mid.interpolate(&target.torso_mid, dt); @@ -83,3 +73,140 @@ impl Skeleton for QuadrupedMediumSkeleton { self.foot_rb.interpolate(&target.foot_rb, dt); } } + +pub struct SkeletonAttr { + head_upper: (f32, f32), + head_lower: (f32, f32), + jaw: (f32, f32), + tail: (f32, f32), + torso_back: (f32, f32), + torso_mid: (f32, f32), + ears: (f32, f32), + feet_f: (f32, f32, f32), + feet_b: (f32, f32, f32), +} + +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::QuadrupedMedium(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self { + head_upper: (0.0, 0.0), + head_lower: (0.0, 0.0), + jaw: (0.0, 0.0), + tail: (0.0, 0.0), + torso_back: (0.0, 0.0), + torso_mid: (0.0, 0.0), + ears: (0.0, 0.0), + feet_f: (0.0, 0.0, 0.0), + feet_b: (0.0, 0.0, 0.0), + } + } +} + +impl<'a> From<&'a comp::quadruped_medium::Body> for SkeletonAttr { + fn from(body: &'a comp::quadruped_medium::Body) -> Self { + use comp::quadruped_medium::Species::*; + Self { + head_upper: match (body.species, body.body_type) { + (Wolf, _) => (12.0, 16.0), + (Saber, _) => (14.0, 12.0), + (Viper, _) => (14.0, 10.0), + (Tuskram, _) => (13.0, 12.0), + (Alligator, _) => (16.0, 11.0), + (Monitor, _) => (14.0, 6.0), + (Lion, _) => (11.5, 14.0), + (Tarasque, _) => (12.0, 19.0), + }, + head_lower: match (body.species, body.body_type) { + (Wolf, _) => (-4.0, -7.0), + (Saber, _) => (-6.0, 1.0), + (Viper, _) => (-3.0, -2.0), + (Tuskram, _) => (-3.0, 0.0), + (Alligator, _) => (-5.0, -4.0), + (Monitor, _) => (0.0, -1.0), + (Lion, _) => (-6.0, -1.0), + (Tarasque, _) => (-5.0, -8.0), + }, + jaw: match (body.species, body.body_type) { + (Wolf, _) => (3.0, -5.0), + (Saber, _) => (2.0, -1.0), + (Viper, _) => (3.0, -2.0), + (Tuskram, _) => (2.0, -2.0), + (Alligator, _) => (6.0, -6.0), + (Monitor, _) => (4.0, -3.0), + (Lion, _) => (3.0, -3.0), + (Tarasque, _) => (4.0, -9.0), + }, + tail: match (body.species, body.body_type) { + (Wolf, _) => (-13.0, 5.0), + (Saber, _) => (-13.0, 5.0), + (Viper, _) => (-13.0, 5.0), + (Tuskram, _) => (-13.0, 5.0), + (Alligator, _) => (-16.0, 5.0), + (Monitor, _) => (-13.0, 5.0), + (Lion, _) => (-14.0, 8.0), + (Tarasque, _) => (-13.0, 5.0), + }, + torso_back: match (body.species, body.body_type) { + (Wolf, _) => (4.0, 11.0), + (Saber, _) => (4.0, 9.0), + (Viper, _) => (4.0, 7.0), + (Tuskram, _) => (4.0, 9.0), + (Alligator, _) => (4.0, 6.0), + (Monitor, _) => (4.0, 4.0), + (Lion, _) => (4.0, 10.0), + (Tarasque, _) => (4.0, 9.0), + }, + torso_mid: match (body.species, body.body_type) { + (Wolf, _) => (-7.0, 10.5), + (Saber, _) => (-8.0, 9.5), + (Viper, _) => (-7.0, 7.0), + (Tuskram, _) => (-7.0, 9.0), + (Alligator, _) => (-7.0, 6.0), + (Monitor, _) => (-7.0, 4.0), + (Lion, _) => (-7.0, 9.0), + (Tarasque, _) => (-7.0, 8.0), + }, + ears: match (body.species, body.body_type) { + (Wolf, _) => (1.0, 6.0), + (Saber, _) => (-1.0, 6.0), + (Viper, _) => (10.0, 2.0), + (Tuskram, _) => (10.0, 2.0), + (Alligator, _) => (10.0, 2.0), + (Monitor, _) => (10.0, 2.0), + (Lion, _) => (-2.0, 4.0), + (Tarasque, _) => (1.0, 2.0), + }, + feet_f: match (body.species, body.body_type) { + (Wolf, _) => (4.0, 6.0, 3.0), + (Saber, _) => (4.0, 6.0, 3.0), + (Viper, _) => (4.0, 6.0, 3.0), + (Tuskram, _) => (4.0, 6.0, 3.0), + (Alligator, _) => (4.0, 6.0, 3.0), + (Monitor, _) => (4.0, 6.0, 3.0), + (Lion, _) => (4.0, 6.0, 3.0), + (Tarasque, _) => (4.0, 6.0, 3.0), + }, + feet_b: match (body.species, body.body_type) { + (Wolf, _) => (4.0, -4.0, 3.5), + (Saber, _) => (4.0, -4.0, 3.5), + (Viper, _) => (4.0, -4.0, 3.5), + (Tuskram, _) => (4.0, -8.0, 3.5), + (Alligator, _) => (4.0, -4.0, 3.5), + (Monitor, _) => (4.0, -6.0, 3.5), + (Lion, _) => (4.0, -7.0, 3.5), + (Tarasque, _) => (4.0, -8.0, 3.5), + }, + } + } +} diff --git a/voxygen/src/anim/quadruped_medium/run.rs b/voxygen/src/anim/quadruped_medium/run.rs index 6aea5b70b8..f12f72075d 100644 --- a/voxygen/src/anim/quadruped_medium/run.rs +++ b/voxygen/src/anim/quadruped_medium/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - QuadrupedMediumSkeleton, -}; +use super::{super::Animation, QuadrupedMediumSkeleton, SkeletonAttr}; use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -16,7 +13,7 @@ impl Animation for RunAnimation { (_velocity, global_time): Self::Dependency, anim_time: f64, _rate: &mut f32, - _skeleton_attr: &SkeletonAttr, + skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); @@ -41,56 +38,85 @@ impl Animation for RunAnimation { * 0.125, ); - next.head_upper.offset = - Vec3::new(0.0, 9.5 + wave_quick_cos * 2.0, 15.0 + wave_med * 3.0) / 11.0; + next.head_upper.offset = Vec3::new( + 0.0, + skeleton_attr.head_upper.0 + wave_quick_cos * 2.0, + skeleton_attr.head_upper.1 + wave_med * 3.0, + ) / 11.0; next.head_upper.ori = Quaternion::rotation_x(-0.12 + wave_quick_cos * 0.12 + wolf_look.y) * Quaternion::rotation_z(wolf_look.x); - next.head_upper.scale = Vec3::one() / 10.88; + next.head_upper.scale = Vec3::one() / 10.98; - next.jaw.offset = Vec3::new(0.0, 4.5, 2.0 + wave_slow_cos * 1.0); - next.jaw.ori = Quaternion::rotation_x(wave_slow * 0.05); - next.jaw.scale = Vec3::one() * 1.01; - - next.head_lower.offset = Vec3::new(0.0, 3.1, -4.5 + wave_med * 1.0); + next.head_lower.offset = Vec3::new( + 0.0, + skeleton_attr.head_lower.0, + skeleton_attr.head_lower.1 + wave_med * 1.0, + ); next.head_lower.ori = Quaternion::rotation_z(0.0); next.head_lower.scale = Vec3::one() * 0.98; - next.tail.offset = Vec3::new(0.0, -12.0, 10.0) / 11.0; + next.jaw.offset = Vec3::new( + 0.0, + skeleton_attr.jaw.0, + skeleton_attr.jaw.1 + wave_slow_cos * 1.0, + ); + next.jaw.ori = Quaternion::rotation_x(wave_slow * 0.05); + next.jaw.scale = Vec3::one() * 1.01; + + next.tail.offset = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1) / 11.0; next.tail.ori = Quaternion::rotation_x(wave_quick * 0.18); next.tail.scale = Vec3::one() / 11.0; - next.torso_back.offset = - Vec3::new(0.0, -9.5 + wave_quick_cos * 2.2, 13.0 + wave_med * 2.8) / 11.0; - next.torso_back.ori = Quaternion::rotation_x(-0.15 + wave_med_cos * 0.14); + next.torso_back.offset = Vec3::new( + 0.0, + skeleton_attr.torso_back.0 + wave_quick_cos * 2.2, + skeleton_attr.torso_back.1 + wave_med * 2.8, + ) / 11.0; + next.torso_back.ori = Quaternion::rotation_x(-0.05 + wave_med_cos * 0.14); next.torso_back.scale = Vec3::one() / 11.0; - next.torso_mid.offset = - Vec3::new(0.0, 0.0 + wave_quick_cos * 2.2, 14.0 + wave_med * 3.2) / 11.0; - next.torso_mid.ori = Quaternion::rotation_x(-0.15 + wave_med_cos * 0.12); - next.torso_mid.scale = Vec3::one() / 10.5; + next.torso_mid.offset = Vec3::new( + 0.0, + skeleton_attr.torso_mid.0 + wave_quick_cos * 2.2, + skeleton_attr.torso_mid.1 + wave_med * 3.2, + ) / 11.0; + next.torso_mid.ori = Quaternion::rotation_x(-0.05 + wave_med_cos * 0.12); + next.torso_mid.scale = Vec3::one() / 10.98; - next.ears.offset = Vec3::new(0.0, 0.75 + wave * 0.4, 6.25); + next.ears.offset = Vec3::new(0.0, skeleton_attr.ears.0 + wave * 0.4, skeleton_attr.ears.1); next.ears.ori = Quaternion::rotation_x(wave * 0.2); - next.ears.scale = Vec3::one() * 1.05; + next.ears.scale = Vec3::one() * 1.02; - next.foot_lf.offset = - Vec3::new(-5.0, 5.0 + wave_quick * 3.0, 7.0 + wave_quick_cos * 4.0) / 11.0; - next.foot_lf.ori = Quaternion::rotation_x(0.0 + wave_quick * 0.8); + next.foot_lf.offset = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1 + wave_quick * 3.0, + skeleton_attr.feet_f.2 + wave_quick_cos * 4.0, + ) / 11.0; + next.foot_lf.ori = Quaternion::rotation_x(wave_quick * 0.8); next.foot_lf.scale = Vec3::one() / 11.0; - next.foot_rf.offset = - Vec3::new(5.0, 5.0 - wave_quick_cos * 3.0, 7.0 + wave_quick * 4.0) / 11.0; - next.foot_rf.ori = Quaternion::rotation_x(0.0 - wave_quick_cos * 0.8); + next.foot_rf.offset = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1 - wave_quick_cos * 3.0, + skeleton_attr.feet_f.2 + wave_quick * 4.0, + ) / 11.0; + next.foot_rf.ori = Quaternion::rotation_x(wave_quick_cos * 0.8); next.foot_rf.scale = Vec3::one() / 11.0; - next.foot_lb.offset = - Vec3::new(-5.0, -10.0 - wave_quick_cos * 3.0, 7.0 + wave_quick * 4.0) / 11.0; - next.foot_lb.ori = Quaternion::rotation_x(0.0 - wave_quick_cos * 0.8); + next.foot_lb.offset = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1 - wave_quick_cos * 3.0, + skeleton_attr.feet_b.2 + wave_quick * 4.0, + ) / 11.0; + next.foot_lb.ori = Quaternion::rotation_x(wave_quick_cos * 0.8); next.foot_lb.scale = Vec3::one() / 11.0; - next.foot_rb.offset = - Vec3::new(5.0, -10.0 + wave_quick * 3.0, 7.0 + wave_quick_cos * 4.0) / 11.0; - next.foot_rb.ori = Quaternion::rotation_x(0.0 + wave_quick * 0.8); + next.foot_rb.offset = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1 + wave_quick * 3.0, + skeleton_attr.feet_b.2 + wave_quick_cos * 4.0, + ) / 11.0; + next.foot_rb.ori = Quaternion::rotation_x(wave_quick * 0.8); next.foot_rb.scale = Vec3::one() / 11.0; next diff --git a/voxygen/src/anim/quadruped_small/idle.rs b/voxygen/src/anim/quadruped_small/idle.rs index 7b9faa7d60..846e15fc72 100644 --- a/voxygen/src/anim/quadruped_small/idle.rs +++ b/voxygen/src/anim/quadruped_small/idle.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - QuadrupedSmallSkeleton, -}; +use super::{super::Animation, QuadrupedSmallSkeleton, SkeletonAttr}; use std::{f32::consts::PI, ops::Mul}; use vek::*; @@ -16,7 +13,7 @@ impl Animation for IdleAnimation { global_time: Self::Dependency, anim_time: f64, _rate: &mut f32, - _skeleton_attr: &SkeletonAttr, + skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); @@ -37,28 +34,49 @@ impl Animation for IdleAnimation { * 0.25, ); - next.head.offset = Vec3::new(0.0, -2.0, -1.5 + wave * 0.2) / 11.0; + next.head.offset = + Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + wave * 0.2) / 11.0; next.head.ori = Quaternion::rotation_z(pig_head_look.x) * Quaternion::rotation_x(pig_head_look.y + wave_slow_cos * 0.03); next.head.scale = Vec3::one() / 10.5; - next.chest.offset = Vec3::new(wave_slow * 0.05, -9.0, 1.5 + wave_slow_cos * 0.4) / 11.0; + next.chest.offset = Vec3::new( + wave_slow * 0.05, + skeleton_attr.chest.0, + skeleton_attr.chest.1 + wave_slow_cos * 0.2, + ) / 11.0; next.chest.ori = Quaternion::rotation_y(wave_slow * 0.05); next.chest.scale = Vec3::one() / 11.0; - next.leg_lf.offset = Vec3::new(-4.5, 2.0, 1.5) / 11.0; + next.leg_lf.offset = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ) / 11.0; next.leg_lf.ori = Quaternion::rotation_x(wave_slow * 0.08); next.leg_lf.scale = Vec3::one() / 11.0; - next.leg_rf.offset = Vec3::new(2.5, 2.0, 1.5) / 11.0; + next.leg_rf.offset = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1, + skeleton_attr.feet_f.2, + ) / 11.0; next.leg_rf.ori = Quaternion::rotation_x(wave_slow_cos * 0.08); next.leg_rf.scale = Vec3::one() / 11.0; - next.leg_lb.offset = Vec3::new(-4.5, -3.0, 1.5) / 11.0; + next.leg_lb.offset = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ) / 11.0; next.leg_lb.ori = Quaternion::rotation_x(wave_slow_cos * 0.08); next.leg_lb.scale = Vec3::one() / 11.0; - next.leg_rb.offset = Vec3::new(2.5, -3.0, 1.5) / 11.0; + next.leg_rb.offset = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1, + skeleton_attr.feet_b.2, + ) / 11.0; next.leg_rb.ori = Quaternion::rotation_x(wave_slow * 0.08); next.leg_rb.scale = Vec3::one() / 11.0; diff --git a/voxygen/src/anim/quadruped_small/jump.rs b/voxygen/src/anim/quadruped_small/jump.rs index 11d38973b4..2173cfdc64 100644 --- a/voxygen/src/anim/quadruped_small/jump.rs +++ b/voxygen/src/anim/quadruped_small/jump.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - QuadrupedSmallSkeleton, -}; +use super::{super::Animation, QuadrupedSmallSkeleton, SkeletonAttr}; use std::f32::consts::PI; use vek::*; diff --git a/voxygen/src/anim/quadruped_small/mod.rs b/voxygen/src/anim/quadruped_small/mod.rs index 600bb9d2ba..2bba14afbd 100644 --- a/voxygen/src/anim/quadruped_small/mod.rs +++ b/voxygen/src/anim/quadruped_small/mod.rs @@ -9,8 +9,9 @@ pub use self::run::RunAnimation; use super::{Bone, Skeleton}; use crate::render::FigureBoneData; +use common::comp::{self}; -#[derive(Clone)] +#[derive(Clone, Default)] pub struct QuadrupedSmallSkeleton { head: Bone, chest: Bone, @@ -22,18 +23,12 @@ pub struct QuadrupedSmallSkeleton { impl QuadrupedSmallSkeleton { pub fn new() -> Self { - Self { - head: Bone::default(), - chest: Bone::default(), - leg_lf: Bone::default(), - leg_rf: Bone::default(), - leg_lb: Bone::default(), - leg_rb: Bone::default(), - } + Self::default() } } impl Skeleton for QuadrupedSmallSkeleton { + type Attr = SkeletonAttr; fn compute_matrices(&self) -> [FigureBoneData; 16] { [ FigureBoneData::new(self.head.compute_base_matrix()), @@ -64,3 +59,95 @@ impl Skeleton for QuadrupedSmallSkeleton { self.leg_rb.interpolate(&target.leg_rb, dt); } } + +pub struct SkeletonAttr { + head: (f32, f32), + chest: (f32, f32), + feet_f: (f32, f32, f32), + feet_b: (f32, f32, f32), +} +impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { + type Error = (); + + fn try_from(body: &'a comp::Body) -> Result { + match body { + comp::Body::QuadrupedSmall(body) => Ok(SkeletonAttr::from(body)), + _ => Err(()), + } + } +} + +impl Default for SkeletonAttr { + fn default() -> Self { + Self { + head: (0.0, 0.0), + chest: (0.0, 0.0), + feet_f: (0.0, 0.0, 0.0), + feet_b: (0.0, 0.0, 0.0), + } + } +} + +impl<'a> From<&'a comp::quadruped_small::Body> for SkeletonAttr { + fn from(body: &'a comp::quadruped_small::Body) -> Self { + use comp::quadruped_small::Species::*; + Self { + head: match (body.species, body.body_type) { + (Pig, _) => (6.0, 7.0), + (Fox, _) => (8.0, 8.0), + (Sheep, _) => (8.0, 8.0), + (Boar, _) => (13.0, 8.0), + (Jackalope, _) => (6.0, 9.0), + (Skunk, _) => (7.0, 9.0), + (Cat, _) => (7.0, 8.0), + (Batfox, _) => (8.0, 9.0), + (Raccoon, _) => (9.0, 7.0), + (Quokka, _) => (10.0, 10.0), + (Dodarock, _) => (8.0, 9.0), + (Holladon, _) => (8.0, 8.0), + }, + chest: match (body.species, body.body_type) { + (Pig, _) => (0.0, 8.0), + (Fox, _) => (-2.0, 5.0), + (Sheep, _) => (-2.0, 6.0), + (Boar, _) => (-2.0, 7.0), + (Jackalope, _) => (-2.0, 6.0), + (Skunk, _) => (-5.0, 6.0), + (Cat, _) => (-2.0, 6.0), + (Batfox, _) => (-2.0, 6.0), + (Raccoon, _) => (-2.0, 6.0), + (Quokka, _) => (2.0, 8.0), + (Dodarock, _) => (-2.0, 8.0), + (Holladon, _) => (-2.0, 6.0), + }, + feet_f: match (body.species, body.body_type) { + (Pig, _) => (3.0, 5.0, 2.0), + (Fox, _) => (3.0, 5.0, 3.0), + (Sheep, _) => (3.0, 3.0, 3.0), + (Boar, _) => (3.0, 5.0, 3.0), + (Jackalope, _) => (3.0, 5.0, 4.0), + (Skunk, _) => (3.0, 3.0, 4.0), + (Cat, _) => (3.0, 5.0, 3.0), + (Batfox, _) => (2.5, 5.0, 3.0), + (Raccoon, _) => (3.0, 5.0, 3.0), + (Quokka, _) => (3.0, 5.0, 3.0), + (Dodarock, _) => (3.5, 5.0, 4.0), + (Holladon, _) => (3.0, 5.0, 4.0), + }, + feet_b: match (body.species, body.body_type) { + (Pig, _) => (3.0, -2.0, 2.0), + (Fox, _) => (2.5, -2.0, 3.0), + (Sheep, _) => (3.0, -4.0, 3.0), + (Boar, _) => (3.0, -3.0, 5.0), + (Jackalope, _) => (3.0, -2.0, 4.0), + (Skunk, _) => (3.0, -4.0, 4.0), + (Cat, _) => (2.0, -2.0, 3.0), + (Batfox, _) => (2.5, -2.0, 3.0), + (Raccoon, _) => (3.0, -2.0, 3.0), + (Quokka, _) => (3.0, -4.0, 3.0), + (Dodarock, _) => (4.5, -3.0, 4.0), + (Holladon, _) => (4.0, -4.0, 0.0), + }, + } + } +} diff --git a/voxygen/src/anim/quadruped_small/run.rs b/voxygen/src/anim/quadruped_small/run.rs index c5af0a7af8..f44fbfdced 100644 --- a/voxygen/src/anim/quadruped_small/run.rs +++ b/voxygen/src/anim/quadruped_small/run.rs @@ -1,7 +1,4 @@ -use super::{ - super::{Animation, SkeletonAttr}, - QuadrupedSmallSkeleton, -}; +use super::{super::Animation, QuadrupedSmallSkeleton, SkeletonAttr}; use vek::*; pub struct RunAnimation; @@ -15,7 +12,7 @@ impl Animation for RunAnimation { (_velocity, _global_time): Self::Dependency, anim_time: f64, _rate: &mut f32, - _skeleton_attr: &SkeletonAttr, + skeleton_attr: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); @@ -24,32 +21,49 @@ impl Animation for RunAnimation { let wave_quick_cos = (anim_time as f32 * 20.0).cos(); let wave_cos = (anim_time as f32 * 14.0).cos(); - next.head.offset = Vec3::new(0.0, 0.0, -1.5 + wave * 1.5) / 11.0; + next.head.offset = + Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1 + wave * 1.5) / 11.0; next.head.ori = Quaternion::rotation_x(0.2 + wave * 0.05) * Quaternion::rotation_y(wave_cos * 0.03); next.head.scale = Vec3::one() / 10.5; - next.chest.offset = Vec3::new(0.0, -9.0, 1.5 + wave_cos * 1.2) / 11.0; + next.chest.offset = Vec3::new( + 0.0, + skeleton_attr.chest.0, + skeleton_attr.chest.1 + wave_cos * 1.2, + ) / 11.0; next.chest.ori = Quaternion::rotation_x(wave * 0.1); next.chest.scale = Vec3::one() / 11.0; - next.leg_lf.offset = - Vec3::new(-4.5, 2.0 + wave_quick * 0.8, 2.5 + wave_quick_cos * 1.5) / 11.0; + next.leg_lf.offset = Vec3::new( + -skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1 + wave_quick * 0.8, + skeleton_attr.feet_f.2 + wave_quick_cos * 1.5, + ) / 11.0; next.leg_lf.ori = Quaternion::rotation_x(wave_quick * 0.3); next.leg_lf.scale = Vec3::one() / 11.0; - next.leg_rf.offset = - Vec3::new(2.5, 2.0 - wave_quick_cos * 0.8, 2.5 + wave_quick * 1.5) / 11.0; + next.leg_rf.offset = Vec3::new( + skeleton_attr.feet_f.0, + skeleton_attr.feet_f.1 - wave_quick_cos * 0.8, + skeleton_attr.feet_f.2 + wave_quick * 1.5, + ) / 11.0; next.leg_rf.ori = Quaternion::rotation_x(wave_quick_cos * -0.3); next.leg_rf.scale = Vec3::one() / 11.0; - next.leg_lb.offset = - Vec3::new(-4.5, -3.0 - wave_quick_cos * 0.8, 2.5 + wave_quick * 1.5) / 11.0; + next.leg_lb.offset = Vec3::new( + -skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1 - wave_quick_cos * 0.8, + skeleton_attr.feet_b.2 + wave_quick * 1.5, + ) / 11.0; next.leg_lb.ori = Quaternion::rotation_x(wave_quick_cos * -0.3); next.leg_lb.scale = Vec3::one() / 11.0; - next.leg_rb.offset = - Vec3::new(2.5, -3.0 + wave_quick * 0.8, 2.5 + wave_quick_cos * 1.5) / 11.0; + next.leg_rb.offset = Vec3::new( + skeleton_attr.feet_b.0, + skeleton_attr.feet_b.1 + wave_quick * 0.8, + skeleton_attr.feet_b.2 + wave_quick_cos * 1.5, + ) / 11.0; next.leg_rb.ori = Quaternion::rotation_x(wave_quick * 0.3); next.leg_rb.scale = Vec3::one() / 11.0; diff --git a/voxygen/src/menu/char_selection/scene.rs b/voxygen/src/menu/char_selection/scene.rs index 5ddbe64b60..f0f75e4d70 100644 --- a/voxygen/src/menu/char_selection/scene.rs +++ b/voxygen/src/menu/char_selection/scene.rs @@ -1,8 +1,8 @@ use crate::{ anim::{ - character::{CharacterSkeleton, IdleAnimation}, + character::{CharacterSkeleton, IdleAnimation, SkeletonAttr}, fixture::FixtureSkeleton, - Animation, Skeleton, SkeletonAttr, + Animation, Skeleton, }, render::{ create_pp_mesh, create_skybox_mesh, Consts, FigurePipeline, Globals, Light, Model, diff --git a/voxygen/src/scene/figure/cache.rs b/voxygen/src/scene/figure/cache.rs index 54fe68a2d5..fa4a50ab7f 100644 --- a/voxygen/src/scene/figure/cache.rs +++ b/voxygen/src/scene/figure/cache.rs @@ -1,6 +1,6 @@ use super::load::*; use crate::{ - anim::SkeletonAttr, + anim::{self, Skeleton}, render::{FigurePipeline, Mesh, Model, Renderer}, scene::camera::CameraMode, }; @@ -8,8 +8,11 @@ use common::{ assets::watch::ReloadIndicator, comp::{ActionState, Body, CharacterState, Equipment, MovementState}, }; -use hashbrown::HashMap; -use std::mem::{discriminant, Discriminant}; +use hashbrown::{hash_map::Entry, HashMap}; +use std::{ + convert::TryInto, + mem::{discriminant, Discriminant}, +}; #[derive(PartialEq, Eq, Hash, Clone)] enum FigureKey { @@ -37,12 +40,15 @@ impl From<&CharacterState> for CharacterStateCacheKey { } } -pub struct FigureModelCache { - models: HashMap, SkeletonAttr), u64)>, +pub struct FigureModelCache +where + Skel: Skeleton, +{ + models: HashMap, Skel::Attr), u64)>, manifest_indicator: ReloadIndicator, } -impl FigureModelCache { +impl FigureModelCache { pub fn new() -> Self { Self { models: HashMap::new(), @@ -58,7 +64,11 @@ impl FigureModelCache { tick: u64, camera_mode: CameraMode, character_state: Option<&CharacterState>, - ) -> &(Model, SkeletonAttr) { + ) -> &(Model, Skel::Attr) + where + for<'a> &'a common::comp::Body: std::convert::TryInto, + Skel::Attr: Default, + { let key = if equipment.is_some() { FigureKey::Complex( body, @@ -70,32 +80,35 @@ impl FigureModelCache { FigureKey::Simple(body) }; - match self.models.get_mut(&key) { - Some((_model, last_used)) => { + match self.models.entry(key) { + Entry::Occupied(o) => { + let (model, last_used) = o.into_mut(); *last_used = tick; + model } - None => { - self.models.insert( - key.clone(), - ( - { - let humanoid_head_spec = - HumHeadSpec::load_watched(&mut self.manifest_indicator); - let humanoid_armor_shoulder_spec = - HumArmorShoulderSpec::load_watched(&mut self.manifest_indicator); - let humanoid_armor_chest_spec = - HumArmorChestSpec::load_watched(&mut self.manifest_indicator); - let humanoid_armor_hand_spec = - HumArmorHandSpec::load_watched(&mut self.manifest_indicator); - let humanoid_armor_belt_spec = - HumArmorBeltSpec::load_watched(&mut self.manifest_indicator); - let humanoid_armor_pants_spec = - HumArmorPantsSpec::load_watched(&mut self.manifest_indicator); - let humanoid_armor_foot_spec = - HumArmorFootSpec::load_watched(&mut self.manifest_indicator); + Entry::Vacant(v) => { + &v.insert(( + { + let bone_meshes = match body { + Body::Humanoid(body) => { + let humanoid_head_spec = + HumHeadSpec::load_watched(&mut self.manifest_indicator); + let humanoid_armor_shoulder_spec = + HumArmorShoulderSpec::load_watched( + &mut self.manifest_indicator, + ); + let humanoid_armor_chest_spec = + HumArmorChestSpec::load_watched(&mut self.manifest_indicator); + let humanoid_armor_hand_spec = + HumArmorHandSpec::load_watched(&mut self.manifest_indicator); + let humanoid_armor_belt_spec = + HumArmorBeltSpec::load_watched(&mut self.manifest_indicator); + let humanoid_armor_pants_spec = + HumArmorPantsSpec::load_watched(&mut self.manifest_indicator); + let humanoid_armor_foot_spec = + HumArmorFootSpec::load_watched(&mut self.manifest_indicator); - let bone_meshes = match body { - Body::Humanoid(body) => [ + [ match camera_mode { CameraMode::ThirdPerson => { Some(humanoid_head_spec.mesh_head( @@ -189,196 +202,374 @@ impl FigureModelCache { None, None, None, - ], - Body::QuadrupedSmall(body) => [ - Some(mesh_quadruped_small_head(body.head)), - Some(mesh_quadruped_small_chest(body.chest)), - Some(mesh_quadruped_small_leg_lf(body.leg_l)), - Some(mesh_quadruped_small_leg_rf(body.leg_r)), - Some(mesh_quadruped_small_leg_lb(body.leg_l)), - Some(mesh_quadruped_small_leg_rb(body.leg_r)), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ], - Body::QuadrupedMedium(body) => [ - Some(mesh_quadruped_medium_head_upper(body.head_upper)), - Some(mesh_quadruped_medium_jaw(body.jaw)), - Some(mesh_quadruped_medium_head_lower(body.head_lower)), - Some(mesh_quadruped_medium_tail(body.tail)), - Some(mesh_quadruped_medium_torso_back(body.torso_back)), - Some(mesh_quadruped_medium_torso_mid(body.torso_mid)), - Some(mesh_quadruped_medium_ears(body.ears)), - Some(mesh_quadruped_medium_foot_lf(body.foot_lf)), - Some(mesh_quadruped_medium_foot_rf(body.foot_rf)), - Some(mesh_quadruped_medium_foot_lb(body.foot_lb)), - Some(mesh_quadruped_medium_foot_rb(body.foot_rb)), - None, - None, - None, - None, - None, - ], - Body::BirdMedium(body) => [ - Some(mesh_bird_medium_head(body.head)), - Some(mesh_bird_medium_torso(body.torso)), - Some(mesh_bird_medium_tail(body.tail)), - Some(mesh_bird_medium_wing_l(body.wing_l)), - Some(mesh_bird_medium_wing_r(body.wing_r)), - Some(mesh_bird_medium_leg_l(body.leg_l)), - Some(mesh_bird_medium_leg_r(body.leg_r)), - None, - None, - None, - None, - None, - None, - None, - None, - None, - ], - Body::FishMedium(body) => [ - Some(mesh_fish_medium_head(body.head)), - Some(mesh_fish_medium_torso(body.torso)), - Some(mesh_fish_medium_rear(body.rear)), - Some(mesh_fish_medium_tail(body.tail)), - Some(mesh_fish_medium_fin_l(body.fin_l)), - Some(mesh_fish_medium_fin_r(body.fin_r)), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ], - Body::Dragon(body) => [ - Some(mesh_dragon_head(body.head)), - Some(mesh_dragon_chest_front(body.chest_front)), - Some(mesh_dragon_chest_rear(body.chest_rear)), - Some(mesh_dragon_tail_front(body.tail_front)), - Some(mesh_dragon_tail_rear(body.tail_rear)), - Some(mesh_dragon_wing_in_l(body.wing_in_l)), - Some(mesh_dragon_wing_in_r(body.wing_in_r)), - Some(mesh_dragon_wing_out_l(body.wing_out_l)), - Some(mesh_dragon_wing_out_r(body.wing_out_r)), - Some(mesh_dragon_foot_fl(body.foot_fl)), - Some(mesh_dragon_foot_fr(body.foot_fr)), - Some(mesh_dragon_foot_bl(body.foot_bl)), - Some(mesh_dragon_foot_br(body.foot_br)), - None, - None, - None, - ], - Body::BirdSmall(body) => [ - Some(mesh_bird_small_head(body.head)), - Some(mesh_bird_small_torso(body.torso)), - Some(mesh_bird_small_wing_l(body.wing_l)), - Some(mesh_bird_small_wing_r(body.wing_r)), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ], - Body::FishSmall(body) => [ - Some(mesh_fish_small_torso(body.torso)), - Some(mesh_fish_small_tail(body.tail)), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ], - Body::BipedLarge(body) => [ - Some(mesh_biped_large_head(body.head)), - Some(mesh_biped_large_upper_torso(body.upper_torso)), - Some(mesh_biped_large_lower_torso(body.lower_torso)), - Some(mesh_biped_large_shoulder_l(body.shoulder_l)), - Some(mesh_biped_large_shoulder_r(body.shoulder_r)), - Some(mesh_biped_large_hand_l(body.hand_l)), - Some(mesh_biped_large_hand_r(body.hand_r)), - Some(mesh_biped_large_leg_l(body.leg_l)), - Some(mesh_biped_large_leg_r(body.leg_r)), - Some(mesh_biped_large_foot_l(body.foot_l)), - Some(mesh_biped_large_foot_r(body.foot_r)), - None, - None, - None, - None, - None, - ], - Body::Object(object) => [ - Some(mesh_object(object)), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ], - }; + ] + } + Body::QuadrupedSmall(body) => { + let quadruped_small_central_spec = + QuadrupedSmallCentralSpec::load_watched( + &mut self.manifest_indicator, + ); + let quadruped_small_lateral_spec = + QuadrupedSmallLateralSpec::load_watched( + &mut self.manifest_indicator, + ); - let skeleton_attr = match body { - Body::Humanoid(body) => SkeletonAttr::from(&body), - _ => SkeletonAttr::default(), - }; + [ + Some( + quadruped_small_central_spec + .mesh_head(body.species, body.body_type), + ), + Some( + quadruped_small_central_spec + .mesh_chest(body.species, body.body_type), + ), + Some( + quadruped_small_lateral_spec + .mesh_foot_lf(body.species, body.body_type), + ), + Some( + quadruped_small_lateral_spec + .mesh_foot_rf(body.species, body.body_type), + ), + Some( + quadruped_small_lateral_spec + .mesh_foot_lb(body.species, body.body_type), + ), + Some( + quadruped_small_lateral_spec + .mesh_foot_rb(body.species, body.body_type), + ), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ] + } + Body::QuadrupedMedium(body) => { + let quadruped_medium_central_spec = + QuadrupedMediumCentralSpec::load_watched( + &mut self.manifest_indicator, + ); + let quadruped_medium_lateral_spec = + QuadrupedMediumLateralSpec::load_watched( + &mut self.manifest_indicator, + ); - let mut mesh = Mesh::new(); - bone_meshes - .iter() - .enumerate() - .filter_map(|(i, bm)| bm.as_ref().map(|bm| (i, bm))) - .for_each(|(i, bone_mesh)| { - mesh.push_mesh_map(bone_mesh, |vert| { - vert.with_bone_idx(i as u8) - }) - }); + [ + Some( + quadruped_medium_central_spec + .mesh_head_upper(body.species, body.body_type), + ), + Some( + quadruped_medium_central_spec + .mesh_head_lower(body.species, body.body_type), + ), + Some( + quadruped_medium_central_spec + .mesh_jaw(body.species, body.body_type), + ), + Some( + quadruped_medium_central_spec + .mesh_tail(body.species, body.body_type), + ), + Some( + quadruped_medium_central_spec + .mesh_torso_f(body.species, body.body_type), + ), + Some( + quadruped_medium_central_spec + .mesh_torso_b(body.species, body.body_type), + ), + Some( + quadruped_medium_central_spec + .mesh_ears(body.species, body.body_type), + ), + Some( + quadruped_medium_lateral_spec + .mesh_foot_lf(body.species, body.body_type), + ), + Some( + quadruped_medium_lateral_spec + .mesh_foot_rf(body.species, body.body_type), + ), + Some( + quadruped_medium_lateral_spec + .mesh_foot_lb(body.species, body.body_type), + ), + Some( + quadruped_medium_lateral_spec + .mesh_foot_rb(body.species, body.body_type), + ), + None, + None, + None, + None, + None, + ] + } + Body::BirdMedium(body) => { + let bird_medium_center_spec = BirdMediumCenterSpec::load_watched( + &mut self.manifest_indicator, + ); + let bird_medium_lateral_spec = BirdMediumLateralSpec::load_watched( + &mut self.manifest_indicator, + ); - (renderer.create_model(&mesh).unwrap(), skeleton_attr) - }, - tick, - ), - ); + [ + Some( + bird_medium_center_spec + .mesh_head(body.species, body.body_type), + ), + Some( + bird_medium_center_spec + .mesh_torso(body.species, body.body_type), + ), + Some( + bird_medium_center_spec + .mesh_tail(body.species, body.body_type), + ), + Some( + bird_medium_lateral_spec + .mesh_wing_l(body.species, body.body_type), + ), + Some( + bird_medium_lateral_spec + .mesh_wing_r(body.species, body.body_type), + ), + Some( + bird_medium_lateral_spec + .mesh_foot_l(body.species, body.body_type), + ), + Some( + bird_medium_lateral_spec + .mesh_foot_r(body.species, body.body_type), + ), + None, + None, + None, + None, + None, + None, + None, + None, + None, + ] + } + Body::FishMedium(body) => [ + Some(mesh_fish_medium_head(body.head)), + Some(mesh_fish_medium_torso(body.torso)), + Some(mesh_fish_medium_rear(body.rear)), + Some(mesh_fish_medium_tail(body.tail)), + Some(mesh_fish_medium_fin_l(body.fin_l)), + Some(mesh_fish_medium_fin_r(body.fin_r)), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ], + Body::Dragon(body) => [ + Some(mesh_dragon_head(body.head)), + Some(mesh_dragon_chest_front(body.chest_front)), + Some(mesh_dragon_chest_rear(body.chest_rear)), + Some(mesh_dragon_tail_front(body.tail_front)), + Some(mesh_dragon_tail_rear(body.tail_rear)), + Some(mesh_dragon_wing_in_l(body.wing_in_l)), + Some(mesh_dragon_wing_in_r(body.wing_in_r)), + Some(mesh_dragon_wing_out_l(body.wing_out_l)), + Some(mesh_dragon_wing_out_r(body.wing_out_r)), + Some(mesh_dragon_foot_fl(body.foot_fl)), + Some(mesh_dragon_foot_fr(body.foot_fr)), + Some(mesh_dragon_foot_bl(body.foot_bl)), + Some(mesh_dragon_foot_br(body.foot_br)), + None, + None, + None, + ], + Body::BirdSmall(body) => [ + Some(mesh_bird_small_head(body.head)), + Some(mesh_bird_small_torso(body.torso)), + Some(mesh_bird_small_wing_l(body.wing_l)), + Some(mesh_bird_small_wing_r(body.wing_r)), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ], + Body::FishSmall(body) => [ + Some(mesh_fish_small_torso(body.torso)), + Some(mesh_fish_small_tail(body.tail)), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ], + Body::BipedLarge(body) => { + let biped_large_center_spec = BipedLargeCenterSpec::load_watched( + &mut self.manifest_indicator, + ); + let biped_large_lateral_spec = BipedLargeLateralSpec::load_watched( + &mut self.manifest_indicator, + ); + + [ + Some( + biped_large_center_spec + .mesh_head(body.species, body.body_type), + ), + Some( + biped_large_center_spec + .mesh_torso_upper(body.species, body.body_type), + ), + Some( + biped_large_center_spec + .mesh_torso_lower(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_shoulder_l(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_shoulder_r(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_hand_l(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_hand_r(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_leg_l(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_leg_r(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_foot_l(body.species, body.body_type), + ), + Some( + biped_large_lateral_spec + .mesh_foot_r(body.species, body.body_type), + ), + None, + None, + None, + None, + None, + ] + } + Body::Critter(body) => { + let critter_center_spec = + CritterCenterSpec::load_watched(&mut self.manifest_indicator); + + [ + Some( + critter_center_spec.mesh_head(body.species, body.body_type), + ), + Some( + critter_center_spec + .mesh_chest(body.species, body.body_type), + ), + Some( + critter_center_spec + .mesh_feet_f(body.species, body.body_type), + ), + Some( + critter_center_spec + .mesh_feet_b(body.species, body.body_type), + ), + Some( + critter_center_spec.mesh_tail(body.species, body.body_type), + ), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ] + } + Body::Object(object) => [ + Some(mesh_object(object)), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ], + }; + + let skeleton_attr = (&body) + .try_into() + .ok() + .unwrap_or_else(::default); + + let mut mesh = Mesh::new(); + bone_meshes + .iter() + .enumerate() + .filter_map(|(i, bm)| bm.as_ref().map(|bm| (i, bm))) + .for_each(|(i, bone_mesh)| { + mesh.push_mesh_map(bone_mesh, |vert| vert.with_bone_idx(i as u8)) + }); + + (renderer.create_model(&mesh).unwrap(), skeleton_attr) + }, + tick, + )) + .0 } } - - &self.models[&key].0 } pub fn clean(&mut self, tick: u64) { diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index fe553db45a..656d884b6c 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -6,12 +6,19 @@ use common::comp::humanoid::Body; use common::{ assets::{self, watch::ReloadIndicator, Asset}, comp::{ - biped_large, bird_medium, bird_small, dragon, fish_medium, fish_small, + biped_large::{BodyType as BLBodyType, Species as BLSpecies}, + bird_medium::{BodyType as BMBodyType, Species as BMSpecies}, + bird_small, + critter::{BodyType as CBodyType, Species as CSpecies}, + dragon, fish_medium, fish_small, humanoid::{ Belt, BodyType, Chest, EyeColor, Eyebrows, Foot, Hand, Pants, Race, Shoulder, Skin, }, item::Tool, - object, quadruped_medium, quadruped_small, Item, ItemKind, + object, + quadruped_medium::{BodyType as QMBodyType, Species as QMSpecies}, + quadruped_small::{BodyType as QSBodyType, Species as QSSpecies}, + Item, ItemKind, }, figure::{DynaUnionizer, MatSegment, Material, Segment}, }; @@ -88,7 +95,9 @@ fn recolor_grey(rgb: Rgb, color: Rgb) -> Rgb { #[derive(Serialize, Deserialize)] struct VoxSpec(String, [T; 3]); -// Armor can have the color modified. +#[derive(Serialize, Deserialize)] +struct VoxSimple(String); + #[derive(Serialize, Deserialize)] struct ArmorVoxSpec { vox_spec: VoxSpec, @@ -102,6 +111,12 @@ struct SidedArmorVoxSpec { right: ArmorVoxSpec, } +#[derive(Serialize, Deserialize)] +struct MobSidedVoxSpec { + left: ArmorVoxSpec, + right: ArmorVoxSpec, +} + // All reliant on humanoid::Race and humanoid::BodyType #[derive(Serialize, Deserialize)] struct HumHeadSubSpec { @@ -540,228 +555,664 @@ pub fn mesh_lantern() -> Mesh { } ///////// -pub fn mesh_quadruped_small_head(head: quadruped_small::Head) -> Mesh { - load_mesh( - match head { - quadruped_small::Head::Default => "npc.pig_purple.head", - }, - Vec3::new(-6.0, 4.5, 3.0), - ) +#[derive(Serialize, Deserialize)] +pub struct QuadrupedSmallCentralSpec(HashMap<(QSSpecies, QSBodyType), SidedQSCentralVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedQSCentralVoxSpec { + head: QuadrupedSmallCentralSubSpec, + chest: QuadrupedSmallCentralSubSpec, +} +#[derive(Serialize, Deserialize)] +struct QuadrupedSmallCentralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + central: VoxSimple, } -pub fn mesh_quadruped_small_chest(chest: quadruped_small::Chest) -> Mesh { - load_mesh( - match chest { - quadruped_small::Chest::Default => "npc.pig_purple.chest", - }, - Vec3::new(-5.0, 4.5, 0.0), - ) +#[derive(Serialize, Deserialize)] +pub struct QuadrupedSmallLateralSpec(HashMap<(QSSpecies, QSBodyType), SidedQSLateralVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedQSLateralVoxSpec { + left_front: QuadrupedSmallLateralSubSpec, + right_front: QuadrupedSmallLateralSubSpec, + left_back: QuadrupedSmallLateralSubSpec, + right_back: QuadrupedSmallLateralSubSpec, +} +#[derive(Serialize, Deserialize)] +struct QuadrupedSmallLateralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + lateral: VoxSimple, } -pub fn mesh_quadruped_small_leg_lf(leg_l: quadruped_small::LegL) -> Mesh { - load_mesh( - match leg_l { - quadruped_small::LegL::Default => "npc.pig_purple.leg_l", - }, - Vec3::new(0.0, -1.0, -1.5), - ) +impl Asset for QuadrupedSmallCentralSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing quad_small central spec")) + } } -pub fn mesh_quadruped_small_leg_rf(leg_r: quadruped_small::LegR) -> Mesh { - load_mesh( - match leg_r { - quadruped_small::LegR::Default => "npc.pig_purple.leg_r", - }, - Vec3::new(0.0, -1.0, -1.5), - ) +impl Asset for QuadrupedSmallLateralSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing quadruped small lateral spec")) + } } -pub fn mesh_quadruped_small_leg_lb(leg_l: quadruped_small::LegL) -> Mesh { - load_mesh( - match leg_l { - quadruped_small::LegL::Default => "npc.pig_purple.leg_l", - }, - Vec3::new(0.0, -1.0, -1.5), - ) +impl QuadrupedSmallCentralSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.quadruped_small_central_manifest", indicator) + .unwrap() + } + pub fn mesh_head(&self, species: QSSpecies, body_type: QSBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No head specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.head.central.0); + + generate_mesh(¢ral, Vec3::from(spec.head.offset)) + } + pub fn mesh_chest(&self, species: QSSpecies, body_type: QSBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No chest specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.chest.central.0); + + generate_mesh(¢ral, Vec3::from(spec.chest.offset)) + } } -pub fn mesh_quadruped_small_leg_rb(leg_r: quadruped_small::LegR) -> Mesh { - load_mesh( - match leg_r { - quadruped_small::LegR::Default => "npc.pig_purple.leg_r", - }, - Vec3::new(0.0, -1.0, -1.5), - ) +impl QuadrupedSmallLateralSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.quadruped_small_lateral_manifest", indicator) + .unwrap() + } + + pub fn mesh_foot_lf(&self, species: QSSpecies, body_type: QSBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.left_front.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.left_front.offset)) + } + pub fn mesh_foot_rf(&self, species: QSSpecies, body_type: QSBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.right_front.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.right_front.offset)) + } + pub fn mesh_foot_lb(&self, species: QSSpecies, body_type: QSBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.left_back.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.left_back.offset)) + } + pub fn mesh_foot_rb(&self, species: QSSpecies, body_type: QSBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.right_back.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.right_back.offset)) + } } + ////// -pub fn mesh_quadruped_medium_head_upper( - upper_head: quadruped_medium::HeadUpper, -) -> Mesh { - load_mesh( - match upper_head { - quadruped_medium::HeadUpper::Default => "npc.wolf.head_upper", - }, - Vec3::new(-7.0, -6.0, -5.5), - ) +#[derive(Serialize, Deserialize)] +pub struct QuadrupedMediumCentralSpec(HashMap<(QMSpecies, QMBodyType), SidedQMCentralVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedQMCentralVoxSpec { + upper: QuadrupedMediumCentralSubSpec, + lower: QuadrupedMediumCentralSubSpec, + jaw: QuadrupedMediumCentralSubSpec, + ears: QuadrupedMediumCentralSubSpec, + torso_f: QuadrupedMediumCentralSubSpec, + torso_b: QuadrupedMediumCentralSubSpec, + tail: QuadrupedMediumCentralSubSpec, +} +#[derive(Serialize, Deserialize)] +struct QuadrupedMediumCentralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + central: VoxSimple, } -pub fn mesh_quadruped_medium_jaw(jaw: quadruped_medium::Jaw) -> Mesh { - load_mesh( - match jaw { - quadruped_medium::Jaw::Default => "npc.wolf.jaw", - }, - Vec3::new(-3.0, -3.0, -2.5), - ) +#[derive(Serialize, Deserialize)] +pub struct QuadrupedMediumLateralSpec(HashMap<(QMSpecies, QMBodyType), SidedQMLateralVoxSpec>); +#[derive(Serialize, Deserialize)] +struct SidedQMLateralVoxSpec { + left_front: QuadrupedMediumLateralSubSpec, + right_front: QuadrupedMediumLateralSubSpec, + left_back: QuadrupedMediumLateralSubSpec, + right_back: QuadrupedMediumLateralSubSpec, +} +#[derive(Serialize, Deserialize)] +struct QuadrupedMediumLateralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + lateral: VoxSimple, } -pub fn mesh_quadruped_medium_head_lower( - head_lower: quadruped_medium::HeadLower, -) -> Mesh { - load_mesh( - match head_lower { - quadruped_medium::HeadLower::Default => "npc.wolf.head_lower", - }, - Vec3::new(-7.0, -6.0, -5.5), - ) +impl Asset for QuadrupedMediumCentralSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing quadruped medium central spec")) + } } -pub fn mesh_quadruped_medium_tail(tail: quadruped_medium::Tail) -> Mesh { - load_mesh( - match tail { - quadruped_medium::Tail::Default => "npc.wolf.tail", - }, - Vec3::new(-2.0, -12.0, -5.0), - ) +impl Asset for QuadrupedMediumLateralSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing quadruped medium lateral spec")) + } } -pub fn mesh_quadruped_medium_torso_back( - torso_back: quadruped_medium::TorsoBack, -) -> Mesh { - load_mesh( - match torso_back { - quadruped_medium::TorsoBack::Default => "npc.wolf.torso_back", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) +impl QuadrupedMediumCentralSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.quadruped_medium_central_manifest", indicator) + .unwrap() + } + + pub fn mesh_head_upper( + &self, + species: QMSpecies, + body_type: QMBodyType, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No upper head specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.upper.central.0); + + generate_mesh(¢ral, Vec3::from(spec.upper.offset)) + } + pub fn mesh_head_lower( + &self, + species: QMSpecies, + body_type: QMBodyType, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No lower head specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.lower.central.0); + + generate_mesh(¢ral, Vec3::from(spec.lower.offset)) + } + pub fn mesh_jaw(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No jaw specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.jaw.central.0); + + generate_mesh(¢ral, Vec3::from(spec.jaw.offset)) + } + pub fn mesh_ears(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No ears 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.ears.central.0); + + generate_mesh(¢ral, Vec3::from(spec.ears.offset)) + } + pub fn mesh_torso_f(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No torso specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.torso_f.central.0); + + generate_mesh(¢ral, Vec3::from(spec.torso_f.offset)) + } + pub fn mesh_torso_b(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No torso specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.torso_b.central.0); + + generate_mesh(¢ral, Vec3::from(spec.torso_b.offset)) + } + pub fn mesh_tail(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No tail specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let central = graceful_load_segment(&spec.tail.central.0); + + generate_mesh(¢ral, Vec3::from(spec.tail.offset)) + } } -pub fn mesh_quadruped_medium_torso_mid( - torso_mid: quadruped_medium::TorsoMid, -) -> Mesh { - load_mesh( - match torso_mid { - quadruped_medium::TorsoMid::Default => "npc.wolf.torso_mid", - }, - Vec3::new(-8.0, -5.5, -6.0), - ) +impl QuadrupedMediumLateralSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.quadruped_medium_lateral_manifest", indicator) + .unwrap() + } + + pub fn mesh_foot_lf(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.left_front.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.left_front.offset)) + } + + pub fn mesh_foot_rf(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.right_front.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.right_front.offset)) + } + pub fn mesh_foot_lb(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.left_back.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.left_back.offset)) + } + pub fn mesh_foot_rb(&self, species: QMSpecies, body_type: QMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.right_back.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.right_back.offset)) + } } -pub fn mesh_quadruped_medium_ears(ears: quadruped_medium::Ears) -> Mesh { - load_mesh( - match ears { - quadruped_medium::Ears::Default => "npc.wolf.ears", - }, - Vec3::new(-4.0, -1.0, -1.0), - ) +//// +#[derive(Serialize, Deserialize)] +pub struct BirdMediumCenterSpec(HashMap<(BMSpecies, BMBodyType), SidedBMCenterVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedBMCenterVoxSpec { + head: BirdMediumCenterSubSpec, + torso: BirdMediumCenterSubSpec, + tail: BirdMediumCenterSubSpec, +} +#[derive(Serialize, Deserialize)] +struct BirdMediumCenterSubSpec { + offset: [f32; 3], // Should be relative to initial origin + center: VoxSimple, } -pub fn mesh_quadruped_medium_foot_lf(foot_lf: quadruped_medium::FootLF) -> Mesh { - load_mesh( - match foot_lf { - quadruped_medium::FootLF::Default => "npc.wolf.foot_lf", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) +#[derive(Serialize, Deserialize)] +pub struct BirdMediumLateralSpec(HashMap<(BMSpecies, BMBodyType), SidedBMLateralVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedBMLateralVoxSpec { + wing_l: BirdMediumLateralSubSpec, + wing_r: BirdMediumLateralSubSpec, + foot_l: BirdMediumLateralSubSpec, + foot_r: BirdMediumLateralSubSpec, +} +#[derive(Serialize, Deserialize)] +struct BirdMediumLateralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + lateral: VoxSimple, } -pub fn mesh_quadruped_medium_foot_rf(foot_rf: quadruped_medium::FootRF) -> Mesh { - load_mesh( - match foot_rf { - quadruped_medium::FootRF::Default => "npc.wolf.foot_rf", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) +impl Asset for BirdMediumCenterSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing bird medium center spec")) + } } -pub fn mesh_quadruped_medium_foot_lb(foot_lb: quadruped_medium::FootLB) -> Mesh { - load_mesh( - match foot_lb { - quadruped_medium::FootLB::Default => "npc.wolf.foot_lb", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) +impl Asset for BirdMediumLateralSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing bird medium lateral spec")) + } } -pub fn mesh_quadruped_medium_foot_rb(foot_rb: quadruped_medium::FootRB) -> Mesh { - load_mesh( - match foot_rb { - quadruped_medium::FootRB::Default => "npc.wolf.foot_rb", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) +impl BirdMediumCenterSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.bird_medium_center_manifest", indicator) + .unwrap() + } + + pub fn mesh_head(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No head specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.head.center.0); + + generate_mesh(¢er, Vec3::from(spec.head.offset)) + } + pub fn mesh_torso(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No torso specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.torso.center.0); + + generate_mesh(¢er, Vec3::from(spec.torso.offset)) + } + pub fn mesh_tail(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No tail specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.tail.center.0); + + generate_mesh(¢er, Vec3::from(spec.tail.offset)) + } +} +impl BirdMediumLateralSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.bird_medium_lateral_manifest", indicator) + .unwrap() + } + + pub fn mesh_wing_l(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No wing specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.wing_l.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.wing_l.offset)) + } + pub fn mesh_wing_r(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No wing specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.wing_r.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.wing_r.offset)) + } + pub fn mesh_foot_l(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.foot_l.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.foot_l.offset)) + } + pub fn mesh_foot_r(&self, species: BMSpecies, body_type: BMBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.foot_r.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.foot_r.offset)) + } } //// -pub fn mesh_bird_medium_head(head: bird_medium::Head) -> Mesh { - load_mesh( - match head { - bird_medium::Head::Default => "npc.duck_m.head", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) +#[derive(Serialize, Deserialize)] +pub struct CritterCenterSpec(HashMap<(CSpecies, CBodyType), SidedCCenterVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedCCenterVoxSpec { + head: CritterCenterSubSpec, + chest: CritterCenterSubSpec, + feet_f: CritterCenterSubSpec, + feet_b: CritterCenterSubSpec, + tail: CritterCenterSubSpec, +} +#[derive(Serialize, Deserialize)] +struct CritterCenterSubSpec { + offset: [f32; 3], // Should be relative to initial origin + center: VoxSimple, } -pub fn mesh_bird_medium_torso(torso: bird_medium::Torso) -> Mesh { - load_mesh( - match torso { - bird_medium::Torso::Default => "npc.duck_m.body", - }, - Vec3::new(-8.0, -5.5, -6.0), - ) +impl Asset for CritterCenterSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing critter center spec")) + } } -pub fn mesh_bird_medium_tail(tail: bird_medium::Tail) -> Mesh { - load_mesh( - match tail { - bird_medium::Tail::Default => "npc.duck_m.tail", - }, - Vec3::new(-4.0, -1.0, -1.0), - ) -} +impl CritterCenterSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.critter_center_manifest", indicator).unwrap() + } -pub fn mesh_bird_medium_wing_l(wing_l: bird_medium::WingL) -> Mesh { - load_mesh( - match wing_l { - bird_medium::WingL::Default => "npc.duck_m.wing", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) -} + pub fn mesh_head(&self, species: CSpecies, body_type: CBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No head specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.head.center.0); -pub fn mesh_bird_medium_wing_r(wing_r: bird_medium::WingR) -> Mesh { - load_mesh( - match wing_r { - bird_medium::WingR::Default => "npc.duck_m.wing", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) -} + generate_mesh(¢er, Vec3::from(spec.head.offset)) + } + pub fn mesh_chest(&self, species: CSpecies, body_type: CBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No chest specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.chest.center.0); -pub fn mesh_bird_medium_leg_l(leg_l: bird_medium::LegL) -> Mesh { - load_mesh( - match leg_l { - bird_medium::LegL::Default => "npc.duck_m.leg_l", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) -} + generate_mesh(¢er, Vec3::from(spec.chest.offset)) + } + pub fn mesh_feet_f(&self, species: CSpecies, body_type: CBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No feet specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.feet_f.center.0); -pub fn mesh_bird_medium_leg_r(leg_r: bird_medium::LegR) -> Mesh { - load_mesh( - match leg_r { - bird_medium::LegR::Default => "npc.duck_m.leg_r", - }, - Vec3::new(-2.5, -4.0, -2.5), - ) + generate_mesh(¢er, Vec3::from(spec.feet_f.offset)) + } + pub fn mesh_feet_b(&self, species: CSpecies, body_type: CBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No feet specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.feet_b.center.0); + + generate_mesh(¢er, Vec3::from(spec.feet_b.offset)) + } + pub fn mesh_tail(&self, species: CSpecies, body_type: CBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No tail specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.tail.center.0); + + generate_mesh(¢er, Vec3::from(spec.tail.offset)) + } } //// pub fn mesh_fish_medium_head(head: fish_medium::Head) -> Mesh { @@ -817,7 +1268,7 @@ pub fn mesh_fish_medium_fin_r(fin_r: fish_medium::FinR) -> Mesh Vec3::new(-7.0, -6.0, -6.0), ) } -//// + pub fn mesh_dragon_head(head: dragon::Head) -> Mesh { load_mesh( match head { @@ -990,105 +1441,255 @@ pub fn mesh_fish_small_tail(tail: fish_small::Tail) -> Mesh { ) } //// -pub fn mesh_biped_large_head(head: biped_large::Head) -> Mesh { - load_mesh( - match head { - biped_large::Head::Default => "npc.knight.head", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) +#[derive(Serialize, Deserialize)] +pub struct BipedLargeCenterSpec(HashMap<(BLSpecies, BLBodyType), SidedBLCenterVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedBLCenterVoxSpec { + head: BipedLargeCenterSubSpec, + torso_upper: BipedLargeCenterSubSpec, + torso_lower: BipedLargeCenterSubSpec, +} +#[derive(Serialize, Deserialize)] +struct BipedLargeCenterSubSpec { + offset: [f32; 3], // Should be relative to initial origin + center: VoxSimple, } -pub fn mesh_biped_large_upper_torso(upper_torso: biped_large::UpperTorso) -> Mesh { - load_mesh( - match upper_torso { - biped_large::UpperTorso::Default => "npc.knight.upper_torso", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) +#[derive(Serialize, Deserialize)] +pub struct BipedLargeLateralSpec(HashMap<(BLSpecies, BLBodyType), SidedBLLateralVoxSpec>); + +#[derive(Serialize, Deserialize)] +struct SidedBLLateralVoxSpec { + shoulder_l: BipedLargeLateralSubSpec, + shoulder_r: BipedLargeLateralSubSpec, + hand_l: BipedLargeLateralSubSpec, + hand_r: BipedLargeLateralSubSpec, + leg_l: BipedLargeLateralSubSpec, + leg_r: BipedLargeLateralSubSpec, + foot_l: BipedLargeLateralSubSpec, + foot_r: BipedLargeLateralSubSpec, +} +#[derive(Serialize, Deserialize)] +struct BipedLargeLateralSubSpec { + offset: [f32; 3], // Should be relative to initial origin + lateral: VoxSimple, } -pub fn mesh_biped_large_lower_torso(lower_torso: biped_large::LowerTorso) -> Mesh { - load_mesh( - match lower_torso { - biped_large::LowerTorso::Default => "npc.knight.lower_torso", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) +impl Asset for BipedLargeCenterSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing biped large center spec")) + } } -pub fn mesh_biped_large_shoulder_l(shoulder_l: biped_large::ShoulderL) -> Mesh { - load_mesh( - match shoulder_l { - biped_large::ShoulderL::Default => "npc.knight.shoulder_l", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) +impl Asset for BipedLargeLateralSpec { + const ENDINGS: &'static [&'static str] = &["ron"]; + fn parse(buf_reader: BufReader) -> Result { + Ok(ron::de::from_reader(buf_reader).expect("Error parsing biped large lateral spec")) + } } -pub fn mesh_biped_large_shoulder_r(shoulder_r: biped_large::ShoulderR) -> Mesh { - load_mesh( - match shoulder_r { - biped_large::ShoulderR::Default => "npc.knight.shoulder_r", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) -} +impl BipedLargeCenterSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.biped_large_center_manifest", indicator) + .unwrap() + } -pub fn mesh_biped_large_hand_l(hand_l: biped_large::HandL) -> Mesh { - load_mesh( - match hand_l { - biped_large::HandL::Default => "npc.knight.hand_l", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) -} + pub fn mesh_head(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No head specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.head.center.0); -pub fn mesh_biped_large_hand_r(hand_r: biped_large::HandR) -> Mesh { - load_mesh( - match hand_r { - biped_large::HandR::Default => "npc.knight.hand_r", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) -} + generate_mesh(¢er, Vec3::from(spec.head.offset)) + } + pub fn mesh_torso_upper( + &self, + species: BLSpecies, + body_type: BLBodyType, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No torso upper specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.torso_upper.center.0); -pub fn mesh_biped_large_leg_l(leg_l: biped_large::LegL) -> Mesh { - load_mesh( - match leg_l { - biped_large::LegL::Default => "npc.knight.leg_l", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) -} + generate_mesh(¢er, Vec3::from(spec.torso_upper.offset)) + } + pub fn mesh_torso_lower( + &self, + species: BLSpecies, + body_type: BLBodyType, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No torso lower specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let center = graceful_load_segment(&spec.torso_lower.center.0); -pub fn mesh_biped_large_leg_r(leg_r: biped_large::LegR) -> Mesh { - load_mesh( - match leg_r { - biped_large::LegR::Default => "npc.knight.leg_r", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) + generate_mesh(¢er, Vec3::from(spec.torso_lower.offset)) + } } +impl BipedLargeLateralSpec { + pub fn load_watched(indicator: &mut ReloadIndicator) -> Arc { + assets::load_watched::("voxygen.voxel.biped_large_lateral_manifest", indicator) + .unwrap() + } -pub fn mesh_biped_large_foot_l(foot_l: biped_large::FootL) -> Mesh { - load_mesh( - match foot_l { - biped_large::FootL::Default => "npc.knight.foot_l", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) + pub fn mesh_shoulder_l( + &self, + species: BLSpecies, + body_type: BLBodyType, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No shoulder specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.shoulder_l.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.shoulder_l.offset)) + } + + pub fn mesh_shoulder_r( + &self, + species: BLSpecies, + body_type: BLBodyType, + ) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No shoulder specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.shoulder_r.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.shoulder_r.offset)) + } + + pub fn mesh_hand_l(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No hand specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.hand_l.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.hand_l.offset)) + } + + pub fn mesh_hand_r(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No hand specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.hand_r.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.hand_r.offset)) + } + pub fn mesh_leg_l(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.leg_l.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.leg_l.offset)) + } + + pub fn mesh_leg_r(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.leg_r.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.leg_r.offset)) + } + pub fn mesh_foot_l(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.foot_l.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.foot_l.offset)) + } + + pub fn mesh_foot_r(&self, species: BLSpecies, body_type: BLBodyType) -> Mesh { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No foot specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + } + }; + let lateral = graceful_load_segment(&spec.foot_r.lateral.0); + + generate_mesh(&lateral, Vec3::from(spec.foot_r.offset)) + } } - -pub fn mesh_biped_large_foot_r(foot_r: biped_large::FootR) -> Mesh { - load_mesh( - match foot_r { - biped_large::FootR::Default => "npc.knight.foot_r", - }, - Vec3::new(-7.0, -6.0, -6.0), - ) -} - //// pub fn mesh_object(obj: object::Body) -> Mesh { use object::Body; diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index b706be5183..0ea5b68ac1 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -7,10 +7,10 @@ pub use load::load_mesh; // TODO: Don't make this public. use crate::{ anim::{ self, biped_large::BipedLargeSkeleton, bird_medium::BirdMediumSkeleton, - bird_small::BirdSmallSkeleton, character::CharacterSkeleton, dragon::DragonSkeleton, - fish_medium::FishMediumSkeleton, fish_small::FishSmallSkeleton, object::ObjectSkeleton, - quadruped_medium::QuadrupedMediumSkeleton, quadruped_small::QuadrupedSmallSkeleton, - Animation, Skeleton, + bird_small::BirdSmallSkeleton, character::CharacterSkeleton, critter::CritterSkeleton, + dragon::DragonSkeleton, fish_medium::FishMediumSkeleton, fish_small::FishSmallSkeleton, + object::ObjectSkeleton, quadruped_medium::QuadrupedMediumSkeleton, + quadruped_small::QuadrupedSmallSkeleton, Animation, Skeleton, }, render::{Consts, FigureBoneData, FigureLocals, Globals, Light, Renderer, Shadow}, scene::camera::{Camera, CameraMode}, @@ -34,11 +34,21 @@ const DAMAGE_FADE_COEFFICIENT: f64 = 5.0; pub struct FigureMgr { model_cache: FigureModelCache, + critter_model_cache: FigureModelCache, + quadruped_small_model_cache: FigureModelCache, + quadruped_medium_model_cache: FigureModelCache, + bird_medium_model_cache: FigureModelCache, + bird_small_model_cache: FigureModelCache, + dragon_model_cache: FigureModelCache, + fish_medium_model_cache: FigureModelCache, + fish_small_model_cache: FigureModelCache, + biped_large_model_cache: FigureModelCache, character_states: HashMap>, quadruped_small_states: HashMap>, quadruped_medium_states: HashMap>, bird_medium_states: HashMap>, fish_medium_states: HashMap>, + critter_states: HashMap>, dragon_states: HashMap>, bird_small_states: HashMap>, fish_small_states: HashMap>, @@ -50,11 +60,21 @@ impl FigureMgr { pub fn new() -> Self { Self { model_cache: FigureModelCache::new(), + critter_model_cache: FigureModelCache::new(), + quadruped_small_model_cache: FigureModelCache::new(), + quadruped_medium_model_cache: FigureModelCache::new(), + bird_medium_model_cache: FigureModelCache::new(), + bird_small_model_cache: FigureModelCache::new(), + dragon_model_cache: FigureModelCache::new(), + fish_medium_model_cache: FigureModelCache::new(), + fish_small_model_cache: FigureModelCache::new(), + biped_large_model_cache: FigureModelCache::new(), character_states: HashMap::new(), quadruped_small_states: HashMap::new(), quadruped_medium_states: HashMap::new(), bird_medium_states: HashMap::new(), fish_medium_states: HashMap::new(), + critter_states: HashMap::new(), dragon_states: HashMap::new(), bird_small_states: HashMap::new(), fish_small_states: HashMap::new(), @@ -65,6 +85,15 @@ impl FigureMgr { pub fn clean(&mut self, tick: u64) { self.model_cache.clean(tick); + self.critter_model_cache.clean(tick); + self.quadruped_small_model_cache.clean(tick); + self.quadruped_medium_model_cache.clean(tick); + self.bird_medium_model_cache.clean(tick); + self.bird_small_model_cache.clean(tick); + self.dragon_model_cache.clean(tick); + self.fish_medium_model_cache.clean(tick); + self.fish_small_model_cache.clean(tick); + self.biped_large_model_cache.clean(tick); } pub fn maintain(&mut self, renderer: &mut Renderer, client: &Client, camera: &Camera) { @@ -117,6 +146,9 @@ impl FigureMgr { Body::FishMedium(_) => { self.fish_medium_states.remove(&entity); } + Body::Critter(_) => { + self.critter_states.remove(&entity); + } Body::Dragon(_) => { self.dragon_states.remove(&entity); } @@ -161,6 +193,11 @@ impl FigureMgr { .get_mut(&entity) .map(|state| state.visible = false); } + Body::Critter(_) => { + self.critter_states + .get_mut(&entity) + .map(|state| state.visible = false); + } Body::Dragon(_) => { self.dragon_states .get_mut(&entity) @@ -216,6 +253,9 @@ impl FigureMgr { .fish_medium_states .get(&entity) .map(|state| state.lpindex), + Body::Critter(_) => { + self.critter_states.get(&entity).map(|state| state.lpindex) + } Body::Dragon(_) => { self.dragon_states.get(&entity).map(|state| state.lpindex) } @@ -270,6 +310,12 @@ impl FigureMgr { state.visible = false }); } + Body::Critter(_) => { + self.critter_states.get_mut(&entity).map(|state| { + state.lpindex = lpindex; + state.visible = false + }); + } Body::Dragon(_) => { self.dragon_states.get_mut(&entity).map(|state| { state.lpindex = lpindex; @@ -316,18 +362,6 @@ impl FigureMgr { let scale = scale.map(|s| s.0).unwrap_or(1.0); - let skeleton_attr = &self - .model_cache - .get_or_create_model( - renderer, - *body, - stats.map(|s| &s.equipment), - tick, - CameraMode::default(), - None, - ) - .1; - let mut movement_animation_rate = 1.0; let mut action_animation_rate = 1.0; @@ -348,6 +382,18 @@ impl FigureMgr { match body { Body::Humanoid(_) => { + let skeleton_attr = &self + .model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .character_states .entry(entity) @@ -486,6 +532,18 @@ impl FigureMgr { ); } Body::QuadrupedSmall(_) => { + let skeleton_attr = &self + .quadruped_small_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .quadruped_small_states .entry(entity) @@ -545,6 +603,18 @@ impl FigureMgr { ); } Body::QuadrupedMedium(_) => { + let skeleton_attr = &self + .quadruped_medium_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .quadruped_medium_states .entry(entity) @@ -604,6 +674,18 @@ impl FigureMgr { ); } Body::BirdMedium(_) => { + let skeleton_attr = &self + .bird_medium_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .bird_medium_states .entry(entity) @@ -661,6 +743,18 @@ impl FigureMgr { ); } Body::FishMedium(_) => { + let skeleton_attr = &self + .fish_medium_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .fish_medium_states .entry(entity) @@ -718,6 +812,18 @@ impl FigureMgr { ); } Body::Dragon(_) => { + let skeleton_attr = &self + .dragon_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .dragon_states .entry(entity) @@ -774,7 +880,88 @@ impl FigureMgr { true, ); } + Body::Critter(_) => { + let skeleton_attr = &self + .critter_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + + let state = self + .critter_states + .entry(entity) + .or_insert_with(|| FigureState::new(renderer, CritterSkeleton::new())); + + let (character, last_character) = match (character, last_character) { + (Some(c), Some(l)) => (c, l), + _ => continue, + }; + + if !character.is_same_movement(&last_character.0) { + state.movement_time = 0.0; + } + + let target_base = match character.movement { + Stand => anim::critter::IdleAnimation::update_skeleton( + &CritterSkeleton::new(), + time, + state.movement_time, + &mut movement_animation_rate, + skeleton_attr, + ), + Run => anim::critter::RunAnimation::update_skeleton( + &CritterSkeleton::new(), + (vel.0.magnitude(), time), + state.movement_time, + &mut movement_animation_rate, + skeleton_attr, + ), + Jump => anim::critter::JumpAnimation::update_skeleton( + &CritterSkeleton::new(), + (vel.0.magnitude(), time), + state.movement_time, + &mut movement_animation_rate, + skeleton_attr, + ), + + // TODO! + _ => state.skeleton_mut().clone(), + }; + + state.skeleton.interpolate(&target_base, dt); + state.update( + renderer, + pos.0, + vel.0, + ori.0, + scale, + col, + dt, + movement_animation_rate, + action_animation_rate, + lpindex, + true, + ); + } Body::BirdSmall(_) => { + let skeleton_attr = &self + .bird_small_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .bird_small_states .entry(entity) @@ -832,6 +1019,18 @@ impl FigureMgr { ); } Body::FishSmall(_) => { + let skeleton_attr = &self + .fish_small_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .fish_small_states .entry(entity) @@ -889,6 +1088,18 @@ impl FigureMgr { ); } Body::BipedLarge(_) => { + let skeleton_attr = &self + .biped_large_model_cache + .get_or_create_model( + renderer, + *body, + stats.map(|s| &s.equipment), + tick, + CameraMode::default(), + None, + ) + .1; + let state = self .biped_large_states .entry(entity) @@ -980,6 +1191,8 @@ impl FigureMgr { .retain(|entity, _| ecs.entities().is_alive(*entity)); self.fish_medium_states .retain(|entity, _| ecs.entities().is_alive(*entity)); + self.critter_states + .retain(|entity, _| ecs.entities().is_alive(*entity)); self.dragon_states .retain(|entity, _| ecs.entities().is_alive(*entity)); self.bird_small_states @@ -1021,72 +1234,219 @@ impl FigureMgr { // Don't render dead entities .filter(|(_, _, _, _, stats, _)| stats.map_or(true, |s| !s.is_dead)) { - if let Some((locals, bone_consts, visible)) = match body { - Body::Humanoid(_) => self - .character_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::QuadrupedSmall(_) => self - .quadruped_small_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::QuadrupedMedium(_) => self - .quadruped_medium_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::BirdMedium(_) => self - .bird_medium_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::FishMedium(_) => self - .fish_medium_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::Dragon(_) => self - .dragon_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::BirdSmall(_) => self - .bird_small_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::FishSmall(_) => self - .fish_small_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::BipedLarge(_) => self - .biped_large_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - Body::Object(_) => self - .object_states - .get(&entity) - .map(|state| (state.locals(), state.bone_consts(), state.visible)), - } { - if !visible { - continue; - } + let is_player = entity == client.entity(); + let player_camera_mode = if is_player { + camera.get_mode() + } else { + CameraMode::default() + }; + let stats = stats.map(|s| &s.equipment); + let character_state = if is_player { character_state } else { None }; - let is_player = entity == client.entity(); - - let player_camera_mode = if is_player { - camera.get_mode() - } else { - CameraMode::default() - }; - - let model = &self - .model_cache - .get_or_create_model( - renderer, - *body, - stats.map(|s| &s.equipment), - tick, - player_camera_mode, - if is_player { character_state } else { None }, + let FigureMgr { + model_cache, + critter_model_cache, + quadruped_small_model_cache, + quadruped_medium_model_cache, + bird_medium_model_cache, + bird_small_model_cache, + dragon_model_cache, + fish_medium_model_cache, + fish_small_model_cache, + biped_large_model_cache, + character_states, + quadruped_small_states, + quadruped_medium_states, + bird_medium_states, + fish_medium_states, + critter_states, + dragon_states, + bird_small_states, + fish_small_states, + biped_large_states, + object_states, + } = self; + if let Some((locals, bone_consts, model)) = match body { + Body::Humanoid(_) => character_states + .get(&entity) + .filter(|state| state.visible) + .map(|state| { + ( + state.locals(), + state.bone_consts(), + &model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::QuadrupedSmall(_) => quadruped_small_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &quadruped_small_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, ) - .0; - + }), + Body::QuadrupedMedium(_) => quadruped_medium_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &quadruped_medium_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::BirdMedium(_) => bird_medium_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &bird_medium_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::FishMedium(_) => fish_medium_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &fish_medium_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::Critter(_) => critter_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &critter_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::Dragon(_) => dragon_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &dragon_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::BirdSmall(_) => bird_small_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &bird_small_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::FishSmall(_) => fish_small_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &fish_small_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::BipedLarge(_) => biped_large_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &biped_large_model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + Body::Object(_) => object_states.get(&entity).map(|state| { + ( + state.locals(), + state.bone_consts(), + &model_cache + .get_or_create_model( + renderer, + *body, + stats, + tick, + player_camera_mode, + character_state, + ) + .0, + ) + }), + } { renderer.render_figure(model, globals, locals, bone_consts, lights, shadows); } else { trace!("Body has no saved figure"); @@ -1101,6 +1461,7 @@ impl FigureMgr { + self.quadruped_medium_states.len() + self.bird_medium_states.len() + self.fish_medium_states.len() + + self.critter_states.len() + self.dragon_states.len() + self.bird_small_states.len() + self.fish_small_states.len() @@ -1129,11 +1490,16 @@ impl FigureMgr { .filter(|(_, c)| c.visible) .count() + self - .fish_medium_states + .critter_states .iter() .filter(|(_, c)| c.visible) .count() + self.dragon_states.iter().filter(|(_, c)| c.visible).count() + + self + .fish_medium_states + .iter() + .filter(|(_, c)| c.visible) + .count() + self .bird_small_states .iter() diff --git a/voxygen/src/scene/mod.rs b/voxygen/src/scene/mod.rs index e571e175c7..231c5516f8 100644 --- a/voxygen/src/scene/mod.rs +++ b/voxygen/src/scene/mod.rs @@ -8,7 +8,7 @@ use self::{ terrain::Terrain, }; use crate::{ - anim::SkeletonAttr, + anim::character::SkeletonAttr, audio::{sfx::SfxMgr, AudioFrontend}, render::{ create_pp_mesh, create_skybox_mesh, Consts, Globals, Light, Model, PostProcessLocals, diff --git a/world/src/block/mod.rs b/world/src/block/mod.rs index dfdf535277..27db5f686f 100644 --- a/world/src/block/mod.rs +++ b/world/src/block/mod.rs @@ -599,11 +599,20 @@ pub fn block_from_structure( Lerp::lerp(Rgb::new(0.0, 60.0, 50.0), Rgb::new(30.0, 100.0, 10.0), lerp) .map(|e| e as u8), )), - StructureBlock::PalmLeaves => Some(Block::new( + StructureBlock::PalmLeavesInner => Some(Block::new( BlockKind::Leaves, Lerp::lerp( - Rgb::new(0.0, 108.0, 113.0), - Rgb::new(30.0, 156.0, 10.0), + Rgb::new(61.0, 166.0, 43.0), + Rgb::new(29.0, 130.0, 32.0), + lerp, + ) + .map(|e| e as u8), + )), + StructureBlock::PalmLeavesOuter => Some(Block::new( + BlockKind::Leaves, + Lerp::lerp( + Rgb::new(62.0, 171.0, 38.0), + Rgb::new(45.0, 171.0, 65.0), lerp, ) .map(|e| e as u8),