From 21b526856d364fd3af2ba4f42ce1bf95a7e9a766 Mon Sep 17 00:00:00 2001 From: Snowram Date: Mon, 14 Jun 2021 01:39:43 +0200 Subject: [PATCH 1/7] Adds new species --- assets/common/npc_names.ron | 14 +- .../voxel/biped_large_central_manifest.ron | 52 +++++++ .../voxel/biped_large_lateral_manifest.ron | 68 +++++++++ .../voxel/bird_medium_central_manifest.ron | 18 +-- .../voxel/bird_medium_lateral_manifest.ron | 16 +-- .../voxel/npc/cultist_warlord/male/foot_l.vox | Bin 0 -> 1748 bytes .../voxel/npc/cultist_warlord/male/foot_r.vox | Bin 0 -> 1748 bytes .../voxel/npc/cultist_warlord/male/hand_l.vox | Bin 0 -> 2008 bytes .../voxel/npc/cultist_warlord/male/hand_r.vox | Bin 0 -> 2008 bytes .../voxel/npc/cultist_warlord/male/head.vox | Bin 0 -> 5352 bytes .../voxel/npc/cultist_warlord/male/leg_l.vox | Bin 0 -> 1304 bytes .../voxel/npc/cultist_warlord/male/leg_r.vox | Bin 0 -> 1304 bytes .../npc/cultist_warlord/male/shoulder_l.vox | Bin 0 -> 2304 bytes .../npc/cultist_warlord/male/shoulder_r.vox | Bin 0 -> 2304 bytes .../npc/cultist_warlord/male/torso_lower.vox | Bin 0 -> 2848 bytes .../npc/cultist_warlord/male/torso_upper.vox | Bin 0 -> 4736 bytes assets/voxygen/voxel/npc/duck/female/head.vox | Bin 1216 -> 1408 bytes .../voxygen/voxel/npc/duck/female/leg_r.vox | Bin 1128 -> 1184 bytes assets/voxygen/voxel/npc/duck/female/tail.vox | Bin 1156 -> 1216 bytes .../voxygen/voxel/npc/duck/female/torso.vox | Bin 1576 -> 1944 bytes assets/voxygen/voxel/npc/duck/female/wing.vox | Bin 1144 -> 1184 bytes assets/voxygen/voxel/npc/duck/male/head.vox | Bin 1216 -> 1408 bytes assets/voxygen/voxel/npc/duck/male/leg_r.vox | Bin 1128 -> 1184 bytes assets/voxygen/voxel/npc/duck/male/tail.vox | Bin 1156 -> 1216 bytes assets/voxygen/voxel/npc/duck/male/torso.vox | Bin 1576 -> 1944 bytes assets/voxygen/voxel/npc/duck/male/wing.vox | Bin 1144 -> 1184 bytes .../voxel/npc/mammoth/male/foot_br.vox | Bin 0 -> 2540 bytes .../voxel/npc/mammoth/male/foot_fr.vox | Bin 0 -> 3016 bytes .../voxygen/voxel/npc/mammoth/male/head.vox | Bin 0 -> 7472 bytes assets/voxygen/voxel/npc/mammoth/male/jaw.vox | Bin 0 -> 2008 bytes .../voxygen/voxel/npc/mammoth/male/leg_br.vox | Bin 0 -> 3544 bytes .../voxygen/voxel/npc/mammoth/male/leg_fr.vox | Bin 0 -> 3528 bytes .../voxygen/voxel/npc/mammoth/male/neck.vox | Bin 0 -> 5816 bytes .../voxygen/voxel/npc/mammoth/male/tail.vox | Bin 0 -> 1504 bytes .../voxel/npc/mammoth/male/torso_back.vox | Bin 0 -> 15328 bytes .../voxel/npc/mammoth/male/torso_front.vox | Bin 0 -> 21228 bytes .../voxel/npc/ngoubou/male/foot_br.vox | Bin 0 -> 1696 bytes .../voxel/npc/ngoubou/male/foot_fr.vox | Bin 0 -> 1672 bytes .../voxygen/voxel/npc/ngoubou/male/head.vox | Bin 0 -> 5372 bytes assets/voxygen/voxel/npc/ngoubou/male/jaw.vox | Bin 0 -> 1300 bytes .../voxygen/voxel/npc/ngoubou/male/leg_br.vox | Bin 0 -> 2912 bytes .../voxygen/voxel/npc/ngoubou/male/leg_fr.vox | Bin 0 -> 2440 bytes .../voxygen/voxel/npc/ngoubou/male/neck.vox | Bin 0 -> 3204 bytes .../voxygen/voxel/npc/ngoubou/male/tail.vox | Bin 0 -> 1396 bytes .../voxel/npc/ngoubou/male/torso_back.vox | Bin 0 -> 6852 bytes .../voxel/npc/ngoubou/male/torso_front.vox | Bin 0 -> 6332 bytes .../quadruped_medium_central_manifest.ron | 120 ++++++++++++++++ .../quadruped_medium_lateral_manifest.ron | 136 ++++++++++++++++++ common/src/comp/body.rs | 6 + common/src/comp/body/biped_large.rs | 6 +- common/src/comp/body/quadruped_medium.rs | 10 +- common/src/comp/inventory/loadout_builder.rs | 10 +- common/src/states/utils.rs | 2 + voxygen/anim/src/biped_large/mod.rs | 10 ++ voxygen/anim/src/bird_medium/mod.rs | 10 +- voxygen/anim/src/quadruped_medium/mod.rs | 25 ++++ 56 files changed, 474 insertions(+), 29 deletions(-) create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/head.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlord/male/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/head.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/leg_br.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/neck.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/mammoth/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/head.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/leg_br.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/neck.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/ngoubou/male/torso_front.vox diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index ca8be884c0..c898788d85 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -546,7 +546,15 @@ snowleopard: ( keyword: "snowleopard", generic: "Snow Leopard" - ) + ), + mammoth: ( + keyword: "mammoth", + generic: "Mammoth" + ), + ngoubou: ( + keyword: "ngoubou", + generic: "Ngoubou" + ), ) ), quadruped_small: ( @@ -886,6 +894,10 @@ keyword: "oni_red", generic: "Red Oni" ), + cultist_warlord: ( + keyword: "cultist_warlord", + generic: "Cultist Warlord" + ), ) ), golem: ( diff --git a/assets/voxygen/voxel/biped_large_central_manifest.ron b/assets/voxygen/voxel/biped_large_central_manifest.ron index 4d2830c1b2..5f489af07c 100644 --- a/assets/voxygen/voxel/biped_large_central_manifest.ron +++ b/assets/voxygen/voxel/biped_large_central_manifest.ron @@ -936,4 +936,56 @@ central: ("armor.empty"), ) ), + (Cultistwarlord, Male): ( + head: ( + offset: (-10.0, -6.0, -9.0), + central: ("npc.cultist_warlord.male.head"), + ), + torso_upper: ( + offset: (-8.0, -6.0, -6.0), + central: ("npc.cultist_warlord.male.torso_upper"), + ), + torso_lower: ( + offset: (-7.0, -5.0, -9.0), + central: ("npc.cultist_warlord.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ) + ), + (Cultistwarlord, Female): ( + head: ( + offset: (-10.0, -6.0, -9.0), + central: ("npc.cultist_warlord.male.head"), + ), + torso_upper: ( + offset: (-8.0, -6.0, -6.0), + central: ("npc.cultist_warlord.male.torso_upper"), + ), + torso_lower: ( + offset: (-7.0, -5.0, -9.0), + central: ("npc.cultist_warlord.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ) + ), }) diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron index 8c8f0c046b..184d2a10a2 100644 --- a/assets/voxygen/voxel/biped_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -1223,4 +1223,72 @@ lateral: ("npc.oni_red.male.foot_r"), ) ), + (Cultistwarlord, Male): ( + shoulder_l: ( + offset: (-6.0, -5.5, -6.0), + lateral: ("npc.cultist_warlord.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-6.0, -5.5, -6.0), + lateral: ("npc.cultist_warlord.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlord.male.hand_l"), + ), + hand_r: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlord.male.hand_r"), + ), + leg_l: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlord.male.leg_l"), + ), + leg_r: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlord.male.leg_r"), + ), + foot_l: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlord.male.foot_l"), + ), + foot_r: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlord.male.foot_r"), + ) + ), + (Cultistwarlord, Female): ( + shoulder_l: ( + offset: (-6.0, -5.5, -6.0), + lateral: ("npc.cultist_warlord.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-6.0, -5.5, -6.0), + lateral: ("npc.cultist_warlord.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlord.male.hand_l"), + ), + hand_r: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlord.male.hand_r"), + ), + leg_l: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlord.male.leg_l"), + ), + leg_r: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlord.male.leg_r"), + ), + foot_l: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlord.male.foot_l"), + ), + foot_r: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlord.male.foot_r"), + ) + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/bird_medium_central_manifest.ron b/assets/voxygen/voxel/bird_medium_central_manifest.ron index d24a0be621..de8da461ad 100644 --- a/assets/voxygen/voxel/bird_medium_central_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_central_manifest.ron @@ -1,30 +1,30 @@ ({ (Duck, Male): ( head: ( - offset: (-1.5, -2.0, -1.5), + offset: (-2.0, -1.5, -2.5), central: ("npc.duck.male.head"), ), torso: ( - offset: (-2.5, -3.0, -2.0), + offset: (-3.0, -4.5, -3.0), central: ("npc.duck.male.torso"), ), tail: ( - offset: (-1.5, -0.5, -2.5), + offset: (-2.0, -1.5, -3.0), central: ("npc.duck.male.tail"), ) ), (Duck, Female): ( head: ( - offset: (-1.5, -2.0, -1.5), - central: ("npc.duck.female.head"), + offset: (-2.0, -1.5, -2.5), + central: ("npc.duck.male.head"), ), torso: ( - offset: (-2.5, -3.0, -2.0), - central: ("npc.duck.female.torso"), + offset: (-3.0, -4.5, -3.0), + central: ("npc.duck.male.torso"), ), tail: ( - offset: (-1.5, -0.5, -2.5), - central: ("npc.duck.female.tail"), + offset: (-2.0, -1.5, -3.0), + central: ("npc.duck.male.tail"), ) ), (Chicken, Male): ( diff --git a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron index 95c4027cc7..14a20071d7 100644 --- a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron @@ -1,37 +1,37 @@ ({ (Duck, Male): ( wing_l: ( - offset: (-0.5, -2.5, -3.0), + offset: (-0.5, -4.0, -4.0), lateral: ("npc.duck.male.wing"), ), wing_r: ( - offset: (-0.5, -2.5, -3.0), + offset: (-0.5, -4.0, -4.0), lateral: ("npc.duck.male.wing"), ), foot_l: ( - offset: (-1.0, 0.0, -4.0), + offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.male.leg_r"), ), foot_r: ( - offset: (-1.0, 0.0, -4.0), + offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.male.leg_r"), ) ), (Duck, Female): ( wing_l: ( - offset: (-0.5, -2.5, -3.0), + offset: (-0.5, -4.0, -4.0), lateral: ("npc.duck.female.wing"), ), wing_r: ( - offset: (-0.5, -2.5, -3.0), + offset: (-0.5, -4.0, -4.0), lateral: ("npc.duck.female.wing"), ), foot_l: ( - offset: (-1.0, 0.0, -4.0), + offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.female.leg_r"), ), foot_r: ( - offset: (-1.0, 0.0, -4.0), + offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.female.leg_r"), ) ), diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/foot_l.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/foot_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..bff641692259810fc286cb97664dd1e752930394 GIT binary patch literal 1748 zcmbu8{ZEx;7{{;s<$0jYM#+nSAt43_OyWge0_pH_QZO{6m>!8*lPM#Xu*T%<%uRuF zAg3V_+7=Nx#t%(0My%!!$Q&a#<{G)yFOIp^f6!X%mv7$(U9)EPL(lfvb$!40xv%TK z?(;m&2M(o=iAY0L-F^nS?usl`8F0Gb&MoS`>S$K~ZW@ zDb=NkQEI?ai>9aP5u@o*i%}6}=n-S+QEOL6l%+=uu~tQdC`U!LLyu8ur%P$urCrsf zT-FsG(W0Y*$D4>>;L0i-{OU zrI-^#lx9v0QO2+ib4DfHOAJw79gi3_Xm~~)!@II3s=c~Ii^ExX4x$~ynN7bT*64om z(9DT8tVfi!5lswH)?w~2cbL1(UFKel8PJZydvc@7;hICwiHR8IW<9t4+U2_IMy+)Q ztaS$r_b4LNLM_(Px15RRBg*T|sCnOJ9WN&?XNl3AO-B_G&Tokr%NcC{!9CU9d$j(5 zPdFUL-4Vgw@g;1F{~f=^$76A^!CS(Wy00HeoIereExQnSrxL!2GDyIIbUY53d>XQp zh`0tpQl}s{kcAyr1+g81jeUYm!-B*w1Vs%SP~RDc;OR|xfBqTNh6RnIg12V`z29?h zV+zvRGmsh1LGhd)son9&IG2K)sjbLg&O%a)AoH|f$C#jEK_IWOe<&6*`XppF9z$7A zVfuvx+}@oE)IW=I5!8_%$uDH|q+sSl!Q!;w=2z5y!DK-2%|XGPV}c;{$!5XuQTjcC z8lRxGRM1l^_+xn-jYTPF4`d+Jn2oWv0)$^L!PxN{jI>n&E0f6GmWYait=RWcHrkp? z&`~ewdqXhso?zhvL2+6N>T)vCQoIx0wPk3|Nkn^5D$ecMj=9!61YfN}$6NamK5+zR zPaQ+(-5_?CK99NS2v%>5!*yM3d~5^K)6R;~$t{y`9G&&H*`LM&aWL6Q_8P5j7}7L-aa0`k!#=fA{z`M3G; z-2||<^uOmXEG)!@k_qJHPojM243hhjvHZE<_7MT5rr`7W(9_d{SN6_A`a($PPQd)d zd;j676uvuYX}B;jipug496cMs=GG+K`f@wwgUJ}-o&EFvz2AAY4mYi!`#8{haT z=Wu@Z20p&Nid`p$P literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/foot_r.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/foot_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..bff641692259810fc286cb97664dd1e752930394 GIT binary patch literal 1748 zcmbu8{ZEx;7{{;s<$0jYM#+nSAt43_OyWge0_pH_QZO{6m>!8*lPM#Xu*T%<%uRuF zAg3V_+7=Nx#t%(0My%!!$Q&a#<{G)yFOIp^f6!X%mv7$(U9)EPL(lfvb$!40xv%TK z?(;m&2M(o=iAY0L-F^nS?usl`8F0Gb&MoS`>S$K~ZW@ zDb=NkQEI?ai>9aP5u@o*i%}6}=n-S+QEOL6l%+=uu~tQdC`U!LLyu8ur%P$urCrsf zT-FsG(W0Y*$D4>>;L0i-{OU zrI-^#lx9v0QO2+ib4DfHOAJw79gi3_Xm~~)!@II3s=c~Ii^ExX4x$~ynN7bT*64om z(9DT8tVfi!5lswH)?w~2cbL1(UFKel8PJZydvc@7;hICwiHR8IW<9t4+U2_IMy+)Q ztaS$r_b4LNLM_(Px15RRBg*T|sCnOJ9WN&?XNl3AO-B_G&Tokr%NcC{!9CU9d$j(5 zPdFUL-4Vgw@g;1F{~f=^$76A^!CS(Wy00HeoIereExQnSrxL!2GDyIIbUY53d>XQp zh`0tpQl}s{kcAyr1+g81jeUYm!-B*w1Vs%SP~RDc;OR|xfBqTNh6RnIg12V`z29?h zV+zvRGmsh1LGhd)son9&IG2K)sjbLg&O%a)AoH|f$C#jEK_IWOe<&6*`XppF9z$7A zVfuvx+}@oE)IW=I5!8_%$uDH|q+sSl!Q!;w=2z5y!DK-2%|XGPV}c;{$!5XuQTjcC z8lRxGRM1l^_+xn-jYTPF4`d+Jn2oWv0)$^L!PxN{jI>n&E0f6GmWYait=RWcHrkp? z&`~ewdqXhso?zhvL2+6N>T)vCQoIx0wPk3|Nkn^5D$ecMj=9!61YfN}$6NamK5+zR zPaQ+(-5_?CK99NS2v%>5!*yM3d~5^K)6R;~$t{y`9G&&H*`LM&aWL6Q_8P5j7}7L-aa0`k!#=fA{z`M3G; z-2||<^uOmXEG)!@k_qJHPojM243hhjvHZE<_7MT5rr`7W(9_d{SN6_A`a($PPQd)d zd;j676uvuYX}B;jipug496cMs=GG+K`f@wwgUJ}-o&EFvz2AAY4mYi!`#8{haT z=Wu@Z20p&Nid`p$P literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/hand_l.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/hand_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..d0aaa285b7bd65ec8978a6a41c25ffb702b17073 GIT binary patch literal 2008 zcmbu8|7(?19LGQBoX z9b?Cscw&{YGA5olFFh)z+ZofP#k8w6@9dkq-b0qNDD0`GT zQML4=&S&d6m#C-asSyp9p03*%m$k;x*U{Iti*;FJ9oOjS?da{eM#nWW=N!G6BaSHX zBsiB6WuG!f98q=jXHH$pczSqx5cSl(qraoS(qHMXS!a~~N`Gor>96!x`YZjZJEb>u z;)oJY0ug18GDjRy;z=OJb3SpN^F4Dx>Feq1x!<0?KC8ylmzwoiYdw8EeLa1tJ5OKM zI_gA;C!(xZ)+=?Q#1rFL>p7RGrye~00=)vyPoP)ew`FVteFA*~eFA*~eFD!Ab)v)* zqpVeGM2RQXbC%~UPc7tTM>spebIrSraAt%vBRrE4o@>U$6RXTCW8#VRj6G{il)X{* zM%f!>ZkzygK!{ewGK?C`o{7m`}2u9x#TpAHv{fu#)U??H@VvFGB z9zl}vfo4JPF6teEHF3et<${j2g5R&4M$?i)v?fZCZd!nW-Id6^xC{e(*Pw5AJ#cLZ z<#Y0}qH;DiKC=M3o0p+&gP`*z!QdN$i*F06iwn_EHWw|`i;!AdgXXe)v@R*a@pbbs zwsSF(&)1{vl}*U(-+^O?_8|Rw5-XQKiLsGxOk6&V5CW#eCZnXJ1Qqd8R4;l0Pgll~ zSW$t^&(@%~YZgX7EX5C3%W(60Io_w|*s$Q*1;LNs3DT_#aH_Kk<7d{OKq^rzbtsn> zESG~w$h!|*|0(XvzpWqN3<9^t|M&WntZp_$Ofa{;m!};V)^l{Jr zx&OJk+^p?euOYP;ICyddoga_kt#g<0-d7V?y8kFv9T~*N4=!Ts*$LFu)!{Z@MWO`1 z!c7QneR=o&Zt;BmSDt_2o&PL%Pp8wkH^znGzjC>Uzvcdn@2A~cJ8Shm%&2)8MT$rQdk1$WMfEDr=O=21e(dQF q_!qh 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 K^yEjaqy7n>CL3e` literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/leg_l.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/leg_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..33f465f7ef7b396573ce682711531080340a32ee GIT binary patch literal 1304 zcmbu8-%p!W7{{N!Z%5EMgRYcOW``XUTIP@+ zC>#=XD6A~o%BoqaDJ%nrt?L?NDceS~b=?`YL~Vs8R84J@FYD`6cB-$bqq?$Xn^@!P zP|cyS4)rnqYAYvE;9Z&GV5Zb^a-Y)%V%|05wt%|qqZDY z{HXXvF@92*xhO153%9;hJ19(rgs%?@ca8}WwNG{nqeoSb39Wviw_b>~34bh2(plr7 zKjb6cS;jUw0h??LzW3A@zS@!&4r;J6uESl+3>}BzOVcDj%kaVMO+Nm1g`FoxXg-r--_?1#uCEXb2Dz(S zkz578VXp{l-`v~Zn%=MfTL0?_VmKa;XW6{FtbQYHrvKFLv;Q9dAm7cq2ier{Iz<&T I56UBd0zC~fEC2ui literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/leg_r.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/leg_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..33f465f7ef7b396573ce682711531080340a32ee GIT binary patch literal 1304 zcmbu8-%p!W7{{N!Z%5EMgRYcOW``XUTIP@+ zC>#=XD6A~o%BoqaDJ%nrt?L?NDceS~b=?`YL~Vs8R84J@FYD`6cB-$bqq?$Xn^@!P zP|cyS4)rnqYAYvE;9Z&GV5Zb^a-Y)%V%|05wt%|qqZDY z{HXXvF@92*xhO153%9;hJ19(rgs%?@ca8}WwNG{nqeoSb39Wviw_b>~34bh2(plr7 zKjb6cS;jUw0h??LzW3A@zS@!&4r;J6uESl+3>}BzOVcDj%kaVMO+Nm1g`FoxXg-r--_?1#uCEXb2Dz(S zkz578VXp{l-`v~Zn%=MfTL0?_VmKa;XW6{FtbQYHrvKFLv;Q9dAm7cq2ier{Iz<&T I56UBd0zC~fEC2ui literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/shoulder_l.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/shoulder_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..e755867c606dbb6a0f4c4324038c2f1df471ac93 GIT binary patch literal 2304 zcmbu>Z)}xk8OQPKJkR~V&Y&x0l-Xg&gq8{NXZ#U{ZJ};uvW=l+>ky3@*$5JMh-pUC zEZGX@1eYm8WHS*fnuZrGD2XFgxpzMqn(fu8jZHE8f{lM+O=ct8qI)+gp7jPQ}fgik&sbP2Wo*D zA`&tRT%?wGPj0kh;l0QmRt*=c+Obi!Q=@8S6ojg3`MPR5S2ew3PmD;&D5!nabnpm> zNXRH~fm+~MVnjklfsa)?q^cD&@6Egyr4tMNl#0IUkz)05m(}!E(_4KcH^?=}HEQ~+ zkHo4znur+%zOLJ$CXa-Sg4)$h2k)pm>PW~asC>;Vb<26~KtM!7MnN6813qv^ppJx$ z0w2jo@<_-i2#H*xPhv*t>@)LZ_L+Gy^W>VjSr^u&Gp}P_$Gq-HX*lL}%ePhZyU-T%1{_Y5T!>8h_?y zedofbv~9|?^Q7q;=S+ux&$Byw)wjQ2OQr_3Zf;164t1;l`Cbjq-lkPomTJKs(~@UQ zcb+nBzG$*9^Zv;sJNa?h`EDIs`U#!=+>8$CE zU$P%Eof$R#`XSTXkDJEXKegL*{4w$qrmX{}y&Fsu+f4twa#}mr_Go!B=lT|J}axA$oC>f3bR7nW(??)5sb-8B7G)6BO`7r$p(*Vn7D!6n+W zZiNnQ+o;`xJ=(u^k)FTj4$bXdsqqJgb>QpwYwF2I_1x2sYw}y;x_iTCHFvh9Yp-mVyznJ*SZy-(dSnWXms-`J@CbiI)3C0@{`AJ6-hOkre#ATHW=&UL zGyVAwrpf)w^wRViU4D717T9X_*^rjo9&ND08nqvM{>h96hNmn@;Gl=UTdD?*hH~i#v2-e4$S8JA41{zjLm0*CV^G>d+I?;TO+p`e$?c z?)lgC!{1)hT~8j-^l?Z*Cta_>ER>&QXfvhizLwDQ~sJ#YU4XA-{d literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/shoulder_r.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/shoulder_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..67b4db5bbbf8867dcbf2e39e7fae5717cc03a1cb GIT binary patch literal 2304 zcmbuBe`r-@7{{OY=Q-yt!*WiYw${{in`v|YY-+n#mrhfg*3h{uLea4#kHpZ+5Omu; zm{@A22HCP0`y*T?O9}%M5fenhB>G20qW}6cBKqgs_gp0`%>HQb;d!6uectES`<}~M zSFfu)Dk3Yh&8sNnmr!JFb6e9xslvZhmfV%=*0(i(ZBwhrbR}YyO`Hp3r*)yk`8eZj z96B8bUdNGhT)Wu1fYQc6x>h>Tq7tKY!8p@viE%-qsax$5XMCSGE>XtxDou>-)m(dH z6K@RnUBS`jXtTx_0%v=JG=}ksSYL21C5XNAN$5<$J6F*3F~k;qbu57^SmSucF}7n4 zmo=JxnrrQHPSck;3{i}&i;^~N6T>}Cn{qr$46*5&c14WhK2geMz0rwfohGfHxgGoQ z#j`%AS*LNHXNfj_hI=~gH=ToGpJ`8uHf3^-XO%Kp$2^g>aS8hiT!ym_*=I@YEN5mp zGt2XqHBegOtuE-ID1Lh2vGhj}l z7)yuLDJ`XnEYCAOQH-w`SJ6+W>%e7oz&Q|0ROoU#q#nA0XG}+5;hWUL{DDtw;A!Wq z(>nRi9ODG+Kk&8?aCQOb5Lm8@cM)(V>03=n?=s?@I+A`z0ly!9OT6!pGmfl_Bk$;w z;r%<_e@G(wm{=lHkjNH9Q7TH-CVbDryU-bvQ)03zW3s|Gr!y)EE%7P|3<*@?H3?PX z6p2(~`F&dYnG~)=rxGPPQ5l_xm_#y$?@969sn`-jyrWJmF~oc7#1fOP`3@{G#Pj#T z5lc+E=5K{1hG_0<+H|@Woz)qV#`HoTp})|dSn9+ON1G*@c{FR$v}yWi+7xxg^NM?l zu@z%0#$K~DmzBG}W8hzRcQKm7}An3i+0)IJ$Wzx?h@$ zqgxl_@a8OV^(1O1mSMrn$Fbtsso2~)7oE!mJueIT-xQpGM=+jaODAJ^;|#RDkVWUKtI)lD1NQIUg8Un8SUB$~3=bA?{o)CD?=d1OL1kqn z>Z+?SXZn+PW@a^-7Sv(&bMtYqcLIh!s=|*~YH;&fEk0n*;Q_(bbAq3~7vwvp;&@Lz zE}dG8F)|Ys(ui7V$2{4ECVB6H{U7IC{;hv}+Yj8j^uPPBudm0Ux&4??cM=Wz_F`Pm zI9&c%aASi20|Th8u0~f^7oJ~s2GWzq=pCbR_Sl^}++EJMQ&E9KeMhjU;V?GsFJSD( zF}U{GWSngqhr^uNKj)wNrLoqpy^0-MfnCQ2(eueL-ac~??|*Y0v$yZVqP_iC@!@%_ zJ$)UGjg7d?QY0k!4d%Mw)>n7xyT$kQU;F%5qWGPqGM~@mULEHK{@P0yf7`pO-_Lfh T?}XeojGg}q#?KhK-+B2H@Lsz@ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/torso_lower.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/torso_lower.vox new file mode 100644 index 0000000000000000000000000000000000000000..94450638f52c7474f2a1f08a4395960fcbd02dbf GIT binary patch literal 2848 zcmbu=-H%mQ8OQPGtoOb5nFj3uWvCP>6$WaNm+~SM=L|EpL#36Xq@5xfQ_>P7c8DQm zGHKFIXGUzQ6p_|ML^Om8Q>+AurWZ&Wf=x(curXfPkjD5Q7-PKo`8{AvHML$i$tUYs z>skBkz1H6AnVk#?-tak@aSWsBY#W;{9R}<-pWID zD|LdUv1qANO6ug2#u6fN$!RPjA$H@E8P7w(;!K4^zmz=K#5~pnauz$u;&etKZhV}s zQK29sp>}bqa*QD(AtJzcb1ibnNQelilN+m0P)A}E)PWcUwI@d7^H^m(mqScEUmB}Z z9t)Yir|;63BUiDmVtL4ubKNo461rpjM(y}56h!VB;1RiJfJfw>0UnWS0z4wu1bDP! zm}&)hL{ALwr+mv#g_dW1o^^WG>shy-u27S6&a)r>g@A~H3N;#X&U@}f9uWl33al@% zzQFnd>kF(eu)e_h0_zK`FYw-(gMtb*8aVdLd-8}Vs8FLJ=h#yp$RnblLXC!;W8Zxw zkBEW_H5zg*aeo9v6jZ3uz-OL6lgoki@%$*n6>Uw<@hy7KN9;On&O)0r(dKNld9Q8WU7Pn)r^I>ZEFvQzBEX~OTvu?^9>;n2obiB& zgp7g;H5_v@HNkabYCz3-PxLF=in`#*2SlXqToicb7UtyceAM)-?iex>A~huNTamn{ zt_Ir3cz`FaTFggALPUV4{#MlALjBFOsjDi38L5i2aWGbSu-uS3v7%m6p98hGqOEA_ zoH`zLrjDU1jyaBc-WrU^#X1SbJ{$XN>~jxs4{;B%61H{BBu-Lw%Ku@N`fO*{1P{;c~B`PN&gTYRfZup@TFj`)%L2RjyS{+|B>OZ+bHXLR9YT2oe$}Z2*tZk;b`%TM-m+0=- zO=X{{XVP@*5!0NXn$~PF(pEO&3k}1@1pyWXEoio$J-%B_Gk5PtDdl z_sy5Keq0;PG=ksb&p7ss>Fjq+m(G~p`Z@gp)2U(8FCQ_z`=n`<{xdsGN1kB(plM6L zY4>{5!6DP%ubj~KHGSGUyh!8Qm+JVQRhszXIvsy%i;nK;NLNp3`JHpLY1JKi@H0!b zXXiTY+iIHplIi3(Oc%dnTDzc6Bg+ub9A>BHLm{7F6d!;9MS`ZWy< z4Cp-`#R~LS`D>=@zq<{s)b{f9~yr R`*qufFKhmavmbQ5{R75i|JMKj literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlord/male/torso_upper.vox b/assets/voxygen/voxel/npc/cultist_warlord/male/torso_upper.vox new file mode 100644 index 0000000000000000000000000000000000000000..5c210b0fdc534a3f9b5bdb47da51da08effcea53 GIT binary patch literal 4736 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 CuOaRL literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/duck/female/head.vox b/assets/voxygen/voxel/npc/duck/female/head.vox index e099ff44fcf3fdfe4b3528f2f1c6f53f11583bb1..8d0bc5a28fdca04d0eaee1fd5bcdadb33a6c255f 100644 GIT binary patch delta 462 zcmW-du}T9`6h!aL-Bm=fva=BkD5wZRG=)t9$(lkViXr+1q5%tStYTqpvtTQJf}IwE zvRMNDf{2wxzT!DA4-PYT?!4V)KW6S`2i;C@>Cw#g>+J)H^;5Is_E~c-4mydL7K*KR zde+{Bj7}^g#UAKmC$Bk$jG9SiOr*dV&N1O*CYC{aC^vPHS_{gU+Moqjk-RcmVc@61 z3b+?ed;(HKVe)!iL9n29`i27PktkeuKpXkwo{boD?HMyYlWrq`LkETsCfuchK8S%2 z&0@iaE`@0!AkWF{QgxiA3lJsgCFM=((I?6yNJDuN>Xx29JCw_7DCcpHP#o9(Cw5ye{x4j$=cUMBUu@?HB Mop67Cn1B1E&mugZ7G5I~^;xHte*&Y2*E# OJ)al$bTw*T^S^(vaxeh^ diff --git a/assets/voxygen/voxel/npc/duck/female/leg_r.vox b/assets/voxygen/voxel/npc/duck/female/leg_r.vox index c227ff840cb33d9d38713aa612e9f03fa1c0b3a2..b73d753576d36d7e27e3bba47ec05269cf556a76 100644 GIT binary patch delta 209 zcmWlP&k6x?6ot>dKSJ4wls{ns+uiz18>p3WI@pI-XB$ W>pC_VbZj{4+tYMxZ^t0In(rTKE+~2c delta 152 zcmZ3$`GO-R%s)b58Uq7^ucN0QkYWg7VPFXMjB@1xae#mch?$`{A~MQT1tbUr91zNb zk%_^Bkr9X)7(9TAJs5y&1_nkTX7boLQxJW)77$lau=I gsipGYLqqw0fS&sQFk|ii?cuKfTN3>z?`D1q0Qy283jhEB diff --git a/assets/voxygen/voxel/npc/duck/female/tail.vox b/assets/voxygen/voxel/npc/duck/female/tail.vox index f73fb40d7f47b681f62b444d616fda8458e4857d..dc574e3d43ebdc1c2868d32c1156bd142c644e01 100644 GIT binary patch delta 260 zcmW-ZF-t;W6o%h(&NUIjKM+QsV4xxdx9-qVAasXR2t{36A{>M73xpQumJ6*Btu1Y~ zHTxeL{T-+Gdf?&kKAiKeYrnOZ>1cNH2H^H8A9CR<0q*j};IIrFMi@CDv-u)lahG#U z1R4cNP*@P6f~a%~p_iyq2|@>GU`v2#ussru&R{7ekHvUw+!dB3d@7$y&oUy)OhlQ< zcWg*~2>*EO`sVq}|6bGLQ+}#hzwLvpSKRAXPoIjuO^&i&%k#A5H|I?sU$%XE-SOq< L!q*Su;@x)t5so!| delta 206 zcmX@W*}_>L<{zOjje&u|*U{4tNHG+!FfasrM!E8UI6%M*#Ed}93d9kSQJxM!8U*-( zn2CWYkcojI5XcH<1hRqZf`Gz6F-D*mBaqJsWU~Y@GOz$?=3oXO%?PHMgM!?h92r;` zHtrT<tWzfs+l#L-w3CL=L8EaS z5>W{ogg}A2Q>5xB2uVShWNo~*yClztBv##esn%`!O$dz@5 zxOwzOcb4tMW-_CQ6($So&55fmHU}fo5U{F~73+hd=Gt2&Cpc4kZ}CORZJUYC(RcJ6 z{bVc2hAeXMRV%>C98sr$;|#h_rf>=bQ>V3iCZ&MDlhbJ+lj1a*6i>G2tzc2av60 zKmsQwK%x`;55aKSz(3%kOA}o!MXeKUZzoH0pL6%~y5g0sqKLJUT*^*0+k;xC1 zqr<%>jpS$*G+(>J))JG}2InrO!1fwrG>*?VeDbRsF&e}+0vJx4zFoH)dihZ1FK_S8 z-#^@+|9sqCKlLAV@80%&u(z|W@zZX delta 624 zcmWlWy=qlK6ouFRnQIfYu`(!ugs2e$8c1Q4AQ!wve$EWWm@bu%pxtc*8@mf3ZMyU+ z)K~Bw?DRP%-yGQI%$#%9x7OZs{pfaWd3JKXaV6>KaB<8-k7rU_T+G+ThO1D#Qc~xi zE*Afc1=m-~IH(4{R~;Ace@E&!`m zY)Vs2#gwv|03#j1fFN`=Paqk<(7HDZbVlW15yUVWA>67$Q(~Ox6MbMDX;ic*OJD8HalL?w|cphU92VM@Y z@mz8X%15^bXqX@nd*(}btN|t9WTXi=6C)#p8v!w*LmwvNIAFMO49-M@X^CSXtPNwd zLc_^1X&NQyMgmGq5>NsP0cMmUlt_K|Bc9sB1NED^`md_~_p??%^Y?@O-R=JN&CAu7 r^2cA_tlrH&tnWX2(ib~h{r!v0e!Ba-pY6Ts-#^a#x66~&-R%E8E2vQ~ diff --git a/assets/voxygen/voxel/npc/duck/female/wing.vox b/assets/voxygen/voxel/npc/duck/female/wing.vox index ea1de42e5574381571c33ddf2dda1e2b61ad8477..c425c9647f669b80e883898f79dde0e5ddf0c9ed 100644 GIT binary patch delta 227 zcmeytv4B%B%s)b58Uq7^ucN0QkYebWC@5Ud4rH(ZaYSU4XADRb2*f}HEAwFn7Um-i z%uL4_n3z^GFf#)Aj7J$*m<}^AGaqGOWjw;b24u4`9bsT)0E#gj0UC6afr;@r10&;V z1~#C2CLo`I@fZUm0}wMEV_;%F7Ub^a2(}Ptg@uL1#%exBK0k*43$t|o@2E8Tf49$c z@^r?X>=yd!|6MI~CxiW JOrFgA6aZxbIOzZY delta 172 zcmZ3$`GZ3+%s)b58Uq7^ucN0QkYY%gC@Ac~3S=+?aYSU4rwK?D2zWpQGh+|~6H_oy zGKhhNF_3{7$Yx;*WMBkhCZHT6NFFH1$PmoHz!zPh587`dc%^WIiCMWgZQ%mK)hlcY106q2pVaD43+rwS|wShZyD2ABM+JJ@jYvCINY<&hFK(O`| zQd{iqeTVhjT=+O=cIKWP?$7euN-??_Z-1ECRX@L$*tBJKmrpKMQ=tUTtbFK%PtWtqm)v>A}HLnq>!h)CpBs6OZ8UKg{e06ZnLxg;%UFW=VP2Hir@z|fXyWUBKEcxP-K>L&04< z=Uq6QnLEs{^ekVZZQOkTSTBN&2zLwE1<9&n7KsuHg4Bo)Nsx+7>H-n@1oDXC6Tydp z;gJ$7xbo~W!DEI?#5qA=VxNt<2*$JLjyb_RVRp bql3{v`;M){$xuhLu|6&5`gRPntNQ){X>=%d delta 152 zcmZ3$`GO-R%s)b58Uq7^ucN0QkYWg7VPFXMjB@1xae#mch?$`{A~MQT1tbUr91zNb zk%_^Bkr9X)7(9TAJs5y&1_nkTX7boLQxJW)77$lau=I gsipGYLqqw0fS&sQFk|ii?cuKfTN3>z?`D1q0Qy283jhEB diff --git a/assets/voxygen/voxel/npc/duck/male/tail.vox b/assets/voxygen/voxel/npc/duck/male/tail.vox index 16c46bb07dc3c818cbeefaf9f7b9e7a62d51531e..f362de284d3c565cf9c86bcfbae4566b97c7f7ae 100644 GIT binary patch delta 240 zcmW-Z%?bfw6o${wpeYxi{De^^ib7c{$}BJ?)0mxXE!8&*W#bN}Y~6s3JFs>iuH*BL zQ%|S&>74iGzTIoIiJNyKTFrtr7CjxJZICR=dB7l&f+C3bNpQi=rvaEGWpa#=8V16Y z3Y-wbb1Gag3`ZmeErwW({^3;Nlym}#V^$n1b^&D$p7Q71qYSVh0~TbFm-%w3U9Z@l nSIds_5&xVGbypp=8aC*4?9%saIOy7F+_$Is)ZPwZ_R#MS*pVx6 delta 187 zcmX@W*}_>L<{zOjje&u|*U{4tNHG+!FfasrM!E8UI6%M*#Ed}93d9kSQJxM!8U*-( zn2~|80!UUcF)&py0x<&vQ#lg@BM>tH`3yilLpdV@b2-oyAe#j!4#LbpF_wxTcPB>% z7KV+x?=rHR>8bs=&{O{(W~}|cJ>2zw LOQQee+ssb^UyvrP diff --git a/assets/voxygen/voxel/npc/duck/male/torso.vox b/assets/voxygen/voxel/npc/duck/male/torso.vox index 80ce831912db9f72f9edf058d142841ed18f572f..2e40ba490ff65329b780c909b183d68a51abbf5a 100644 GIT binary patch delta 976 zcmXYvziL!b5XR^4IV%J#Yy_jI5eyM5w6GQx+(HegA*QppwAk)8d4quX2=+e0y*B|# zr;nh|asADbUA~<^d*+*&@0=ey->(lx?~d<&6OlL1*KaX$+C|>4PhRa*z^8$0SN8bR z$@+s=R^$)x^eMt;^_atbl!!?(W@#~Li^_FjW9 zkn?|d4Fkw03IuS5A95=hMhqE&;V1VeAQh=86s%xPbmKs!9#bMO zC|~M1x%i-gP%hA(E%a@nWmebFNXD{;KfB(+CF#rGn delta 605 zcmWlWJ&IL95QVGGseT#^m>4O@fZ{Iq*$?(FpZ@MlE4dAWVd5;r#y@3$8x2Xn*M04WO2KV59E zl7R0kSRPJyr56e8rR-ki#h~Kc9@S!~Wsl~O&DRCkELiMDX7rdSMry`6B0xFZl44>E zvc;kn-K@r-nwMxo7v@3}xkAgH)TF5?E~yyd=!zKTQXaBY0{5wQh!u2qJaGii*AR}>AIeddypi@;D5nlEKnp^;k?lS8fWP-ZuE7EHgLc!7nnFs6IrK#N3A z_Q4vWd(k~FB(4N))XAcGbZSkGiH(+wCK*dIl9(`(K#TM^Onyv~OFR_J4Jw!+ zdXaSb!&iCj_~`!n;@PA9m-bgrfA3#yKHNUOb8Fo`zPG-9cz1nw^k6-E{$&0B@nrq> K`E-A|`S%}eT70zt diff --git a/assets/voxygen/voxel/npc/duck/male/wing.vox b/assets/voxygen/voxel/npc/duck/male/wing.vox index 36e8fb6f0d098cd1073ab4d654a34b2a5e3d155d..0ad4a8dddfe666ebc5fbdade36b058341074e1b0 100644 GIT binary patch delta 208 zcmeytv4B%B%s)b58Uq7^ucN0QkYebWC@5Ud4rH(ZaYSU4XADRb2*f}HEAwFn7Um-i z%uL4_n3z^GFf#)Aj7J$*m<}^AGaqGOWjw;b24u4`9bsT)0E#gj0UC6afr;@r10&;V z1~#C2CLo`I@fZUm0}wMEV_;%F7Ub^a2(}Ptg@uL1#_Fq#>`Jl{|Fx85CWkYfV$vv? ptjruLZKNpo-&0HFzlVnM{{TJp|6#`3|8rc-|F{oj)4KY2IvQvl$=BBlTU diff --git a/assets/voxygen/voxel/npc/mammoth/male/foot_br.vox b/assets/voxygen/voxel/npc/mammoth/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..157f0ff79cc9f9c13b299ab1d2e6702c1461b91c GIT binary patch literal 2540 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/mammoth/male/leg_br.vox b/assets/voxygen/voxel/npc/mammoth/male/leg_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..95c2f1f90b485f002c4bcb12747fcdfa47e9075d GIT binary patch literal 3544 zcmeH}+lyaU701`!YwgSVH9~0-sVELPm$Xe{U_ukyCUJU6bO@b@xsXhyL8qA}lA&N) zNHH2htU*j9NQ{|cp?xT!iXbH~-kxe73c;r!LY@SD5g!FXkmYC3eV4sXg#3#Ef`=IDTSz@kU37-^)=%LztrFK2##6 zA$E0)IrrMhWHt0!ORp&n76`s;Onp?w87=Q)vR+FbQjJ4SX^NUBO*~s3lNH+9r_h&7}ztEFhtI$HIAXmq?Pd7|21NqY-ASyZqyIMw=xZ zoswqqXq+qTF#|XD;mpwtUoGj-&g)+sqsqsDW17t4&O)MGZKsH|hG2RC#^e+GBsAW_jw9j(i7rUQeH zGt^0~V=ZNEqG3;6L!xhy+OSqIaBO^GJb74KuW^+cgreZeSnyIf90GHxk7goKv&PSj zd~Fh;PH6@g8ZUJ~)uWaQUhKnpV#l1=_|Ms?Q$Rx@&)}?qBm5+v2=;0U52!QxO5mB= zeyZp}2csV{+UC7B3^N=LGjL|z4$k2LLC^p^PPJ*KqOsW^HXDU+W@rU|8(w2Zi_Qg~ zk*0-^83%9BZbT1J>mZ8O4Gkx1n9;z7=df4PTPO@nY6eh8i; z65)IrO>B@f>!o?4puf<;d+HDw3qQ1L9GRg9YJiu=R`=$Cc!7X(?DCK`ktb_)GA1~m z$lpZzgimD77J~E{AIK%~jQ7FKoa2}i-fr}jJ|39ymW-$56nIaowD@o?%+IWqn2Wb& z#bctt3GR|EzzfDud$Rza*c+cy>a6&j@+^^>w$`XUYYRRnc$M-#Y8b8YJx92QCJK0f zL1L`6b0ng}w;DF>IkP5yr{tLgk3tg}ZfA6s(N0FkIT2>mg}@JT;aeuqXu>115y~_E zq=JsnmZ4<>Q^Su8td%*sfjgS3^zp^SKB?eg?33U?0!w3l5QS6VN&doF1aB2|C)8BX zm%tH81apLSLx-<4K9G;$YbtoK(2wojgF8YU@LW^gxBE!&M7R@d27Y*AB?Ql{@GTK& zMe0>KM8Nm&i#nc%cbA&00$?*{B747xojd6>21Srf??+m;|&JxSK4u`K*sFxzQipvf`G{ zyX1quz%nP>(BHZrIO)Fm>0kKsEGai%@V!s%@^^mr6My89&v?J(aqox8w{D;J>Cwmi z$S(0uKm4#CTYBEFU;Vz{x^c}PkmJ5>+q^$};GjRf=Q&?Ic-R+j?)B-y78f^{kHzJ^ z=&Pq+^R-tm_{p!I^{=gozj1ffk9;Wp+CA~3jJ$G3{KET>`S!;q_g}C02Ok{rfB7n> z<@s;ocYi7Vg~xaK)%QvC&*J~|C)_{$ra!muDSu+eR$p4&?=K$XP~V&P?|kF3|M1J# z{Wm*)@9)Y#e0|-CyTm%N>g)5b_(%J0xxfB9fAfpHe{kK;pIY~;r}@7BlCQ0;Ica%= zLH_OjN%Hf%#L@P`eAA{){@1ha4~Dl~zI)mCy|vrthi!gv>sCMU`5k`c$`xPu!5u&M z_8niibjc6Aa?BSN7JTQ(L{A_SA}BIQK2TcKMRO{p0K4H0R?u`q|Z& z{le?#{KkzNe(~Z(UtL}GrKKg`yLYc|-@e_Kcdq)IFMiu^o&J&k>W%mO{!jnt_wV2L id-v}7?c29~&z?QLyu9pZ&YanJhE&kv|M5Rk1Nkr9vogd0 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/mammoth/male/leg_fr.vox b/assets/voxygen/voxel/npc/mammoth/male/leg_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..6084d129631ab4f8528a941a83b747283ef8cdd5 GIT binary patch literal 3528 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/mammoth/male/tail.vox b/assets/voxygen/voxel/npc/mammoth/male/tail.vox new file mode 100644 index 0000000000000000000000000000000000000000..840e5bf1c82a38a06333effc8fc402dded61f87b GIT binary patch literal 1504 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 S{~bH4oEHC||3{9&<$nR5;bhDJ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/mammoth/male/torso_front.vox b/assets/voxygen/voxel/npc/mammoth/male/torso_front.vox new file mode 100644 index 0000000000000000000000000000000000000000..e344c7a8cf838a6ddb42872da784a2bc697d08db GIT binary patch literal 21228 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/foot_br.vox b/assets/voxygen/voxel/npc/ngoubou/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..55905030199a726dcf21b72477bdde8ab61c5eb3 GIT binary patch literal 1696 zcmeHHJ!=$E6n*#O&FmOKLv)QBaAOEWBNC0lkCo^q5;x0YvKk1R4+KH6wa_MDp`}<^ zSPNnyHdaD*Q_V+Z>;K3<$o0H{LWrhR3m+Wr%z5{oIrqNDEH8G3-#X{+%rqAe-0R4> zrRM6~;qZdxffzUhbXHcI>x>7iP$L@Us-=`&l(G7hG{h(uUn*1+z?lQs#~Jxj&YpI7 zHztMnBv+vwW@SH$9fliDwh~Xv9i7;<2A+MB*V*cTr6dZU7dlCR1^OnGKg4_gL zl9L3z7@m@XC?Lkn63jKuMUzy6CdZjbjEMT6fqIc7Q)r4(kCe8QU022R9HK)M=en%i z!xich;K=nffC)L&C665Mw(d1%XK-(REbHs*vsSD1AAey6ID`Y|ek4f_+~5B4!nQv> z`EAa}l?(P^dBQ%gPujb?=lA5b&z9}m*K7~>uib<8+|+^oPW1O%b+ByJa@od)hW6!- zA3ti7m19<`4qAPrvTr~1yK;Hh)@md6V0zRZ-W;=y&J}xkzhTe>9b$z{mB{D&YiJ|^1x3Y^D}j8Hyak>QvJGB2KsGb`l_|A XO1UFANdCvzbhz&XiBy4z{kv-nfbn%vzJ}I-5-5TM7QQTi!ij|6D@UC z7xq^Hjt2z5KA^v{+PN-pa9#rH!kk@@i3?!E(m65$#D$r7ye)p^N4dHva~$O2(YBMQ zbb?w5N|h)l6kx#~q6KS! zy`T+<2sGgt)O?5#m(UkHtx%h?)JE zJxYZ+QCKH_s^TN(CnSuRV_``hQ_LbUF(oRJFcG*Y7H}z5{hF})DT|^PGr|hEL^W1b z+(VOH%*c_VR~&R)%IabgLXAtDR{F@HhO2o1b{wmNPv{5qyG}JbpaMQ{SNw>XDt(8U zuqXTJ-S+$(zLy`z1_lPK+wK0xUw8xj2z$Q!fhgKDzxC;vZGCwB+nV<)XYAeblzm*E zwl{Z9@2KmYtl8Hu`Hs7P?K|i#%nSI&>xT64_q&yL%Js}r`_zhKYrHSNX2E4Fsyn$4d(Yh(4J)@s!4=J+w|O&qu0 z_zKdnz3GU$~M>Aw)v=S Lub%d;`UCg|gc(xo literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/head.vox b/assets/voxygen/voxel/npc/ngoubou/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..aad64a1160ed4c2c8b42fa5c26ddee230beedfaf GIT binary patch literal 5372 zcmeI0yUT4y8Hd+eGw*FKYken)M?C?fArLP}G>VraY7)^Hf_hX4NeqIb*ji{4u!yCl zg|#3SVq+y{?_KT7Nx;U!Kf=yh`1ZGaHi#f=gJg z!vd+Gkaau@beJL8c$1A7beLfwmYlc~M?1{e3z}l2U3^%uQ^AKB7DyF^EYn$_!wgBM za|Qv`>AFG3o?(G((~a14cAK_g)27(8>-aPA?9+|=v+PNkAPxPNQ6}w;Jo;L336rK(Rs;8|- z+C-#XiL^~EF^07InBNR2;1f0!(3J06A_kH28wI~&H*CrITETLDvqHn}kR|gT%y%|v87XCEaIgNImN88J2Cmro*qcOkK;g`|g zsL)0`bo`mRh5D<@a}&=^b`;RbPBz)zA+XD2hf2Jm9cJw1QlIQ3iFz<>M*}Trg_dmJ z(HSH&9OR_Tbqt=A3cjH{x3CY*3-WF!(wS zelrbzmcdUt_}&KJ_~6GF{7{Hh{6@UvUr~39`UiM!8lClW*2@nv^6bd7;1Hu93smd| zo%{?7^;bNXCudLiLBYTwCZ0j-&xsm6_I4BtS7_4Ei=Xefn zXs2d|g?gFjV+!_J9DSk>C{T$t=)@((Ruk&_Y@n+u~)E6pE*te z1-qgR?I1!sLSI5VLOa+6Dm0;nylAj)!MZUXW$b8y3XOONvDm56m&M5~&Vd%RqRnW> z7>~!bdT_@F>qd>!4qBl>Cod6a1p|*@-GV(9tQ$4ZK}y_cp$4tcusbR>R;~EZFLn#o z5A7(Vp|FN!FGJZV7`6}P6hmPR%dz4&;(aLF8GoT(#=_n!TN}&KA;z*V#40r6eJlr= z%2ubsUMuXi!ns&D7Yp}KIW+7}UQ*da>rigAmbHP-D5Rn8^H6sJI#lMoZhffin|dnbD)C0V zqcge?labnyTGYpS3MeDB_zgP9RJrr((NKrLE>mTXROY-g=d_dRMiVuua{tf{c7d8I zb6(jal|53qdn$KNo_F9;|~ z4K(5%U#;>xv0l3|UMNuU8-&+w9@;^M#y!!Pr?ztl{DRh@Z5#1U%}gwhZ7ZN-+u7JQ zJ~qD1#=X$E7aH@__%_>S#@31UCfb|YDWFV^d1{+ROj0{27=iJ|WbS|N{}dFmS-JNGB~vF`#cP@#?e z*wGo%)L+-B?`-NDpE}=E=XYdhANO6G`gXbG6YYSf&RmgCoju$+b312k-&pRc>W0r1KlQ^Y=wRyL8T3@=);`bn>E|zm=!~hfv0eR%p;cj2bX->(>P;c7qP$ z{YITUI25SRpp%p6t46;usL-HaVx_MQe3-WZWtiE2Gj|pKIPVJ7aXzJKemzg~R#2N} zzNvW^P^NiPp%b6c1x<;XG&5JUk*G=3;4hbWp0}RoO`ruTw#v-kk@K|+^-zR9@f)bl z%*)KY%-01fb_21Q`5*@s8gvk!nTMJ0gg7+p4iYo(Kl9%B*i!HdK6GrU_|Tw33=4Pm z!r8xY4lR5)3+K?n-Mnz_EWG=&DNv{7n9}lk22Ts`OD)X!%O#c<&hv$Rv+N}n`d)6N zEcCt5H$Jvhd}z=?8a_1W;Nul*akVMn)72)ROvKXFM%ooMSF3asq~AhstzUcgnWqQ- z@8WO&)>`ZO{PWNMpZ~%fum*2A?@Pp6=KuWL*VaG(`uqR3=2tI$X#M32PprRr<;nHu zU;W@e)ZKgE?e&kpKm0@Nf9*TC_xX>$<@nxy>(=_nJ8rL!+`hd&{_w;9RQvw7U9C^v zd1$@+$UD}j9=-EV`OEvh^s#rZ-?;ne`mIktwtnZckFT%3`0@3}-@Lp2>@}uj$yHBjIzVht)>i3>qfBK^r*USF@E4SjZ AM*si- literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/jaw.vox b/assets/voxygen/voxel/npc/ngoubou/male/jaw.vox new file mode 100644 index 0000000000000000000000000000000000000000..6f067dc99980edafb32cab052e5be3e8e2615663 GIT binary patch literal 1300 zcmeHGO;1xn6ulqgg49GC@KGO$#imICV=5m}c?4`RSegcSNUo|EK?NV5#)!Jsc`vl`Kv!95(!i)mFu{K8Q2x{o%^kUfxi0L zaT8}pd;jzt)*j(tBag53DeS*|c+MA&d-(Cab&k7g?;u>7>3hE6WD@C=hqUJ*H!^a; zJ8|bWru-oU=@beX|AHR(TYEf;tssM)`7B;P%b`(yf)CpPKE7GN){Ey@oSsC+zl%cJ z$8z=_!rXm?6IpzD`|hv%{m&T&55|!92LGI6xmZA0E+NMC!W{g;Bv$92qB1*!Fvz1( PFQKtp!l(CD#NYoX*DwfW literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/leg_br.vox b/assets/voxygen/voxel/npc/ngoubou/male/leg_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..da48a6dd274e7fe6a5d1d5792cdefbebc2390cc8 GIT binary patch literal 2912 zcmeH|J&Rsd5Xa~B+x+HUu0v+Uovx%*_tg1_IDf2CVghDofS)mDpIKdB9imNKahqn2(I=@-?0 z5gSHH&Jw@uXYpaNQjl);Qbr-(OE-B}Chxn+vL99YIRvb($KH*pWwO3U%91Tt*YbBu z7#yUVEmxx@d3)APx?!}g%u@O(6f6T%SF@5Mntw;Wgqx6G%i?{RQ@bhphFeAlFQ_FE z&tVR@O7!qujmbK?vIM-m>&NWaw|H!x*s_d~@I*WLy}+fcmdFlUH=0t1(gU~~ysX&{ zYM@5&%vQ6sb3x#20{5gZQf39$z_dc$SrGC?6Y7eV7d{1^^xbus+=khiQ3l+k8zUMA zW|qSgxtgN!GiquW^xHUh@_FCGcbK)n0c>?<7u~E5R_il10aK_&f?gV;Wp<|zK8$Xx zmH9Ah?*{Y=jA2ag$Dl@W<^ooLFTNVxyT#a>p_zwy6KZdF#h5{W6RX*S`q(Qq2DvPT zNdx{){ml;yCzm_DRqBP4ajrqnn4dYbLMNhNM$iN1p5za2{efe{gojX*Dm_J~wc5E) zQimDZW1tsTD2tiEoVc#BzGehLxOcSTc1;O$$d)hZ_e7|+iaQ41mDD#IR-Wl z;v%O+8=^>dU}`SzXd_m0G)EhF*aIDoA2zk*&7s@At`;LKhO3C^3n z#3YE7;Qj{hFL*D(U5O_rzTPCdr^Q|2Ok zXO#CS)MR{XoEa(K6dSd}ulL1z=M5V3F=nT{1EUUSen!m*m`fD>D^pFy`T`m3a$&67DiFp`)QA@IP29vzAE$|9}&=V4sK^F^*Q_ZNtrV zaicCpTCk8?44P#jF5M@A2Qb^%|&7pKSgqeTsD za!BhX{ZM)(&KbQb^ntiEV(5vtUXd?bzJr{?-J^E+DtyJMOAUXY#mMQ#`!(J(0(Wia zoTWQ&(upy6qn%s_^^n_{lNoh0Cxw5j1Dk8p#y8LC89aiRgFeC=odH+0VRzP!&cu)T zXp$Fg>Dcf~@^I$t9edE9=$!dG>vm7@@A(e$8zJp?jqk>XJC`m>9Q;hSe|2qbtzNlu z<$rkqJ!t(utoIKO!=dMQfBU-L{pIt2_4)b63-zb#XX~%G&($A3c>W&0y=T|!pMOmE z*bd|JAkOwKpFfn}<42Cv&136zbA7#@K7RZ@-!qRrQqOHXTDLZj)$NlT_no(zZoGV= z-r71@KfZ9Pe)8t&dT0NY`prjM_1jP1sJGsJt6qBP#d>n%iMqYHQQtZBRNXuMblp31 zs{Z)Jm;Z?OU-oJ1xo7Ix^`n3Dc<17F-P_%%O<&u7y>1*mQm{ylTNiN?aG^_= zE?f)ZLfp7=an4=cbI;1H|06%4eR@D4M6*;EUMQ-%y6Sza-aa$e-a9z)t%$sParX*N zZqG!n?%ufkP&@ETSck1)2iI@xzSR=^_Ep40CpTZY`sCs(6&+PYqfV7 zW%81yu#O$(OU?9aL4!0(F7Se#GT#<>sZ5a)eVOmBn?lp*X}*lqts>EvGv6fj+UoK$ zEDc_|h1tCKQWlZR;JGZ^QXjb+!hGSHde5^y)O$~5A^1o$;%?#ih<5f~OAIPyu#|dJ z?sH(dSIgAp!E#z?4)}5}_-JSC2DOelIOtR6i4=oqEF6AK1x#?$jQZwtZw;4RX!Pnc zatXXyZ_Hw;>s8Yr^a_}wa0q5I_F#6SUNIwPHkUl8!<*4T3V8IFG-v?}9kg`p!@TfF znuFK%!n~Thg*v?%EH8Z+bLPCzG^ZCY?5)fSmLz6TY7b{aA7(Ml3xUfrRIeHO$pm*?&>>APP=p%3BBNFE{Skt2Atoa$12j^|V z)508X0|(QX!&e4@%h|z=cW%0XW9)9mE`csudI8^vgIu(kc~29tn9B}lMGKz~f~n2n z;-1)>2F{x}^TFkg9>pi&@8^S^OBeYc@yD;Ot*zC)y}keKU(kR@c%beN&t?z2zx&IV z_3lrf{cX*U*PpLHTsvETzICpC_x^MD)a^gBUVr;_yeIcx`wsRmpMT(dj~_WwH;=8? z&Gq$q`uOqtYR^3ONIkdlXx-X8R<}=X+;`vhz5ddPdUNY!{piA}`tcj5>z#v_>sKFc z)vrH!z21EL&3fs@7wXB4C+ha*Mt$ehlXd^}Q+5B$srvox&;JtdpVV;c*{AE-^`n2z x@y^BVy1%mKTHQE$q+Yr3O5J<)eBIwVTkqW3sdqlzso#8YP}@I%-vLU@>3aYG literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/neck.vox b/assets/voxygen/voxel/npc/ngoubou/male/neck.vox new file mode 100644 index 0000000000000000000000000000000000000000..507f39cd822271d54409d6ca4ff68685db3e23f0 GIT binary patch literal 3204 zcmeH}%Zp`K6^GYz?|sg>w>wR=5-VWGrlIpdT4V5060MHJPSY4m1ED(!fq>#P1D!ND z&|!udI2Ob~aN@|py?1o(y;TKH{Xg<2Y`+^p2+m zL{JaPAx=FH$mBY)a~InMq}aX?i`rh*E(}~*BTj5lqZhkuYO@#`vvV^vh6d7XTMP~P zMl5bSb-OfY5BzZIxXp!Jh32-^payu@Hp1o%_93oe7n<~tcIj#RNa`oolB?uYd~4#f zLx|J6&xKqS-;4TA)%S*VWnF!nP{>tm12Lz6G)4_<7&Y(S%~1s1v!jU@r*B$hnZK(1Lz4cbde|K&8wk zW$jWnA!U{L1zV-;M9W&WtPJbefYh=nP@$0*E1V%TR_MLVVTIlc^Dp#X=)G*kspDw8 zaE8i0AiXeuG)^7XCCW;pF#odkDD+;o8PvhnDD+-7l4!E*Dzt+yb!}2P|8*5oH%VNi z?kllq-KbW2uPet7t(+a!p+X}shQ_FYb)$w=&Q9GF{0a@kEAKBFM}rNob9!ABsN@>4 zM5T8$fd)Syi3?P64J*lBNem5C8fT_4_r`ap@$NR>-L|eE+Bo;DE9=-$*6|B|#Wt*1 zo7Ea~Z!3o|G=>JMwM`=yrw$l6gro7cDUJr)$VoKLJ$r!%8b~OChFps_OR`t8H?)H< z!_H*bx(v*HVD7`F5LXZ#IPU}JePHeby${TNSQT=Wxaq)oAJz(H19KnNVQBD+4a|L5 zH>@}sALxBpJ2rfvcQjCm8%PYCcQoKZ9Y}HoD!B%l_=!fwmCMMiNBSN4#*fT-XJU2}vzwS5Yc|bh6MandF>zKWo;PbY z@ok%Ux46b9&L?@S#l-g*ZA?7ViMgOjd~jK?=VG0*V7~?TzhJ)w@ArcHU+`=eYqtga zEH;T>u;vTCJ>(o66kqVJ5(n|Y=7PSL>(C{2mR!H&TrRnO$-A@Uo3-SdwdC)^65SQ{ zyRy!MwJYnN-+lFt#J~QR;CG*yb?sWe{`675est7t zJ@d@xv@d-5iT={@m-@-|r~B!R4l|`(MuK%HpPk(9kKVo8AN}fX|LC_5`r!-kPxv{7 A;{X5v literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/tail.vox b/assets/voxygen/voxel/npc/ngoubou/male/tail.vox new file mode 100644 index 0000000000000000000000000000000000000000..931a069a783ee4d65d6eed5a61fc701978a01311 GIT binary patch literal 1396 zcmeHGziSjx5T2R$_SfyIIihRafESO0GZDEMgFjZHcaeBG4&!Pd+$BL26k7{z4lJ~^ zw6GS$LTs#r>~3|tTiN=5VCQH^Zj`wtyqTjm zM5Bds$7p&PnicU9TV8>dI|idtfU+`@dSrQ0TVib%q^+Ec%9ymBf#qeSEa99Cw3DNC zBtyf_5Gh8|2@%Gibxep7s~D6iyh?#60a6KQBL>8nl*CH(N_a&v5GJUs7)1}tNJ$H1 z4=F=nCZu(O0+Kx_91^9d%lb-k+(Qr$ricPv_5yo|0;!KmrT4n49nj^_ei*y1%l&@; zKmNiD*#Yify9d$Q z^2Gj5R;yf_@ww*v+?<^~q+K{M#Y@3)4r?>qt_O$K%kvH|&GAlH=Z7l|esrVBqrqi< zbwA|SkFWF2t(&}h@dDR_Q{1ivyxus?QS%H(3k`n%?D;S2{mB`I=gxA=pZ?j$dZ*1% lugj(1Y+vJGy2=|XSGa$5nWM19qunl#o^<)mivgFf|2q^!8-D-* literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/torso_back.vox b/assets/voxygen/voxel/npc/ngoubou/male/torso_back.vox new file mode 100644 index 0000000000000000000000000000000000000000..97beb21457eb2da216d5345ba49db659c3d89bb4 GIT binary patch literal 6852 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/ngoubou/male/torso_front.vox b/assets/voxygen/voxel/npc/ngoubou/male/torso_front.vox new file mode 100644 index 0000000000000000000000000000000000000000..752a5fb1fe5ec5ff4b6b48a59c6c5ba3c838379a GIT binary patch literal 6332 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 Vec3::new(2.0, 3.0, 2.0), quadruped_medium::Species::Tarasque => Vec3::new(2.0, 4.0, 2.6), quadruped_medium::Species::Yak => Vec3::new(2.0, 3.6, 3.0), + quadruped_medium::Species::Mammoth => Vec3::new(5.0, 7.0, 8.0), + quadruped_medium::Species::Ngoubou => Vec3::new(2.0, 3.2, 2.4), _ => Vec3::new(2.0, 3.0, 2.0), }, Body::QuadrupedSmall(body) => match body.species { @@ -460,6 +462,8 @@ impl Body { quadruped_medium::Species::Bear => 900, quadruped_medium::Species::Moose => 800, quadruped_medium::Species::Dreadhorn => 1100, + quadruped_medium::Species::Mammoth => 1700, + quadruped_medium::Species::Ngoubou => 1500, _ => 700, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -583,6 +587,8 @@ impl Body { quadruped_medium::Species::Bear => 40, quadruped_medium::Species::Moose => 30, quadruped_medium::Species::Dreadhorn => 50, + quadruped_medium::Species::Mammoth => 70, + quadruped_medium::Species::Ngoubou => 50, _ => 20, }, Body::BirdMedium(bird_medium) => match bird_medium.species { diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index d152693658..7a816f512e 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -52,6 +52,7 @@ make_case_elim!( Harvester = 15, Blueoni = 16, Redoni = 17, + Cultistwarlord = 18, } ); @@ -78,6 +79,7 @@ pub struct AllSpecies { pub harvester: SpeciesMeta, pub oni_blue: SpeciesMeta, pub oni_red: SpeciesMeta, + pub cultist_warlord: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -104,11 +106,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Harvester => &self.harvester, Species::Blueoni => &self.oni_blue, Species::Redoni => &self.oni_red, + Species::Cultistwarlord => &self.cultist_warlord, } } } -pub const ALL_SPECIES: [Species; 18] = [ +pub const ALL_SPECIES: [Species; 19] = [ Species::Ogre, Species::Cyclops, Species::Wendigo, @@ -127,6 +130,7 @@ pub const ALL_SPECIES: [Species; 18] = [ Species::Harvester, Species::Blueoni, Species::Redoni, + Species::Cultistwarlord, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs index 192e7559b5..f814b57a05 100644 --- a/common/src/comp/body/quadruped_medium.rs +++ b/common/src/comp/body/quadruped_medium.rs @@ -62,6 +62,8 @@ pub enum Species { Dreadhorn = 29, Moose = 30, Snowleopard = 31, + Mammoth = 32, + Ngoubou = 33, } /// Data representing per-species generic data. @@ -99,6 +101,8 @@ pub struct AllSpecies { pub dreadhorn: SpeciesMeta, pub moose: SpeciesMeta, pub snowleopard: SpeciesMeta, + pub mammoth: SpeciesMeta, + pub ngoubou: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -137,11 +141,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Dreadhorn => &self.dreadhorn, Species::Moose => &self.moose, Species::Snowleopard => &self.snowleopard, + Species::Mammoth => &self.mammoth, + Species::Ngoubou => &self.ngoubou, } } } -pub const ALL_SPECIES: [Species; 30] = [ +pub const ALL_SPECIES: [Species; 32] = [ Species::Grolgar, Species::Saber, Species::Tiger, @@ -172,6 +178,8 @@ pub const ALL_SPECIES: [Species; 30] = [ Species::Dreadhorn, Species::Moose, Species::Snowleopard, + Species::Mammoth, + Species::Ngoubou, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index d4396b2749..5571bf7ef9 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -184,7 +184,9 @@ fn default_main_tool(body: &Body) -> Item { quadruped_medium::Species::Tuskram | quadruped_medium::Species::Roshwalr | quadruped_medium::Species::Moose - | quadruped_medium::Species::Dreadhorn => Some(Item::new_from_asset_expect( + | quadruped_medium::Species::Dreadhorn + | quadruped_medium::Species::Mammoth + | quadruped_medium::Species::Ngoubou => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.quadmedcharge", )), quadruped_medium::Species::Highland @@ -294,9 +296,9 @@ fn default_main_tool(body: &Body) -> Item { (biped_large::Species::Blueoni, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.axe.oni_blue_axe", )), - (biped_large::Species::Redoni, _) => Some(Item::new_from_asset_expect( - "common.items.npc_weapons.hammer.oni_red_hammer", - )), + (biped_large::Species::Redoni | biped_large::Species::Cultistwarlord, _) => Some( + Item::new_from_asset_expect("common.items.npc_weapons.hammer.oni_red_hammer"), + ), }, Body::Object(body) => match body { object::Body::Crossbow => Some(Item::new_from_asset_expect( diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 4027e4eda4..d105035c43 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -68,6 +68,8 @@ impl Body { quadruped_medium::Species::Dreadhorn => 140.0, quadruped_medium::Species::Moose => 130.0, quadruped_medium::Species::Snowleopard => 160.0, + quadruped_medium::Species::Mammoth => 180.0, + quadruped_medium::Species::Ngoubou => 170.0, }, Body::BipedLarge(body) => match body.species { biped_large::Species::Slysaurok => 100.0, diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index 9597f8f2e7..74548f9e7c 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -227,6 +227,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (6.0, 11.0), (Blueoni, _) => (10.5, -3.0), (Redoni, _) => (10.5, -3.0), + (Cultistwarlord, _) => (0.5, 14.5), }, jaw: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0), @@ -247,6 +248,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (-2.0, -7.0), (Blueoni, _) => (0.0, 3.5), (Redoni, _) => (0.0, 3.5), + (Cultistwarlord, _) => (0.0, 3.5), }, upper_torso: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 27.5), @@ -268,6 +270,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (-1.0, 18.0), (Blueoni, _) => (-1.0, 26.5), (Redoni, _) => (-1.0, 26.5), + (Cultistwarlord, _) => (-1.0, 18.5), }, lower_torso: match (body.species, body.body_type) { (Ogre, Male) => (1.0, -7.0), @@ -289,6 +292,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (-1.0, -4.5), (Blueoni, _) => (0.0, -8.5), (Redoni, _) => (0.0, -8.5), + (Cultistwarlord, _) => (0.0, -1.5), }, tail: match (body.species, body.body_type) { (Werewolf, _) => (-5.5, -2.0), @@ -318,6 +322,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (8.0, 1.0, -1.5), (Blueoni, _) => (11.0, 2.0, -5.5), (Redoni, _) => (11.0, 2.0, -5.5), + (Cultistwarlord, _) => (11.5, -1.0, 4.5), }, hand: match (body.species, body.body_type) { (Ogre, Male) => (14.5, 0.0, -4.0), @@ -339,6 +344,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (11.5, 1.5, -5.5), (Blueoni, _) => (13.5, 0.5, -8.0), (Redoni, _) => (13.5, 0.5, -8.0), + (Cultistwarlord, _) => (11.5, -1.0, -1.0), }, leg: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 0.0, -4.0), @@ -360,6 +366,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (3.5, 1.0, -4.0), (Blueoni, _) => (4.5, 2.0, -5.5), (Redoni, _) => (4.5, 2.0, -5.5), + (Cultistwarlord, _) => (3.5, -1.0, -8.5), }, foot: match (body.species, body.body_type) { (Ogre, Male) => (4.0, 1.0, -12.0), @@ -381,6 +388,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (4.5, 0.5, -9.5), (Blueoni, _) => (5.0, 5.0, -12.5), (Redoni, _) => (5.0, 5.0, -12.5), + (Cultistwarlord, _) => (3.5, 0.0, -12.5), }, scaler: match (body.species, body.body_type) { (Ogre, Male) => 1.12, @@ -402,6 +410,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => 1.2, (Blueoni, _) => 1.2, (Redoni, _) => 1.2, + (Cultistwarlord, _) => 1.0, }, tempo: match (body.species, body.body_type) { (Ogre, Male) => 0.9, @@ -434,6 +443,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (7.5, 0.0), (Blueoni, _) => (12.5, 0.0), (Redoni, _) => (12.5, 0.0), + (Cultistwarlord, _) => (12.5, 0.0), }, shl: match (body.species, body.body_type) { (Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0), diff --git a/voxygen/anim/src/bird_medium/mod.rs b/voxygen/anim/src/bird_medium/mod.rs index ab72ea8173..5caa8f17ae 100644 --- a/voxygen/anim/src/bird_medium/mod.rs +++ b/voxygen/anim/src/bird_medium/mod.rs @@ -90,7 +90,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { use comp::bird_medium::{BodyType::*, Species::*}; Self { head: match (body.species, body.body_type) { - (Duck, _) => (4.0, 3.0), + (Duck, _) => (2.0, 5.5), (Chicken, Male) => (3.0, 4.5), (Chicken, Female) => (3.0, 6.0), (Goose, _) => (5.0, 2.5), @@ -101,7 +101,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Parrot, _) => (0.5, 4.5), }, chest: match (body.species, body.body_type) { - (Duck, _) => (0.0, 5.0), + (Duck, _) => (0.0, 6.0), (Chicken, Male) => (0.0, 6.5), (Chicken, Female) => (0.0, 6.5), (Goose, _) => (0.0, 8.0), @@ -112,7 +112,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Parrot, _) => (0.0, 5.0), }, tail: match (body.species, body.body_type) { - (Duck, _) => (-3.0, 1.5), + (Duck, _) => (-5.0, 1.0), (Chicken, Male) => (-7.5, 3.5), (Chicken, Female) => (-4.5, 3.0), (Goose, _) => (-5.0, 3.0), @@ -123,7 +123,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Parrot, _) => (-8.0, -2.0), }, wing: match (body.species, body.body_type) { - (Duck, _) => (2.75, 0.0, 1.0), + (Duck, _) => (3.5, -0.5, 2.0), (Chicken, Male) => (3.0, -1.0, 2.5), (Chicken, Female) => (3.0, -1.5, 2.5), (Goose, _) => (3.75, -1.0, 2.0), @@ -134,7 +134,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Parrot, _) => (2.0, -4.5, 3.0), }, foot: match (body.species, body.body_type) { - (Duck, _) => (2.0, -1.5, 4.0), + (Duck, _) => (2.5, -2.0, 4.0), (Chicken, Male) => (2.0, 0.0, 6.0), (Chicken, Female) => (2.0, 0.0, 6.0), (Goose, _) => (2.0, -1.5, 7.0), diff --git a/voxygen/anim/src/quadruped_medium/mod.rs b/voxygen/anim/src/quadruped_medium/mod.rs index c4ae82537f..5c780cc851 100644 --- a/voxygen/anim/src/quadruped_medium/mod.rs +++ b/voxygen/anim/src/quadruped_medium/mod.rs @@ -175,6 +175,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Moose, Male) => (-0.5, 5.0), (Moose, Female) => (3.5, 0.5), (Snowleopard, _) => (1.5, 0.5), + (Mammoth, _) => (0.5, -1.5), + (Ngoubou, _) => (0.5, -2.5), }, neck: match (body.species, body.body_type) { (Grolgar, _) => (1.0, -1.0), @@ -208,6 +210,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (0.5, 0.0), (Moose, _) => (-0.5, 0.5), (Snowleopard, _) => (0.0, 1.5), + (Mammoth, _) => (0.5, -0.5), + (Ngoubou, _) => (2.0, 1.0), }, jaw: match (body.species, body.body_type) { (Grolgar, _) => (7.0, 2.0), @@ -242,6 +246,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Moose, Male) => (10.0, -7.0), (Moose, Female) => (6.0, -2.5), (Snowleopard, _) => (3.0, -3.0), + (Mammoth, _) => (4.5, -3.0), + (Ngoubou, _) => (4.5, -4.0), }, tail: match (body.species, body.body_type) { (Grolgar, _) => (-11.5, -0.5), @@ -275,6 +281,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (-5.5, 1.5), (Moose, _) => (-12.5, 3.5), (Snowleopard, _) => (-10.5, 3.0), + (Mammoth, _) => (-13.0, -1.5), + (Ngoubou, _) => (-12.0, 5.5), }, torso_front: match (body.species, body.body_type) { (Grolgar, _) => (10.0, 13.0), @@ -308,6 +316,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (1.5, 15.5), (Moose, _) => (1.5, 19.5), (Snowleopard, _) => (1.5, 13.0), + (Mammoth, _) => (11.5, 20.5), + (Ngoubou, _) => (9.5, 16.5), }, torso_back: match (body.species, body.body_type) { (Grolgar, _) => (-10.0, 1.5), @@ -341,6 +351,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (-20.0, -1.0), (Moose, _) => (-10.0, -1.0), (Snowleopard, _) => (-11.0, 0.0), + (Mammoth, _) => (-13.0, -2.5), + (Ngoubou, _) => (-8.0, -2.0), }, ears: match (body.species, body.body_type) { (Grolgar, _) => (5.0, 8.0), @@ -375,6 +387,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Moose, Male) => (6.0, 1.0), (Moose, Female) => (2.0, 4.5), (Snowleopard, _) => (1.5, 3.0), + (Mammoth, _) => (12.0, -3.0), + (Ngoubou, _) => (12.0, -3.0), }, leg_f: match (body.species, body.body_type) { (Grolgar, _) => (7.5, -5.5, -1.0), @@ -408,6 +422,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (8.5, -7.0, -0.5), (Moose, _) => (5.5, -4.0, 1.0), (Snowleopard, _) => (6.5, -4.0, -2.5), + (Mammoth, _) => (10.0, -5.0, -5.0), + (Ngoubou, _) => (7.5, -4.0, -1.5), }, leg_b: match (body.species, body.body_type) { (Grolgar, _) => (6.0, -6.5, -4.0), @@ -441,6 +457,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (6.0, 0.0, -3.0), (Moose, _) => (4.5, -10.0, -2.0), (Snowleopard, _) => (5.5, -5.0, -1.5), + (Mammoth, _) => (7.5, -7.0, -5.0), + (Ngoubou, _) => (4.5, -9.5, 0.0), }, feet_f: match (body.species, body.body_type) { (Grolgar, _) => (0.0, 0.0, -4.0), @@ -474,6 +492,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (-0.5, 0.5, -5.0), (Moose, _) => (-1.0, 1.5, -9.5), (Snowleopard, _) => (0.5, 0.5, -4.5), + (Mammoth, _) => (-0.5, -0.5, -6.0), + (Ngoubou, _) => (-1.0, 0.5, -6.0), }, feet_b: match (body.species, body.body_type) { (Grolgar, _) => (0.5, -1.5, -3.0), @@ -507,6 +527,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (-0.5, 0.5, -3.5), (Moose, _) => (-1.0, 0.0, -6.5), (Snowleopard, _) => (0.5, 0.5, -5.5), + (Mammoth, _) => (0.5, -0.5, -4.5), + (Ngoubou, _) => (0.5, 1.0, -5.5), }, scaler: match (body.species, body.body_type) { (Grolgar, _) => (1.05), @@ -531,6 +553,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Dreadhorn, _) => (1.6), (Moose, _) => (0.95), (Snowleopard, _) => (0.95), + (Mammoth, _) => (3.0), + (Ngoubou, _) => (1.0), _ => (0.9), }, startangle: match (body.species, body.body_type) { @@ -594,6 +618,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { _ => (1.0), }, feed: match (body.species, body.body_type) { + // TODO: Rework some species to allow for feed anim (Tuskram, _) => (true, 0.5), (Mouflon, _) => (true, 0.7), (Deer, _) => (true, 1.0), From 78afaf32a2802459b630f860e697a96c4142cf69 Mon Sep 17 00:00:00 2001 From: Snowram Date: Wed, 16 Jun 2021 21:27:31 +0200 Subject: [PATCH 2/7] Removes warlord and warlock armours --- .../common/abilities/ability_set_manifest.ron | 4 +-- .../common/entity/dungeon/tier-5/cultist.ron | 18 ++++++++++ .../common/entity/dungeon/tier-5/warlock.ron | 4 +-- .../common/entity/dungeon/tier-5/warlord.ron | 12 +++---- .../items/crafting_ing/hide/rugged_hide.ron | 2 +- .../items/weapons/bow/bipedlarge-velorite.ron | 18 ++++++++++ .../hammer/bipedlarge-cultist_purp_2h-0.ron | 18 ++++++++++ .../staff/bipedlarge_cultist_staff.ron | 18 ++++++++++ .../weapons/sword/bipedlarge-cultist.ron | 18 ++++++++++ .../common/loadout/dungeon/tier-5/cultist.ron | 17 ++++++++++ .../common/loadout/dungeon/tier-5/warlock.ron | 17 ---------- .../common/loadout/dungeon/tier-5/warlord.ron | 17 ---------- .../creature/quad_medium/horned.ron | 4 +++ .../creature/quad_medium/mammoth.ron | 4 +++ .../voxygen/voxel/biped_weapon_manifest.ron | 16 +++++++++ common/src/comp/body.rs | 2 +- common/src/comp/inventory/loadout_builder.rs | 13 ++++---- server/src/events/entity_manipulation.rs | 6 ++++ .../migrations/V41_remove_warlock_warlord.sql | 33 +++++++++++++++++++ voxygen/anim/src/biped_large/mod.rs | 5 ++- voxygen/anim/src/biped_large/shockwave.rs | 2 +- voxygen/anim/src/biped_large/shoot.rs | 11 ++++--- world/src/site/dungeon/mod.rs | 3 +- 23 files changed, 200 insertions(+), 62 deletions(-) create mode 100644 assets/common/entity/dungeon/tier-5/cultist.ron create mode 100644 assets/common/items/weapons/bow/bipedlarge-velorite.ron create mode 100644 assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron create mode 100644 assets/common/items/weapons/staff/bipedlarge_cultist_staff.ron create mode 100644 assets/common/items/weapons/sword/bipedlarge-cultist.ron create mode 100644 assets/common/loadout/dungeon/tier-5/cultist.ron delete mode 100644 assets/common/loadout/dungeon/tier-5/warlock.ron delete mode 100644 assets/common/loadout/dungeon/tier-5/warlord.ron create mode 100644 assets/common/loot_tables/creature/quad_medium/horned.ron create mode 100644 assets/common/loot_tables/creature/quad_medium/mammoth.ron create mode 100644 server/src/migrations/V41_remove_warlock_warlord.sql diff --git a/assets/common/abilities/ability_set_manifest.ron b/assets/common/abilities/ability_set_manifest.ron index cdbfd1ac58..4a089589b7 100644 --- a/assets/common/abilities/ability_set_manifest.ron +++ b/assets/common/abilities/ability_set_manifest.ron @@ -38,7 +38,6 @@ primary: "common.abilities.spear.doublestrike", secondary: "common.abilities.spear.dash", abilities: [], - ), Custom("Hammer Simple"): ( primary: "common.abilities.hammersimple.doublestrike", @@ -53,8 +52,7 @@ Custom("Sword Simple"): ( primary: "common.abilities.swordsimple.doublestrike", secondary: "common.abilities.swordsimple.dash", - abilities: [ - ], + abilities: [], ), Custom("Staff Simple"): ( primary: "common.abilities.staffsimple.firebomb", diff --git a/assets/common/entity/dungeon/tier-5/cultist.ron b/assets/common/entity/dungeon/tier-5/cultist.ron new file mode 100644 index 0000000000..8b19091d2d --- /dev/null +++ b/assets/common/entity/dungeon/tier-5/cultist.ron @@ -0,0 +1,18 @@ +EntityConfig ( + name: Some("Cultist"), + body: Some(RandomWith("humanoid")), + + loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), + + main_tool: Some(Choice([ + (1.0, Some(Item("common.items.weapons.axe_1h.orichalcum-0"))), + (2.0, Some(Item("common.items.weapons.sword.cultist"))), + (1.0, Some(Item("common.items.weapons.hammer.cultist_purp_2h-0"))), + (1.0, Some(Item("common.items.weapons.hammer_1h.orichalcum-0"))), + (1.0, Some(Item("common.items.weapons.bow.velorite"))), + ])), + second_tool: None, + + loadout_asset: Some("common.loadout.dungeon.tier-5.cultist"), + skillset_asset: Some("common.skillset.dungeon.tier-5.enemy"), +) diff --git a/assets/common/entity/dungeon/tier-5/warlock.ron b/assets/common/entity/dungeon/tier-5/warlock.ron index 0932bd714c..6ee268d287 100644 --- a/assets/common/entity/dungeon/tier-5/warlock.ron +++ b/assets/common/entity/dungeon/tier-5/warlock.ron @@ -1,12 +1,12 @@ EntityConfig ( name: Some("Cultist Warlock"), - body: Some(RandomWith("humanoid")), + body: Some(RandomWith("cultist_warlord")), loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), main_tool: Some(Item("common.items.weapons.staff.cultist_staff")), second_tool: None, - loadout_asset: Some("common.loadout.dungeon.tier-5.warlock"), + loadout_asset: None, skillset_asset: Some("common.skillset.dungeon.tier-5.enemy"), ) diff --git a/assets/common/entity/dungeon/tier-5/warlord.ron b/assets/common/entity/dungeon/tier-5/warlord.ron index b85cb504de..4f7c0c4327 100644 --- a/assets/common/entity/dungeon/tier-5/warlord.ron +++ b/assets/common/entity/dungeon/tier-5/warlord.ron @@ -1,18 +1,16 @@ EntityConfig ( name: Some("Cultist Warlord"), - body: Some(RandomWith("humanoid")), + body: Some(RandomWith("cultist_warlord")), loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), main_tool: Some(Choice([ - (1.0, Some(Item("common.items.weapons.axe_1h.orichalcum-0"))), - (2.0, Some(Item("common.items.weapons.sword.cultist"))), - (1.0, Some(Item("common.items.weapons.hammer.cultist_purp_2h-0"))), - (1.0, Some(Item("common.items.weapons.hammer_1h.orichalcum-0"))), - (1.0, Some(Item("common.items.weapons.bow.velorite"))), + (2.0, Some(Item("common.items.weapons.sword.bipedlarge-cultist"))), + (1.0, Some(Item("common.items.weapons.hammer.bipedlarge-cultist_purp_2h-0"))), + (1.0, Some(Item("common.items.weapons.bow.bipedlarge-velorite"))), ])), second_tool: None, - loadout_asset: Some("common.loadout.dungeon.tier-5.warlord"), + loadout_asset: None, skillset_asset: Some("common.skillset.dungeon.tier-5.enemy"), ) diff --git a/assets/common/items/crafting_ing/hide/rugged_hide.ron b/assets/common/items/crafting_ing/hide/rugged_hide.ron index 0c8bcc29d7..3a2f8ae583 100644 --- a/assets/common/items/crafting_ing/hide/rugged_hide.ron +++ b/assets/common/items/crafting_ing/hide/rugged_hide.ron @@ -4,7 +4,7 @@ ItemDef( kind: Ingredient( kind: "RuggedHide", ), - quality: Common, + quality: Epic, tags: [ Material(Leather) ], diff --git a/assets/common/items/weapons/bow/bipedlarge-velorite.ron b/assets/common/items/weapons/bow/bipedlarge-velorite.ron new file mode 100644 index 0000000000..f9fe278cf3 --- /dev/null +++ b/assets/common/items/weapons/bow/bipedlarge-velorite.ron @@ -0,0 +1,18 @@ +ItemDef( + name: "Velorite Bow (bipedlarge)", + description: "Infused with Velorite power.", + kind: Tool(( + kind: Bow, + hands: Two, + stats: Direct(( + equip_time_secs: 0.4, + power: 2.0, + poise_strength: 1.1, + speed: 1.0, + crit_chance: 0.140625, + )), + )), + quality: Epic, + tags: [], + ability_spec: Some(Custom("Bow Simple")), +) \ No newline at end of file diff --git a/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron b/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron new file mode 100644 index 0000000000..a68c9c4a58 --- /dev/null +++ b/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron @@ -0,0 +1,18 @@ +ItemDef( + name: "Magical Cultist Warhammer (bipedlarge)", + description: "This belonged to an evil Cult Leader.", + kind: Tool(( + kind: Hammer, + hands: Two, + stats: Direct(( + equip_time_secs: 0.5, + power: 2.0, + poise_strength: 1.0, + speed: 1.0, + crit_chance: 0.140625, + )), + )), + quality: Epic, + tags: [], + ability_spec: Some(Custom("Hammer Simple")), +) \ No newline at end of file diff --git a/assets/common/items/weapons/staff/bipedlarge_cultist_staff.ron b/assets/common/items/weapons/staff/bipedlarge_cultist_staff.ron new file mode 100644 index 0000000000..f0ac7f7bf3 --- /dev/null +++ b/assets/common/items/weapons/staff/bipedlarge_cultist_staff.ron @@ -0,0 +1,18 @@ +ItemDef( + name: "Cultist Staff (bipedlarge)", + description: "The fire gives off no heat.", + kind: Tool(( + kind: Staff, + hands: Two, + stats: Direct(( + equip_time_secs: 0.3, + power: 2.0, + poise_strength: 1.0, + speed: 1.0, + crit_chance: 0.140625, + )), + )), + quality: Epic, + tags: [], + ability_spec: Some(Custom("Staff Simple")), +) \ No newline at end of file diff --git a/assets/common/items/weapons/sword/bipedlarge-cultist.ron b/assets/common/items/weapons/sword/bipedlarge-cultist.ron new file mode 100644 index 0000000000..1f33916eb1 --- /dev/null +++ b/assets/common/items/weapons/sword/bipedlarge-cultist.ron @@ -0,0 +1,18 @@ +ItemDef( + name: "Magical Cultist Greatsword (bipedlarge)", + description: "This belonged to an evil Cult Leader.", + kind: Tool(( + kind: Sword, + hands: Two, + stats: Direct(( + equip_time_secs: 0.5, + power: 2.0, + poise_strength: 1.0, + speed: 1.0, + crit_chance: 0.140625, + )), + )), + quality: Epic, + tags: [], + ability_spec: Some(Custom("Sword Simple")), +) \ No newline at end of file diff --git a/assets/common/loadout/dungeon/tier-5/cultist.ron b/assets/common/loadout/dungeon/tier-5/cultist.ron new file mode 100644 index 0000000000..426a32c963 --- /dev/null +++ b/assets/common/loadout/dungeon/tier-5/cultist.ron @@ -0,0 +1,17 @@ +({ + Armor(Shoulders): Item("common.items.armor.cultist.shoulder"), + Armor(Chest): Item("common.items.armor.cultist.chest"), + Armor(Belt): Item("common.items.armor.cultist.belt"), + Armor(Hands): Item("common.items.armor.cultist.hand"), + Armor(Legs): Item("common.items.armor.cultist.pants"), + Armor(Feet): Item("common.items.armor.cultist.foot"), + + Armor(Back): Item("common.items.armor.misc.back.dungeon_purple"), + + Lantern: Choice([ + (1.0, Some(Item("common.items.lantern.black_0"))), + (2.0, None), + ]), + + Glider: Item("common.items.glider.glider_purp"), +}) diff --git a/assets/common/loadout/dungeon/tier-5/warlock.ron b/assets/common/loadout/dungeon/tier-5/warlock.ron deleted file mode 100644 index bcc428fbda..0000000000 --- a/assets/common/loadout/dungeon/tier-5/warlock.ron +++ /dev/null @@ -1,17 +0,0 @@ -({ - Armor(Shoulders): Item("common.items.armor.warlock.shoulder"), - Armor(Chest): Item("common.items.armor.warlock.chest"), - Armor(Belt): Item("common.items.armor.warlock.belt"), - Armor(Hands): Item("common.items.armor.warlock.hand"), - Armor(Legs): Item("common.items.armor.warlock.pants"), - Armor(Feet): Item("common.items.armor.warlock.foot"), - - Armor(Back): Item("common.items.armor.warlock.back"), - - Lantern: Choice([ - (1.0, Some(Item("common.items.lantern.black_0"))), - (2.0, None), - ]), - - Glider: Item("common.items.glider.glider_purp"), -}) diff --git a/assets/common/loadout/dungeon/tier-5/warlord.ron b/assets/common/loadout/dungeon/tier-5/warlord.ron deleted file mode 100644 index 2d83fef3fa..0000000000 --- a/assets/common/loadout/dungeon/tier-5/warlord.ron +++ /dev/null @@ -1,17 +0,0 @@ -({ - Armor(Shoulders): Item("common.items.armor.warlord.shoulder"), - Armor(Chest): Item("common.items.armor.warlord.chest"), - Armor(Belt): Item("common.items.armor.warlord.belt"), - Armor(Hands): Item("common.items.armor.warlord.hand"), - Armor(Legs): Item("common.items.armor.warlord.pants"), - Armor(Feet): Item("common.items.armor.warlord.foot"), - - Armor(Back): Item("common.items.armor.warlord.back"), - - Lantern: Choice([ - (1.0, Some(Item("common.items.lantern.black_0"))), - (2.0, None), - ]), - - Glider: Item("common.items.glider.glider_purp"), -}) diff --git a/assets/common/loot_tables/creature/quad_medium/horned.ron b/assets/common/loot_tables/creature/quad_medium/horned.ron new file mode 100644 index 0000000000..d3767b3bc1 --- /dev/null +++ b/assets/common/loot_tables/creature/quad_medium/horned.ron @@ -0,0 +1,4 @@ +[ + (1.0, Item("common.items.crafting_ing.hide.rugged_hide")), + (1.0, Item("common.items.crafting_ing.animal_misc.large_horn")), +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_medium/mammoth.ron b/assets/common/loot_tables/creature/quad_medium/mammoth.ron new file mode 100644 index 0000000000..73dd2ad8a6 --- /dev/null +++ b/assets/common/loot_tables/creature/quad_medium/mammoth.ron @@ -0,0 +1,4 @@ +[ + (1.0, ItemQuantity("common.items.crafting_ing.hide.tough_hide", 2, 3)), + (1.0, ItemQuantity("common.items.crafting_ing.animal_misc.large_horn", 2, 3)), +] \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_weapon_manifest.ron b/assets/voxygen/voxel/biped_weapon_manifest.ron index 4cf216a2b6..f2210787e1 100644 --- a/assets/voxygen/voxel/biped_weapon_manifest.ron +++ b/assets/voxygen/voxel/biped_weapon_manifest.ron @@ -1070,6 +1070,22 @@ vox_spec: ("weapon.hammer.2hhammer_oni_red", (-3.0, -4.5, -12.0)), color: None ), + "common.items.weapons.sword.bipedlarge-cultist": ( + vox_spec: ("weapon.sword.cultist", (-1.5, -4.0, -6.0)), + color: None + ), + "common.items.weapons.hammer.bipedlarge-cultist_purp_2h-0": ( + vox_spec: ("weapon.hammer.cult_purp-0", (-3.5, -4.5, -5.0)), + color: None + ), + "common.items.weapons.bow.bipedlarge-velorite": ( + vox_spec: ("weapon.bow.velorite", (-1.5, -4.0, -15.0)), + color: None + ), + "common.items.weapons.staff.bipedlarge-cultist_staff": ( + vox_spec: ("weapon.staff.firestaff_cultist", (-2.5, -2.5, -4.0)), + color: None + ), //BIPEDSMALL "common.items.npc_weapons.biped_small.adlet.adlet_bow": ( vox_spec: ("weapon.biped_small.bow.adlet", (-1.5, -3.0, -5.0)), diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 923347e2ba..96ffd4263f 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -306,7 +306,7 @@ impl Body { biped_large::Species::Slysaurok => Vec3::new(4.0, 3.0, 3.4), biped_large::Species::Werewolf => Vec3::new(4.0, 3.0, 3.5), biped_large::Species::Harvester => Vec3::new(4.6, 3.0, 5.4), - + biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5), _ => Vec3::new(4.6, 3.0, 6.0), }, Body::BipedSmall(body) => match body.species { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index 5571bf7ef9..759b4ece11 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -184,9 +184,7 @@ fn default_main_tool(body: &Body) -> Item { quadruped_medium::Species::Tuskram | quadruped_medium::Species::Roshwalr | quadruped_medium::Species::Moose - | quadruped_medium::Species::Dreadhorn - | quadruped_medium::Species::Mammoth - | quadruped_medium::Species::Ngoubou => Some(Item::new_from_asset_expect( + | quadruped_medium::Species::Dreadhorn => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.quadmedcharge", )), quadruped_medium::Species::Highland @@ -296,9 +294,12 @@ fn default_main_tool(body: &Body) -> Item { (biped_large::Species::Blueoni, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.axe.oni_blue_axe", )), - (biped_large::Species::Redoni | biped_large::Species::Cultistwarlord, _) => Some( - Item::new_from_asset_expect("common.items.npc_weapons.hammer.oni_red_hammer"), - ), + (biped_large::Species::Redoni, _) => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.hammer.oni_red_hammer", + )), + (biped_large::Species::Cultistwarlord, _) => Some(Item::new_from_asset_expect( + "common.items.weapons.sword.bipedlarge-cultist", + )), }, Body::Object(body) => match body { object::Body::Crossbow => Some(Item::new_from_asset_expect( diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 1dfba60f4e..4f640bd1bc 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -421,6 +421,12 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc | quadruped_medium::Species::Yak => { "common.loot_tables.creature.quad_medium.gentle" }, + quadruped_medium::Species::Ngoubou => { + "common.loot_tables.creature.quad_medium.horned" + }, + quadruped_medium::Species::Mammoth => { + "common.loot_tables.creature.quad_medium.mammoth" + }, _ => "common.loot_tables.creature.quad_medium.fanged", }, Some(common::comp::Body::BirdMedium(_)) => { diff --git a/server/src/migrations/V41_remove_warlock_warlord.sql b/server/src/migrations/V41_remove_warlock_warlord.sql new file mode 100644 index 0000000000..e445c8a50d --- /dev/null +++ b/server/src/migrations/V41_remove_warlock_warlord.sql @@ -0,0 +1,33 @@ +-- xx +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.shoulder' WHERE item_definition_id = 'common.items.armor.cultist.shoulder'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.chest' WHERE item_definition_id = 'common.items.armor.cultist.chest'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.belt' WHERE item_definition_id = 'common.items.armor.cultist.belt'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.hand' WHERE item_definition_id = 'common.items.armor.cultist.hand'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.pants' WHERE item_definition_id = 'common.items.armor.cultist.pants'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.foot' WHERE item_definition_id = 'common.items.armor.cultist.foot'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.back' WHERE item_definition_id = 'common.items.armor.misc.back.dungeon_purple'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlock.head' WHERE item_definition_id = 'common.items.armor.cultist.head'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.shoulder' WHERE item_definition_id = 'common.items.armor.cultist.shoulder'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.chest' WHERE item_definition_id = 'common.items.armor.cultist.chest'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.belt' WHERE item_definition_id = 'common.items.armor.cultist.belt'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.hand' WHERE item_definition_id = 'common.items.armor.cultist.hand'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.pants' WHERE item_definition_id = 'common.items.armor.cultist.pants'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.foot' WHERE item_definition_id = 'common.items.armor.cultist.foot'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.back' WHERE item_definition_id = 'common.items.armor.misc.back.dungeon_purple'; +UPDATE item +SET item_definition_id = 'common.items.armor.warlord.head' WHERE item_definition_id = 'common.items.armor.cultist.head'; \ No newline at end of file diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index 74548f9e7c..567df6f2b7 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -157,6 +157,7 @@ pub struct SkeletonAttr { bc: (f32, f32, f32, f32, f32, f32), beast: bool, float: bool, + height: f32, } impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr { @@ -199,6 +200,7 @@ impl Default for SkeletonAttr { bc: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0), beast: false, float: false, + height: 0.0, } } } @@ -443,7 +445,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Harvester, _) => (7.5, 0.0), (Blueoni, _) => (12.5, 0.0), (Redoni, _) => (12.5, 0.0), - (Cultistwarlord, _) => (12.5, 0.0), + (Cultistwarlord, _) => (8.0, 0.0), }, shl: match (body.species, body.body_type) { (Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0), @@ -504,6 +506,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { }, beast: matches!((body.species, body.body_type), (Werewolf, _)), float: matches!((body.species, body.body_type), (Mindflayer, _)), + height: comp::Body::BipedLarge(*body).dimensions().z, } } } diff --git a/voxygen/anim/src/biped_large/shockwave.rs b/voxygen/anim/src/biped_large/shockwave.rs index 81d373014a..07614db1d6 100644 --- a/voxygen/anim/src/biped_large/shockwave.rs +++ b/voxygen/anim/src/biped_large/shockwave.rs @@ -62,7 +62,7 @@ impl Animation for ShockwaveAnimation { next.hand_r.orientation = Quaternion::rotation_x(0.0); match active_tool_kind { - Some(ToolKind::Sceptre) => { + Some(ToolKind::Sceptre | ToolKind::Staff) => { next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); next.hand_l.position = Vec3::new(s_a.sthl.0, s_a.sthl.1, s_a.sthl.2); diff --git a/voxygen/anim/src/biped_large/shoot.rs b/voxygen/anim/src/biped_large/shoot.rs index c5fba1b268..bcebd91075 100644 --- a/voxygen/anim/src/biped_large/shoot.rs +++ b/voxygen/anim/src/biped_large/shoot.rs @@ -156,18 +156,19 @@ impl Animation for ShootAnimation { next.control.position = Vec3::new( -1.0 + move1 * 2.0, 6.0 + s_a.grip.0 / 1.2 + move1 * 7.0, - -5.0 + -s_a.grip.0 / 2.0 + move1 * 8.0, + -5.0 + -s_a.grip.0 / 2.0 + move1 * s_a.height * 2.8, ); next.control_l.orientation = - Quaternion::rotation_x(PI / 2.0 + move2 * 0.4) * Quaternion::rotation_y(-0.2); + Quaternion::rotation_x(move1 * 0.2 + PI / 2.0 + move2 * 0.4) + * Quaternion::rotation_y(-0.2); next.control_r.orientation = Quaternion::rotation_x(PI / 2.2 + move1 * 0.4) - * Quaternion::rotation_y(0.2) + * Quaternion::rotation_y(0.4) * Quaternion::rotation_z(0.0); next.control.orientation = Quaternion::rotation_x(-0.2) * Quaternion::rotation_y(1.0 + move1 * -0.4) - * Quaternion::rotation_z(-0.3); + * Quaternion::rotation_z(-0.1); next.head.orientation = Quaternion::rotation_z(move1 * 0.25); next.shoulder_l.position = Vec3::new( -s_a.shoulder.0, @@ -175,7 +176,7 @@ impl Animation for ShootAnimation { s_a.shoulder.2 - foothorir * 1.0, ); next.shoulder_l.orientation = - Quaternion::rotation_x(move1 * 0.8 + 1.2 * speednorm + (footrotr * -0.2)); + Quaternion::rotation_x(move1 * 1.2 + 1.2 * speednorm + (footrotr * -0.2)); next.shoulder_r.position = Vec3::new( s_a.shoulder.0, diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index bfbfe39a9d..fa228fa181 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -990,7 +990,8 @@ fn enemy_5(dynamic_rng: &mut impl Rng, entity: EntityInfo) -> EntityInfo { .with_body(comp::Body::Object(comp::object::Body::Crossbow)) .with_asset_expect("common.entity.dungeon.tier-5.turret"), 1 => entity.with_asset_expect("common.entity.dungeon.tier-5.warlock"), - _ => entity.with_asset_expect("common.entity.dungeon.tier-5.warlord"), + 2 => entity.with_asset_expect("common.entity.dungeon.tier-5.warlord"), + _ => entity.with_asset_expect("common.entity.dungeon.tier-5.cultist"), } } From 080328941b958c07844e0c454ad700553eaaf4e7 Mon Sep 17 00:00:00 2001 From: Snowram Date: Sun, 20 Jun 2021 04:00:21 +0200 Subject: [PATCH 3/7] Adds alpaca and llama npcs --- .../common/entity/dungeon/tier-5/warlock.ron | 4 +- assets/common/items/armor/warlock/back.ron | 17 --- assets/common/items/armor/warlock/belt.ron | 17 --- assets/common/items/armor/warlock/chest.ron | 17 --- assets/common/items/armor/warlock/foot.ron | 17 --- assets/common/items/armor/warlock/hand.ron | 17 --- assets/common/items/armor/warlock/head.ron | 17 --- assets/common/items/armor/warlock/pants.ron | 17 --- .../common/items/armor/warlock/shoulder.ron | 17 --- assets/common/items/armor/warlord/back.ron | 17 --- assets/common/items/armor/warlord/belt.ron | 17 --- assets/common/items/armor/warlord/chest.ron | 17 --- assets/common/items/armor/warlord/foot.ron | 17 --- assets/common/items/armor/warlord/hand.ron | 17 --- assets/common/items/armor/warlord/head.ron | 17 --- assets/common/items/armor/warlord/pants.ron | 17 --- .../common/items/armor/warlord/shoulder.ron | 17 --- ...staff.ron => bipedlarge-cultist_staff.ron} | 0 assets/common/npc_names.ron | 16 +++ assets/voxygen/item_image_manifest.ron | 58 -------- .../voxel/biped_large_central_manifest.ron | 104 ++++++++++++++ .../voxel/biped_large_lateral_manifest.ron | 136 ++++++++++++++++++ .../voxel/humanoid_armor_back_manifest.ron | 8 -- .../voxel/humanoid_armor_belt_manifest.ron | 8 -- .../voxel/humanoid_armor_chest_manifest.ron | 8 -- .../voxel/humanoid_armor_foot_manifest.ron | 8 -- .../voxel/humanoid_armor_hand_manifest.ron | 20 --- .../voxel/humanoid_armor_pants_manifest.ron | 8 -- .../humanoid_armor_shoulder_manifest.ron | 20 --- assets/voxygen/voxel/npc/alpaca/male/ears.vox | Bin 0 -> 1160 bytes .../voxygen/voxel/npc/alpaca/male/foot_br.vox | Bin 0 -> 1308 bytes .../voxygen/voxel/npc/alpaca/male/foot_fr.vox | Bin 0 -> 1280 bytes assets/voxygen/voxel/npc/alpaca/male/head.vox | Bin 0 -> 2440 bytes assets/voxygen/voxel/npc/alpaca/male/jaw.vox | Bin 0 -> 1120 bytes .../voxygen/voxel/npc/alpaca/male/leg_br.vox | Bin 0 -> 1680 bytes .../voxygen/voxel/npc/alpaca/male/leg_fr.vox | Bin 0 -> 1480 bytes assets/voxygen/voxel/npc/alpaca/male/neck.vox | Bin 0 -> 2544 bytes assets/voxygen/voxel/npc/alpaca/male/tail.vox | Bin 0 -> 1464 bytes .../voxel/npc/alpaca/male/torso_back.vox | Bin 0 -> 3464 bytes .../voxel/npc/alpaca/male/torso_front.vox | Bin 0 -> 2904 bytes .../voxel/npc/cultist_warlock/male/foot_l.vox | Bin 0 -> 1544 bytes .../voxel/npc/cultist_warlock/male/foot_r.vox | Bin 0 -> 1544 bytes .../voxel/npc/cultist_warlock/male/hand_l.vox | Bin 0 -> 2028 bytes .../voxel/npc/cultist_warlock/male/hand_r.vox | Bin 0 -> 2028 bytes .../voxel/npc/cultist_warlock/male/head.vox | Bin 0 -> 4840 bytes .../voxel/npc/cultist_warlock/male/leg_l.vox | Bin 0 -> 1304 bytes .../voxel/npc/cultist_warlock/male/leg_r.vox | Bin 0 -> 1304 bytes .../npc/cultist_warlock/male/shoulder_l.vox | Bin 0 -> 1724 bytes .../npc/cultist_warlock/male/shoulder_r.vox | Bin 0 -> 1724 bytes .../npc/cultist_warlock/male/torso_lower.vox | Bin 0 -> 2800 bytes .../npc/cultist_warlock/male/torso_upper.vox | Bin 0 -> 4004 bytes .../voxel/npc/husk_brute/male/foot_l.vox | Bin 0 -> 1660 bytes .../voxel/npc/husk_brute/male/foot_r.vox | Bin 0 -> 1660 bytes .../voxel/npc/husk_brute/male/hand_l.vox | Bin 0 -> 3236 bytes .../voxel/npc/husk_brute/male/hand_r.vox | Bin 0 -> 3236 bytes .../voxel/npc/husk_brute/male/head.vox | Bin 0 -> 4792 bytes .../voxel/npc/husk_brute/male/leg_l.vox | Bin 0 -> 1504 bytes .../voxel/npc/husk_brute/male/leg_r.vox | Bin 0 -> 1504 bytes .../voxel/npc/husk_brute/male/shoulder_l.vox | Bin 0 -> 2864 bytes .../voxel/npc/husk_brute/male/shoulder_r.vox | Bin 0 -> 2864 bytes .../voxel/npc/husk_brute/male/torso_lower.vox | Bin 0 -> 3628 bytes .../voxel/npc/husk_brute/male/torso_upper.vox | Bin 0 -> 10652 bytes assets/voxygen/voxel/npc/llama/male/ears.vox | Bin 0 -> 1200 bytes .../voxygen/voxel/npc/llama/male/foot_br.vox | Bin 0 -> 1356 bytes .../voxygen/voxel/npc/llama/male/foot_fr.vox | Bin 0 -> 1368 bytes assets/voxygen/voxel/npc/llama/male/head.vox | Bin 0 -> 2360 bytes assets/voxygen/voxel/npc/llama/male/jaw.vox | Bin 0 -> 1208 bytes .../voxygen/voxel/npc/llama/male/leg_br.vox | Bin 0 -> 1684 bytes .../voxygen/voxel/npc/llama/male/leg_fr.vox | Bin 0 -> 1604 bytes assets/voxygen/voxel/npc/llama/male/neck.vox | Bin 0 -> 3744 bytes assets/voxygen/voxel/npc/llama/male/tail.vox | Bin 0 -> 1344 bytes .../voxel/npc/llama/male/torso_back.vox | Bin 0 -> 4208 bytes .../voxel/npc/llama/male/torso_front.vox | Bin 0 -> 4424 bytes .../quadruped_medium_central_manifest.ron | 120 ++++++++++++++++ .../quadruped_medium_lateral_manifest.ron | 136 ++++++++++++++++++ common/src/comp/body.rs | 1 + common/src/comp/body/biped_large.rs | 10 +- common/src/comp/body/quadruped_medium.rs | 10 +- common/src/comp/inventory/loadout_builder.rs | 9 +- common/src/states/utils.rs | 2 + server/src/events/entity_manipulation.rs | 4 +- voxygen/anim/src/biped_large/mod.rs | 20 +++ voxygen/anim/src/quadruped_medium/mod.rs | 22 +++ 83 files changed, 586 insertions(+), 418 deletions(-) delete mode 100644 assets/common/items/armor/warlock/back.ron delete mode 100644 assets/common/items/armor/warlock/belt.ron delete mode 100644 assets/common/items/armor/warlock/chest.ron delete mode 100644 assets/common/items/armor/warlock/foot.ron delete mode 100644 assets/common/items/armor/warlock/hand.ron delete mode 100644 assets/common/items/armor/warlock/head.ron delete mode 100644 assets/common/items/armor/warlock/pants.ron delete mode 100644 assets/common/items/armor/warlock/shoulder.ron delete mode 100644 assets/common/items/armor/warlord/back.ron delete mode 100644 assets/common/items/armor/warlord/belt.ron delete mode 100644 assets/common/items/armor/warlord/chest.ron delete mode 100644 assets/common/items/armor/warlord/foot.ron delete mode 100644 assets/common/items/armor/warlord/hand.ron delete mode 100644 assets/common/items/armor/warlord/head.ron delete mode 100644 assets/common/items/armor/warlord/pants.ron delete mode 100644 assets/common/items/armor/warlord/shoulder.ron rename assets/common/items/weapons/staff/{bipedlarge_cultist_staff.ron => bipedlarge-cultist_staff.ron} (100%) create mode 100644 assets/voxygen/voxel/npc/alpaca/male/ears.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/head.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/leg_br.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/neck.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/alpaca/male/torso_front.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/head.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/cultist_warlock/male/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/head.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/husk_brute/male/torso_upper.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/ears.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/foot_br.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/foot_fr.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/head.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/leg_br.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/leg_fr.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/neck.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/torso_back.vox create mode 100644 assets/voxygen/voxel/npc/llama/male/torso_front.vox diff --git a/assets/common/entity/dungeon/tier-5/warlock.ron b/assets/common/entity/dungeon/tier-5/warlock.ron index 6ee268d287..3ad3030460 100644 --- a/assets/common/entity/dungeon/tier-5/warlock.ron +++ b/assets/common/entity/dungeon/tier-5/warlock.ron @@ -1,10 +1,10 @@ EntityConfig ( name: Some("Cultist Warlock"), - body: Some(RandomWith("cultist_warlord")), + body: Some(RandomWith("cultist_warlock")), loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), - main_tool: Some(Item("common.items.weapons.staff.cultist_staff")), + main_tool: Some(Item("common.items.weapons.staff.bipedlarge-cultist_staff")), second_tool: None, loadout_asset: None, diff --git a/assets/common/items/armor/warlock/back.ron b/assets/common/items/armor/warlock/back.ron deleted file mode 100644 index 8f71921ef1..0000000000 --- a/assets/common/items/armor/warlock/back.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock cape", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Back("Warlock"), - stats: ( - protection: Normal(4.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/belt.ron b/assets/common/items/armor/warlock/belt.ron deleted file mode 100644 index 571cf5f704..0000000000 --- a/assets/common/items/armor/warlock/belt.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock Belt", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Belt("Warlock"), - stats: ( - protection: Normal(8.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/chest.ron b/assets/common/items/armor/warlock/chest.ron deleted file mode 100644 index 83879ed7b8..0000000000 --- a/assets/common/items/armor/warlock/chest.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock Vest", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Chest("Warlock"), - stats: ( - protection: Normal(40.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/foot.ron b/assets/common/items/armor/warlock/foot.ron deleted file mode 100644 index 6d94314cea..0000000000 --- a/assets/common/items/armor/warlock/foot.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock Slippers", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Foot("Warlock"), - stats: ( - protection: Normal(8.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/hand.ron b/assets/common/items/armor/warlock/hand.ron deleted file mode 100644 index 95a430624d..0000000000 --- a/assets/common/items/armor/warlock/hand.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock Gloves", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Hand("Warlock"), - stats: ( - protection: Normal(15.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Common, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/head.ron b/assets/common/items/armor/warlock/head.ron deleted file mode 100644 index 5efede3c7e..0000000000 --- a/assets/common/items/armor/warlock/head.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Head("Warlock"), - stats: ( - protection: Normal(10.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Common, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/pants.ron b/assets/common/items/armor/warlock/pants.ron deleted file mode 100644 index 6140b196af..0000000000 --- a/assets/common/items/armor/warlock/pants.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock Kilt", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Pants("Warlock"), - stats: ( - protection: Normal(30.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlock/shoulder.ron b/assets/common/items/armor/warlock/shoulder.ron deleted file mode 100644 index 105a3458c6..0000000000 --- a/assets/common/items/armor/warlock/shoulder.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlock Shoulders", - description: "Belong to a mighty warlock.", - kind: Armor(( - kind: Shoulder("Warlock"), - stats: ( - protection: Normal(22.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Common, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/back.ron b/assets/common/items/armor/warlord/back.ron deleted file mode 100644 index 2cd9450e7e..0000000000 --- a/assets/common/items/armor/warlord/back.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord cape", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Back("Warlord"), - stats: ( - protection: Normal(4.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/belt.ron b/assets/common/items/armor/warlord/belt.ron deleted file mode 100644 index ae60e2fcd2..0000000000 --- a/assets/common/items/armor/warlord/belt.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Belt", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Belt("Warlord"), - stats: ( - protection: Normal(8.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/chest.ron b/assets/common/items/armor/warlord/chest.ron deleted file mode 100644 index dbaee7548f..0000000000 --- a/assets/common/items/armor/warlord/chest.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Cuirass", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Chest("Warlord"), - stats: ( - protection: Normal(40.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/foot.ron b/assets/common/items/armor/warlord/foot.ron deleted file mode 100644 index 993cd6d067..0000000000 --- a/assets/common/items/armor/warlord/foot.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Feet", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Foot("Warlord"), - stats: ( - protection: Normal(8.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/hand.ron b/assets/common/items/armor/warlord/hand.ron deleted file mode 100644 index 36f79edf77..0000000000 --- a/assets/common/items/armor/warlord/hand.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Handguards", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Hand("Warlord"), - stats: ( - protection: Normal(15.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Common, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/head.ron b/assets/common/items/armor/warlord/head.ron deleted file mode 100644 index ba518e0cdf..0000000000 --- a/assets/common/items/armor/warlord/head.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Helmet", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Head("Warlord"), - stats: ( - protection: Normal(10.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Common, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/pants.ron b/assets/common/items/armor/warlord/pants.ron deleted file mode 100644 index b896347aa2..0000000000 --- a/assets/common/items/armor/warlord/pants.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Legguards", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Pants("Warlord"), - stats: ( - protection: Normal(30.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Moderate, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/armor/warlord/shoulder.ron b/assets/common/items/armor/warlord/shoulder.ron deleted file mode 100644 index c38f423aff..0000000000 --- a/assets/common/items/armor/warlord/shoulder.ron +++ /dev/null @@ -1,17 +0,0 @@ -ItemDef( - name: "Warlord Shoulderguards", - description: "Belong to a mighty warlord.", - kind: Armor(( - kind: Shoulder("Warlord"), - stats: ( - protection: Normal(22.0), - poise_resilience: Normal(0.0), - energy_max: 0, - energy_reward: 0.0, - crit_power: 0.0, - stealth: 0.0, - ), - )), - quality: Common, - tags: [], -) \ No newline at end of file diff --git a/assets/common/items/weapons/staff/bipedlarge_cultist_staff.ron b/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron similarity index 100% rename from assets/common/items/weapons/staff/bipedlarge_cultist_staff.ron rename to assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index c898788d85..0339622c22 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -555,6 +555,14 @@ keyword: "ngoubou", generic: "Ngoubou" ), + llama: ( + keyword: "llama", + generic: "Llama" + ), + alpaca: ( + keyword: "alpaca", + generic: "Alpaca" + ), ) ), quadruped_small: ( @@ -898,6 +906,14 @@ keyword: "cultist_warlord", generic: "Cultist Warlord" ), + cultist_warlock: ( + keyword: "cultist_warlock", + generic: "Cultist Warlock" + ), + husk_brute: ( + keyword: "husk_brute", + generic: "Husk Brute" + ), ) ), golem: ( diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 8159668653..6d6e8d75ce 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -1548,56 +1548,6 @@ "voxel.armor.bonerattler.shoulder", (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, ), - //Warlord Set - Armor(Chest("Warlord")): VoxTrans( - "voxel.armor.warlord.chest", - (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, - ), - Armor(Pants("Warlord")): VoxTrans( - "voxel.armor.warlord.pants", - (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, - ), - Armor(Belt("Warlord")): VoxTrans( - "voxel.armor.warlord.belt", - (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.4, - ), - Armor(Foot("Warlord")): VoxTrans( - "voxel.armor.warlord.foot", - (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, - ), - Armor(Hand("Warlord")): VoxTrans( - "voxel.armor.warlord.hand", - (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, - ), - Armor(Shoulder("Warlord")): VoxTrans( - "voxel.armor.warlord.shoulder", - (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, - ), - //Warlock Set - Armor(Chest("Warlock")): VoxTrans( - "voxel.armor.warlock.chest", - (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, - ), - Armor(Pants("Warlock")): VoxTrans( - "voxel.armor.warlock.pants", - (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.2, - ), - Armor(Belt("Warlock")): VoxTrans( - "voxel.armor.warlock.belt", - (0.0, 0.0, 0.0), (-90.0, 180.0, 0.0), 1.4, - ), - Armor(Foot("Warlock")): VoxTrans( - "voxel.armor.warlock.foot", - (0.0, 0.0, 0.0), (-95.0, 140.0, 0.0), 1.1, - ), - Armor(Hand("Warlock")): VoxTrans( - "voxel.armor.warlock.hand", - (0.0, -1.0, 0.0), (-90.0, 135.0, 0.0), 1.0, - ), - Armor(Shoulder("Warlock")): VoxTrans( - "voxel.armor.warlock.shoulder", - (0.0, 0.0, 0.0), (-90.0, 130.0, 0.0), 1.2, - ), //Rawhide Set Armor(Chest("Rawhide")): VoxTrans( "voxel.armor.hide.rawhide.chest", @@ -2183,14 +2133,6 @@ "voxel.armor.misc.back.backpack", (0.0, 0.0, 0.0), (-90.0, 0.0, 0.0), 1.0, ), - Armor(Back("Warlord")): VoxTrans( - "voxel.armor.warlord.back", - (0.0, 0.0, 0.0), (-90.0, 0.0, 0.0), 1.0, - ), - Armor(Back("Warlock")): VoxTrans( - "voxel.armor.warlock.back", - (0.0, 0.0, 0.0), (-90.0, 0.0, 0.0), 1.0, - ), // Rings Armor(Ring("Scratched")): VoxTrans( "voxel.armor.misc.ring.scratched", diff --git a/assets/voxygen/voxel/biped_large_central_manifest.ron b/assets/voxygen/voxel/biped_large_central_manifest.ron index 5f489af07c..2ecc30c8f1 100644 --- a/assets/voxygen/voxel/biped_large_central_manifest.ron +++ b/assets/voxygen/voxel/biped_large_central_manifest.ron @@ -988,4 +988,108 @@ central: ("armor.empty"), ) ), + (Cultistwarlock, Male): ( + head: ( + offset: (-6.0, -5.5, -6.5), + central: ("npc.cultist_warlock.male.head"), + ), + torso_upper: ( + offset: (-7.0, -5.5, -5.5), + central: ("npc.cultist_warlock.male.torso_upper"), + ), + torso_lower: ( + offset: (-6.0, -4.5, -10.0), + central: ("npc.cultist_warlock.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ) + ), + (Cultistwarlock, Female): ( + head: ( + offset: (-6.0, -5.5, -6.5), + central: ("npc.cultist_warlock.male.head"), + ), + torso_upper: ( + offset: (-7.0, -5.5, -5.5), + central: ("npc.cultist_warlock.male.torso_upper"), + ), + torso_lower: ( + offset: (-6.0, -4.5, -10.0), + central: ("npc.cultist_warlock.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ) + ), + (Huskbrute, Male): ( + head: ( + offset: (-6.0, -6.0, -6.5), + central: ("npc.husk_brute.male.head"), + ), + torso_upper: ( + offset: (-8.0, -8.0, -8.0), + central: ("npc.husk_brute.male.torso_upper"), + ), + torso_lower: ( + offset: (-7.0, -6.5, -9.0), + central: ("npc.husk_brute.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ) + ), + (Huskbrute, Female): ( + head: ( + offset: (-6.0, -6.0, -6.5), + central: ("npc.husk_brute.male.head"), + ), + torso_upper: ( + offset: (-8.0, -8.0, -8.0), + central: ("npc.husk_brute.male.torso_upper"), + ), + torso_lower: ( + offset: (-7.0, -6.5, -9.0), + central: ("npc.husk_brute.male.torso_lower"), + ), + jaw: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + tail: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + central: ("armor.empty"), + ) + ), }) diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron index 184d2a10a2..c5f8f2f087 100644 --- a/assets/voxygen/voxel/biped_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -1291,4 +1291,140 @@ lateral: ("npc.cultist_warlord.male.foot_r"), ) ), + (Cultistwarlock, Male): ( + shoulder_l: ( + offset: (-3.5, -3.5, -3.0), + lateral: ("npc.cultist_warlock.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-3.5, -3.5, -3.0), + lateral: ("npc.cultist_warlock.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlock.male.hand_l"), + ), + hand_r: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlock.male.hand_r"), + ), + leg_l: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlock.male.leg_l"), + ), + leg_r: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlock.male.leg_r"), + ), + foot_l: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlock.male.foot_l"), + ), + foot_r: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlock.male.foot_r"), + ) + ), + (Cultistwarlock, Female): ( + shoulder_l: ( + offset: (-3.5, -3.5, -3.0), + lateral: ("npc.cultist_warlock.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-3.5, -3.5, -3.0), + lateral: ("npc.cultist_warlock.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlock.male.hand_l"), + ), + hand_r: ( + offset: (-3.5, -3.5, -10.0), + lateral: ("npc.cultist_warlock.male.hand_r"), + ), + leg_l: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlock.male.leg_l"), + ), + leg_r: ( + offset: (-1.5, -2.0, -2.5), + lateral: ("npc.cultist_warlock.male.leg_r"), + ), + foot_l: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlock.male.foot_l"), + ), + foot_r: ( + offset: (-2.5, -4.0, -4.0), + lateral: ("npc.cultist_warlock.male.foot_r"), + ) + ), + (Huskbrute, Male): ( + shoulder_l: ( + offset: (-4.0, -4.5, -4.0), + lateral: ("npc.husk_brute.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-4.0, -4.5, -4.0), + lateral: ("npc.husk_brute.male.shoulder_r"), + ), + hand_l: ( + offset: (-4.0, -3.5, -17.0), + lateral: ("npc.husk_brute.male.hand_l"), + ), + hand_r: ( + offset: (-4.0, -3.5, -17.0), + lateral: ("npc.husk_brute.male.hand_r"), + ), + leg_l: ( + offset: (-2.0, -2.5, -3.5), + lateral: ("npc.husk_brute.male.leg_l"), + ), + leg_r: ( + offset: (-2.0, -2.5, -3.5), + lateral: ("npc.husk_brute.male.leg_r"), + ), + foot_l: ( + offset: (-2.5, -3.5, -3.5), + lateral: ("npc.husk_brute.male.foot_l"), + ), + foot_r: ( + offset: (-2.5, -3.5, -3.5), + lateral: ("npc.husk_brute.male.foot_r"), + ) + ), + (Huskbrute, Female): ( + shoulder_l: ( + offset: (-4.0, -4.5, -4.0), + lateral: ("npc.husk_brute.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-4.0, -4.5, -4.0), + lateral: ("npc.husk_brute.male.shoulder_r"), + ), + hand_l: ( + offset: (-4.0, -3.5, -17.0), + lateral: ("npc.husk_brute.male.hand_l"), + ), + hand_r: ( + offset: (-4.0, -3.5, -17.0), + lateral: ("npc.husk_brute.male.hand_r"), + ), + leg_l: ( + offset: (-2.0, -2.5, -3.5), + lateral: ("npc.husk_brute.male.leg_l"), + ), + leg_r: ( + offset: (-2.0, -2.5, -3.5), + lateral: ("npc.husk_brute.male.leg_r"), + ), + foot_l: ( + offset: (-2.5, -3.5, -3.5), + lateral: ("npc.husk_brute.male.foot_l"), + ), + foot_r: ( + offset: (-2.5, -3.5, -3.5), + lateral: ("npc.husk_brute.male.foot_r"), + ) + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/humanoid_armor_back_manifest.ron b/assets/voxygen/voxel/humanoid_armor_back_manifest.ron index 61f2a8225d..1459d036eb 100644 --- a/assets/voxygen/voxel/humanoid_armor_back_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_back_manifest.ron @@ -40,14 +40,6 @@ vox_spec: ("armor.leather_blue.back", (-5.0, -1.0, -11.0)), color: None ), - "Warlord": ( - vox_spec: ("armor.warlord.back", (-5.0, -1.0, -14.0)), - color: None - ), - "Warlock": ( - vox_spec: ("armor.warlock.back", (-5.0, -1.5, -15.5)), - color: None - ), "Rawhide": ( vox_spec: ("armor.hide.rawhide.back", (-4.0, -1.0, -6.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron index 3678edd514..e6b95396a8 100644 --- a/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_belt_manifest.ron @@ -72,14 +72,6 @@ vox_spec: ("armor.velorite_battlemage.belt", (-5.0, -3.5, 2.0)), color: None ), - "Warlord":( - vox_spec: ("armor.warlord.belt", (-4.0, -3.5, 1.0)), - color: None - ), - "Warlock":( - vox_spec: ("armor.warlock.belt", (-4.0, -3.0, 2.0)), - color: None - ), "Rawhide": ( vox_spec: ("armor.hide.rawhide.belt", (-4.0, -3.5, 2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron index cbe2304567..db7a6b80ec 100644 --- a/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_chest_manifest.ron @@ -142,14 +142,6 @@ vox_spec: ("armor.velorite_battlemage.chest", (-7.0, -3.5, 0.5)), color: None ), - "Warlord": ( - vox_spec: ("armor.warlord.chest", (-7.0, -3.5, -0.5)), - color: None - ), - "Warlock": ( - vox_spec: ("armor.warlock.chest", (-7.0, -3.5, 0.5)), - color: None - ), "Rawhide": ( vox_spec: ("armor.hide.rawhide.chest", (-7.0, -3.5, 2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron index 5895fd0204..617d459fb3 100644 --- a/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_foot_manifest.ron @@ -72,14 +72,6 @@ vox_spec: ("armor.velorite_battlemage.foot", (-2.5, -3.5, -2.0)), color: None ), - "Warlord": ( - vox_spec: ("armor.warlord.foot", (-2.5, -3.5, -2.0)), - color: None - ), - "Warlock": ( - vox_spec: ("armor.warlock.foot", (-2.5, -3.5, -2.0)), - color: None - ), "Rawhide": ( vox_spec: ("armor.hide.rawhide.foot", (-2.5, -3.5, -2.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron index de569659e1..7d3bff8625 100644 --- a/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_hand_manifest.ron @@ -150,26 +150,6 @@ color: None ) ), - "Warlord": ( - left: ( - vox_spec: ("armor.warlord.hand", (-3.0, -2.0, -5.0)), - color: None - ), - right: ( - vox_spec: ("armor.warlord.hand", (-2.0, -2.0, -5.0)), - color: None - ) - ), - "Warlock": ( - left: ( - vox_spec: ("armor.warlock.hand", (-4.5, -3.5, -5.0)), - color: None - ), - right: ( - vox_spec: ("armor.warlock.hand", (-2.5, -3.5, -5.0)), - color: None - ) - ), "Rawhide": ( left: ( vox_spec: ("armor.hide.rawhide.hand", (-1.5, -1.5, -2.5)), diff --git a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron index c92c63f592..9aa5dde696 100644 --- a/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_pants_manifest.ron @@ -100,14 +100,6 @@ vox_spec: ("armor.leather_blue.pants", (-5.0, -3.5, 1.0)), color: None ), - "Warlord": ( - vox_spec: ("armor.warlord.pants", (-6.0, -4.5, -2.0)), - color: None - ), - "Warlock": ( - vox_spec: ("armor.warlock.pants", (-5.0, -4.0, -2.0)), - color: None - ), "Rawhide": ( vox_spec: ("armor.hide.rawhide.pants", (-5.0, -3.5, 1.0)), color: None diff --git a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron index 5203c3c5d8..0b027a70a6 100644 --- a/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron +++ b/assets/voxygen/voxel/humanoid_armor_shoulder_manifest.ron @@ -231,26 +231,6 @@ color: None ) ), - "Warlord": ( - left: ( - vox_spec: ("armor.warlord.shoulder", (-8.0, -3.5 , -2.5)), - color: None - ), - right: ( - vox_spec: ("armor.warlord.shoulder", (-1.0, -3.5 , -2.5)), - color: None - ) - ), - "Warlock": ( - left: ( - vox_spec: ("armor.warlock.shoulder", (-6.0, -4.0 , -2.0)), - color: None - ), - right: ( - vox_spec: ("armor.warlock.shoulder", (0.0, -4.0, -2.0)), - color: None - ) - ), "Rawhide": ( left: ( vox_spec: ("armor.hide.rawhide.shoulder", (-4.0, -3.2, -0.5)), diff --git a/assets/voxygen/voxel/npc/alpaca/male/ears.vox b/assets/voxygen/voxel/npc/alpaca/male/ears.vox new file mode 100644 index 0000000000000000000000000000000000000000..1c60383e3a5b0aaee2d42227637a6e89be30e7f7 GIT binary patch literal 1160 zcmWIZk5HJ#z`)?^=;;Tf7)n?e7=k^cTzNnoAm9LECLjh1Geks2dAa~;5D|iz%kj-?HfsyGA6C=}2Rv=~vvKbhe-!K9(8xXStage){BiLYw zS^v4Yx&M26dynGLFc?h(R89l!>4E?Ib3*?=TG#jg)wao);cIA!DTd?*9v+_mAOOmr zaej^%YHbxI;9^QjO8+;^pZovdhPD4EwKV)sv(o&3ac2JioAZnRKU!Y#UrJc;|59I} Q|4X|g|1X`K{U4P50k>!U9smFU literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/foot_br.vox b/assets/voxygen/voxel/npc/alpaca/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..31d5efd9e241b8f20c8c1c5b688c06cbfea6fcf4 GIT binary patch literal 1308 zcmeIxp-V$i6bA6~o%`-n*ehxgldc&TEP`Qz$QYZbDBFTjgMz_gGzbPk!GU0qrD0N* z?EVQhx40;amiJybes72ftHyWW$M^2NC%k*PcYmv~crPNga;46YX)m%{X>CN=fEE0h zVm6ws%11WIS|O->DZw!bz(@(oB#4fb0PQP5b)W=seIt z*Oumg=ZeLm^*WFC)_b>lklR-TBcR<6`lXk>{FDy{7}BpOCh zi{_L@vsL*}4Y3{urZE&P8Y93wAO%njut~vY0LF+EKy`xpFe$-hfXj(p0ak@C0I#{v z!9D}qg4pJO%?P%DaRn(bJ|p9ER-d(o;Rh#l4`X&V|E9#H}KDI;P!M+9?lPC*t?hS_xAMtmP*s!pFPBJEFr@GJg%3g zYByJxe!V0~q~Cdw&;FY{-dxMc#+rORUr5@yl;P`@EHBPWx3(bNyQXy8XA(aD54Q{) AWB>pF literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/head.vox b/assets/voxygen/voxel/npc/alpaca/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..e1ca48e537988b6b84b2d5807d3864ec2dab7536 GIT binary patch literal 2440 zcmeH{zmFDG6o$|5v&(LSHiinfv!o@VSR*l;4G0npP*_T#2?Z3C7A6)Xl0af&VW>7% z8Y+AL1k0s^PI^BwGsX3pV2sJOl)K5Z?|a@e_s+fFotZB_yLJ9Y5xKH|a21gU+afm( z?p)qo3;wp?%)ff;_ML-Ia!p09sfepAp)#4t?1qQLtIKRIi@Qt#2}P|z4h|9IAxoi} zf)+%pb2Wam?>+ZkEZEVC<|mQ%35@C2(of{85-0Vy`A+G1+6t4)C> z6q%T@2b;}oax|zDE$T+ajeXc;sH5TZq3}&6!FaG>JVY=zbwT4L84m`Y^po*up-m>m z+R9#7vEJhT)Con_sI_gp?PWl&e#`z2@NE=Kd~)$QAn~F;t2%onhk%44ZxEwz^uh4~ z2}Ru??vpxwaD1Q%1q~962MgwhfDHO%jhFOAlRoNbBz=5AQ%f;_Is2s#QQV)b$QreF z_RF|t-0HV{6X4taCcq?Shmhc0V-^k0HrOvY8jw)rO(sSk%!2*Ww_v})GfE#X9*a7C zXFNX8M2oEP62X4y2jlU9Pkf;bn(>!q@csm6%e~Pe(;^2i@*>CAT6b&$Oprd97oL91buBT2Y>IQN8P9JqN&_v6V_l)sDKj?$wBbXasXoDub z6i@%tC=RI%pbyFg~enu|4)Ihm6= z8Q!9Jj*8#4SQq_do}`AvThWJrEPBn@F3z)gUz@p`xtsHAp4XlOP1K_K)=>xb>XT~| zEfhZg^y7Vrx8GC#kDZ;Jad>!m%IR-#`V73|XW;w0*T>^;ZjM*K{V-nt{`BPUd*Q;# z?0;+6-Q6AQ-}-)jd3FE9wU<8p;J<8dZ*M$*_Vf7T`LE;2ci)b$E`Bur{OR5}es+Jn b`sLv`_x{;&bmhHq^yv0DdiwQPzX1OLApt_e literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/jaw.vox b/assets/voxygen/voxel/npc/alpaca/male/jaw.vox new file mode 100644 index 0000000000000000000000000000000000000000..208e99b637cf3c9c25a66fcc57b47dbb8770c9f6 GIT binary patch literal 1120 zcmWIZk5HJ#z`)?^=;;Tf7<^b57=k^cTzNnoAYcMwW*}w+;)uv7PZ=N$0&GCc$jI;w zDDjPviQzj?;dh{#hd|+nLGDhD3_x?B;6FDv_kVA1?@>G&2BT?!%4wiIJ@9{jPU!zf z>-zq`+BO+8d<_jT#gN>HmiLbN?UQu=f9?mWKan oR+|4W&dmRRbAIvvN6RbzO9>19U+OFLe`$B*|D}_&|AX>B0Jq`u-2eap literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/leg_br.vox b/assets/voxygen/voxel/npc/alpaca/male/leg_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..abf878f73628da8c55aae19eadabcaf59cd07455 GIT binary patch literal 1680 zcmeH`y=xRv6vgk?dn4>NY9m&0VVg-?9O+-aWQdnxCU}0lnVIf!u3JC}nl4`Mv zq_X!u*Fv*w%6f&fGco<8a=cnFqIbFMSY^?fGJdATO)Py~X~G=}5TB zADkiX?(Hvb*_ahM04g#-n~U_2K~xF@P93BWE@^2)MYRNzUmb#>fK> zJm?8##CroS-b5W;xO#JSygFXJsgW~B*ZY8rJLe@wbYcJvM;8tPs06yf4g_v zSxy0|!YP{uSGRfs~xxr=!n{VJhe*!~;hfi|+`F{cJuYw2w literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/leg_fr.vox b/assets/voxygen/voxel/npc/alpaca/male/leg_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..c522a33500a15838e844fd5da3f201ed8b0178f0 GIT binary patch literal 1480 zcmeH`v1=4z5XIljH@g;hjj<6cz0NYNkm3Xh$B~GNlBAGSS{Sgfv9t(S1R@v^EF{%o zrKAvh{{+jlDg6(2w-|q41QD*aybp$bGjHCT*^k{P_jhi7khC?OZS&B#MtU^cyEm>0 zrx28Mh1l8Mn;jZ}vrm|}gL~V{+CkCu7R^BSVAghu(pj|B3@!$brt=7Lu(iEM0T*!X zZ#ofPqO$^D$SV#92O+3ZTV75d6x4)%f#6_e)9vX}@5Zg`e`}M;B+pJi<&U#3 o`Tp=tKD%=}e|~(K=cljo;`8ggaqVg@w$^fSw3~~Q7g>M*-zd&cbN~PV literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/neck.vox b/assets/voxygen/voxel/npc/alpaca/male/neck.vox new file mode 100644 index 0000000000000000000000000000000000000000..d0f5b038fae49ffa6943d8209cff8ce80c4ea6f7 GIT binary patch literal 2544 zcmeH{JBwvS5XbA;eO?A?B1Sry;iiJY2qMFCu2nK?J3xa`cG;E@> zk+~niQ0|E~^c$RWg7()dh%l+)T=?I5c2#v%^?CoTyD$A9BDc>k?m%Q6Mc%!*|Hje< zeg#zU47hvm{>9G;!|!7i@rXmTYzf?!!))0#W0Uk~um?7%XeG`_Pb!E#G&a{b z464Y|5!fw`01gbOp|?P<;@Dc>Apg(;=4f=>NaoU=r!pt@jQu(jLv~|J+gKlo9Vno%+#OcGIG&Z$<3snTj>8x z&t`H`3;j?0OqdV8q2yNIgZ_FF4=8-#pB5U6t_Q{B+ z#0_QkYSe4YjvY|;Nfo3d~Q@r4)o#4ilJRc2AyEza>CgWYuY(iC5) z3+JSg6F%U{p-}00y}uE57+4OQ=D<7$>KK^qKn(+Zqo2{=DLUYe4yfY?b>43nzQ7DU z2zEOZUtmC$Gi5w^8P^ET03(k=HAiMW(Fg7eA32hDWEV$rkIVym&%yV?13ggSd~*ya zKGENz4fK>6daV9kayc1r7xq9_O+N*&w3DZ;7T5y4D|THq^kku{Lj!8~`cr?UZeOi* z8D8)c{FL}g?2_0Md!7_TiPcM-3@8Yb)eT>$f*`+=-%H_4;e1)O6k=55id>N^_5pd| z4huc!`@n33c?5mZX9E-x={aMOdE9r&Mj;Omdx zZr^?SUVHNEx9zXr9$fG5ty|Z1|EXbFmezm$eSUD~{F?7;FTe1w?(FQWJ%0F8`~C4R u?fb93Y#+Y*O8eu-&)T04KW|SSebHWg{@HeQ`?+@Y&AoQ@;FH$B0Dl8<>sloM literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/tail.vox b/assets/voxygen/voxel/npc/alpaca/male/tail.vox new file mode 100644 index 0000000000000000000000000000000000000000..a3f11a8a2ec7f3dea4c9667fef6ac1bf81e26bdc GIT binary patch literal 1464 zcmeH`u}fS*5XNV|nSBQCn#4v@#p_bq22xxggyT?&K~V`QlOll>v9L@LND+t-Az&dk z9##of_WlW$_ex87|G?WIyd|dILcKGqI#|^LRcEL&kZ4nerff=IjlN~G)Pfke4xSCx z0oE$lI#I53BwDBCym^Lkf1pM|tJVmx!1ERuC$!2uH|HEWD0r6ASMGzU6J<=*TBmj8 znPRO8HJQ~$6jnO{v=Qny+C(kN`n=RA)Iglt)lzn^vN~&Z>LBLSRAQQ#pR%$KjuK<- z1NF7aiT(9VpCITKsH{z7>eJvzkH(C>&19Ho-^;k z{0`jn9r*s?bsT)!jO)KY`|)`3VN6yZ#pK6MOb$OrdHnwXxeiHo literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/alpaca/male/torso_back.vox b/assets/voxygen/voxel/npc/alpaca/male/torso_back.vox new file mode 100644 index 0000000000000000000000000000000000000000..c24885d3b999186ef62df3827dbfc59d59e41f05 GIT binary patch literal 3464 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlock/male/foot_r.vox b/assets/voxygen/voxel/npc/cultist_warlock/male/foot_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..42edfc7f12afb1b5b9a352793deb4e16d34b5282 GIT binary patch literal 1544 zcmbu8+fQ6o6vo%y`^-Q@4Yk9)PH{?wfm-BJE<$kz7~7%JN>S2I5sfKn2@)A%NSREU zwBsPyR4F2@i8!K}@L-CSj6~B1B$Z$j(im)vFAZso|3PDnFQ4CO8&gfK51!<(Mq$nW^HSVJ{8uV>oVD zn>jH=8RoV&(g1s{<*yj2jw_GkPFSpx6xETEEfn@r!(a^mMf!CYhP1HjI4oLq)klDu|E7{0w z7vu~G$^ymMaY>NgFL)#-*gPS~{#;Pqo`JT3OoUEt#yg9Tqctk%m=e4;FBtiOYdiAc z?(?81T8f&K4+TRmc+TddG`STOtHsFa78IQl?3flbE(zpC){mq^rXGbXxG-M433E?p z;ri|ZpzR4Xh#*LQBEOQU6N35o1TD*du zI>B(O;E&ZAbX4b~FW^C>qXg5vm59Dni|OMnnC$ffYqKcZmW{^Bt=RW$33|I~(cdPB zy(~z)DOh?>P~*-=u(Sx>H9IlXT92;MZ1hzZ;Ow65NcEH>^nxG#ukJ^5@CeSFJch^{ zA?&Vu3aPnKtY4WyMn(p5H@Q$)ScnR*2Q@pN#50v%1R5)F;JJECytM`MpLp=|)l%HJ zR)&vQGnEvqT^9WEqae~(f(x-KtXynCj#R=eK9or}>SP1~`QU-~zreoy+x_u<0@zsj z-}kSos=~S21j;LB(J+1*d9ggKek!#hbQy- z?YP}I7oS2?!z7NL8AWbS4z7K%9gCqnOtNSH?7uzF-s^DZ8itMoBj@K3`z(cb7p~yL zZ`ZMFa2!pi6WI6h5;`xf!{_tiCXXWN1i!(o3pT#FbG{9JU;j1EpYZm7X2(b*f_pVC fC;u9=lfRAK)%Wx6ox7!Z0J-(AprCyIe(U8=PdZRg literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlock/male/hand_l.vox b/assets/voxygen/voxel/npc/cultist_warlock/male/hand_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..14344bc1996a5cf420d0dc0e30cb59b9d6fe52d1 GIT binary patch literal 2028 zcmbu;VN8`(7zgm@J?A;+UZk2Pf`TETh8Ii&6eQ3t>P^wm&|-QeYE7q%Tyoc#-rcz= z1d-E}2yM%V8l$aA=E&9jV9YUdbFPtVesRvVKJ>k{)|Y?(S6j1Y_93?4&ink|`##UP zhxayb-c~dyB8~M8o4Cl0h{)E4Wa6Q);2+C7rg7c2J=yT74O5Yy$r|ZUa%3&9$&poF zlOr1h9ZHUj2|6sP2~v)$v8+igYw~228L2WOPu8&}MV@^sgtUdSPxeu-;i16$qJo`vbU?M#G2xmt)JHpu!o;@?m zjFcP&%1oJ&k|X2Thtx%SOb}(yD0@b`0~2M>D0@cPGs>RPp1?A*%t*;uX39*Nk&@GB zk8$in8m>VW`(?3LR<|`-?3Kk{tSxKHnjEiaKQkLIIvWFE>dmmsf2u;7qj@t~mYqCj5Y{B#sD@Cf8w4*E)FVDzb3 zxW2Lg*zh=NMbJP$&`&h5UoiHrU}98o!hAH8E`ZOaO9blpOXw=PBU`Fga!vI&`eJ8yzyB$o%fEep zd^-f(n*872zp}CtC#r|Aw0sz~eTOlpYYr}dEV#adukOeQVzC%HJ3H~*`g4%3G-jn{ z;rz+F|HFg%e0K^9apKJZtg7wD&LcgT-I|AMpD)DuH@);pf6$+qYgtY7cPW zJK!-sPOn z%Q=&mQ;x06OR3AtS)0cgjxBYipSq*ws5u{De1!4QoSJCP20^0>f(C0M-Hw{0rqqn5 z<|EzK2V4`Rlz3`JBPmh(HDC_s!HMGQrP_xuLt*14# zCXBH>lVklM9NQ3%1M3@uFrI5wSi5jNt<`ACQ1ga;vC)(d*HiOcqnxV=*GE&1R%tD* zVXO<+G1f80OypyXaF4KO5;Q8U(gv2j;`ss>?#~|63hNNoBlIbKUL!m=v5}n7Xt%LZ z{vYK%Q2tM)ru-+$J}GNc#w+9LbJU0>hImWOQX`faqDJ}emH&|YSz)~J42I`1^c%*R zw4+sGoJm{a9OuLud&C)gSc$Qgv6g#V##-j0=BN=zlz3+kTf_Tn9PgmZ8O!@j98uye zHAjs&qQpDib!AONm30xTCT)oG922jsL79hGVu*Un{xF}nN4zp0-;N_S-y@K71voly3WlGW zh8rtNfOU_fUIb0#2l5l?+b0-#S8!=qaP>-@OXGI~#y&gQ%Qch~?F@u>P6(*x9-i z9qR;LF9`N>Pm6rz1`368Isi_z_ikbJ%Y9j|OacJDSE zJFp9x*OOSW>`9CccVqnWY2@eUWBQZ=l$DjCDpro#g-_t=>KGEstFZCeI`rgbV&tQ8 z+`L+WTh}Y`0dtNH39elb{P?{f(>@=kx@s_XW)+I08l@6PrL_R{ZtXcpR|eD4 z({TRe-G6wXn0KeN6er&7!^-+z>^Rnq>D!BN{qwmvpPYeS_Uxbi597kUwr;+L^lo7P z$zgPTGK#m)UB>(0jAO~(qgZ)p0P8=zh|Oom5s$}lhowlA;8(bD!R@c_)_0rt>%aVb rg%j^Aw3$o>_s(%)=r3P5_?z#~`TeweV`nz*!SuS9QL<>{e(U8Ai_wPl literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlock/male/head.vox b/assets/voxygen/voxel/npc/cultist_warlock/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..93b41e876d24ae5c17687eb6ba1aaf3ca9c64e5f GIT binary patch literal 4840 zcmbuC?XTTM5yxkrAAW`KP+DlQ)B-|V1lvNP7O)4nLP5ZSHc%=W1A(Rzxs7S)<%R@$ z&+i;0DAZao5o^_^CWeZn5)ChqkOoNzF_jqK5JHSO|9~;ZH{)k7#-Krb;Z44oo!vRR zvoqhB-`=ga-m(0Eh}=Bbd<#O}K27BI&D*9HG=;w=J8%-XCc)1Zr}9N&E(s5GM&)LmYK3jBN0e zV(d7l#C)1$A15`Nz95UWlj`FryEw5f_qqKRIGcKjrnfeYtF!oKdgsenyy>$GlhAzf zp$~0uA0}P$eMXun!x}>0Mb90W4}Mf^?5mB#jGjP^tb31dp!prcB!iGkZ;b0BGNIRY z-^5x94~LQm*0^y*)?|i>x$4X)`82VXIDz0jcS{p-rVrUqOpsxAWt?4N?EB)9%ZgFLd z&(4qoVp-dn#K&-7Lrfw*d7pnSB#{fQP^`R~>OB|JlUeaYqY^ ziQ{C;z_omtG>9hi`#5bI;8rCr4wYngW-Q3J-y(89}r&kpHv|`PIlxk*J+C$h)c3&&cRa;BID}K$ivUTIE6fPj59g6%`bRioD4l{ z8UJ(4+|x~BW-oH(&?`Jkk>3%Iz9P`)&pQa6b zs6xFEbA#-tfes$0PzC~jg|UP%3gq5N9C%N?N*HGegMd$B{V;gq(KuqlxEgAgI*-I8 zwEKcYOfo&V($_LENg(1&Brcx1%_WZ(A0xJC?5tCvJc|?LrUvbo9Ax{}pYRaPr z>em7XJhdB`OA$ZuxmtLNp5bh@aNn9y6nr*j+Jh)*=w0RxaFm*ffY#sD9&kJ!h? zO?c%&q)&vHS*Jfy(~+JM$!(<8BfN{Qt#g)zx2;~-I}-Cq4kP!B#3ORY7|`)4av#q= zo_#!fIQI4IQ|PT;m1)c%*H00Rnx&BR&1h6RUuqmTzqhG7NAf zB>dzX8)B<}p~i`SNy9))JkrrKd|R{h6l4fyuF&%WJ<&5x*w~t;h5UvVA95<>SjcI@ z*TfwXxkxP!<)(tgaYZyEFgr#2;`cI`dmz?pNycE7KKx`Ps z(EKZd1UkOg9dEeK1IHWA%E&r1oy85Jv>2G_5>oHbOEi2Zh)D#2c@Nr|HPSO=IstKE zl+lInd}rxpys3oul;;iOc-M&M{X`EF=SP;9)#8V>1ma5%{1|FLP95%VxMeKmbHUWoi z1{T`_9JU#RgdOnMCg8Bmz+zi~XDtE8S_YQ2()MF61It`#zsu;rGFRGK;GF<(bL&-& zyX3dz=0%&eq`9&z+L_~5zoBmJMXAlJGMxR^g_R! zM?mr|g+0199~R(0YskVr1s`qml~`49+x6EB#J~Ul zs`58GJFD;Q6TRWN<9hDGzv*8VF4R|Fy}2#v^P7M9kvL`3BHg(CGM)O`)w=TF29>Fx zva_ljI!)#HB0c41(ZvsluAaI;FM2^V?-V_0ujuJdi7xt?=%qJzdgBA9=(a~s*KfY` zF}-e9bjyCxuO1cM^E-aKWr;4^u|m(AU8U=fZPKN?7V3&8m*}d)=jfW(FVMx?MbCRw z^r8czSH2=DU*PR zo!N4s9=La{&VKQ7J#hcEy6@hB>YImj^|_1m%C+a{O`o|?@7;R2?z~ZS@0Uamena$? zZ;P&9wnR6tI#0K+zgTx&w?VhATBJKJU8+xBf4&~O`x4#u`GM~I$}Kwk;9dH}Blqdd z*SG0aSA0^B9qIMNYtL!db$aHh3w8PO<+^6&3SEEkC-l>6SL)Q2YxLI7ZqTRZ&eo$p zT%mt_W0k)1)@uDeXC6B&`sT}`fBL=X%#I87*}d!Z`19B5Vp*%pWRtFz?Rtgm(JA@v zN8bNg;_~0_ufIL0`tI@n`~K_Jt<$G3Kd6_iIiwpOe@xHXdzQZbBhk0-64k?pb>+&H zx_kF-{oD;Ns_dQ7Gj^S!FFo^q4j)+pca|;Fr-%FX>W%yKo+o-e^X|p^*3Zw^m$sdy z`-s_p#=qIMz3#mIP2F|B>Yitg=-wY6({H`_ntty$C-kxhAJ?lNJE%AP;1#|7g%i4I z(| literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlock/male/leg_l.vox b/assets/voxygen/voxel/npc/cultist_warlock/male/leg_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..b2703dbb13052fe6e14ec1ace9b175fdcb1bdeb3 GIT binary patch literal 1304 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 Nmo<0U+4sBN{sGrS2Fw5e literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/cultist_warlock/male/torso_upper.vox b/assets/voxygen/voxel/npc/cultist_warlock/male/torso_upper.vox new file mode 100644 index 0000000000000000000000000000000000000000..68cfdd900936d4b8150136c018083200a753e6a0 GIT binary patch literal 4004 zcmbu>|F70%8Nl)TbAP+8`~Ez~FcB0C2{Aoj8lWJ7b{_PkU}$JDJ(9U5Q${WiYfR71 z+!W4v9&#EIp=}XSWBkx0bL49NV9qgebFPuAesRvV#y`+n>zAwdM_jXJ_CsfT?Q`AN zeSN;%*XMqo=WM;>?!||kbDR4cZ|C6lf5N%DHcpK9x&eRZq5Z(!_e^ZOzZ>xPNAFw= zewczESv<*$)wCfpeW=jbE)`YF65!aF@(t!!Z3%xIs)qm!$K~^z&Zl!2&{uSC<-cb>dTBz zVJ4)&dZAy5=lv`AdLhBE7g>kIWr$Pg$BD%!4w+MqnI zQilwIqM&wjB@9zx4gy6X7ebtjNXQ}f1xj2{;bWv1aW*0$L!cUsA|XSdD5z-BL*TrmWwH_OCyWu1kRebMRJ7<(tDNJN z^=KSMr5+gqML}h*r6v~UkxLv1l(-;-M86XKO8p!XdnU1GQooR^@G;S^M86XKN|PA^ zMIl$w5|3mVHYw4sM8Bv1CZOMh}vF@Dc7v~`&Aw!@jsA$nc)UqLU=Lz={ z&O<~(hCoqJ(V|Cf;XJRbM-%;`9vK2fL1nI`CKl#P8e|9*g#p;X=(vGVzl%6DH) zeW_`0uIy*xOfGW&!ZXHL`VH4;xLztso$&b(-m?rtkwH)$RF0LSGM||*oKw2zSH?;| zp~R{1&LL3L5{I=UWUdvF!2U|jOhSf0Q4n)8laL`$6htA941uB`X)~FX9F#akY9LSq z_FY9#ju0(pbEojks7d*3DSL|}D(|y}Cl}z!1$c4+J^J3GPra^R#Ifiga-YJnaI9MB zR~gh)`fcKvIcAQ+QOdxR3(R?PfjLhuFxN{u=w*lw8sdhyA#UlpN2%;#RPGZnk{Gj} zBJa-;JHB^?cRj+nBb+-TI&{R2*b(pMlc~?tvo;iRnP-=79Zh$C zVP2RQ=2D9zrCUKGX#o4&d0*j&TblYcHi~RcHivmAEyu7 zmTMQ-j`1ZnwdG1Xw0)&be|3!=dgvxQu)S~g=22UI**sgn@>09)3s>6qt!r%OCTDxT z=IqF~oxS>9XR8-2u#L->+P2kK+pe3}+SXV-sKQ+s^xMx9Laj zwWl6`(5AjMVK-d=Svz@r*3P_s*xI(Wi_V{Gix)4p6{AaR_0^xT&#xS{@%1b0jxVmY z{d+I56F**Je|lq?z4O*``yux{dCb|HuQ>bj@10HUxYC~Av&v4raFfkbad2q@7`@+y7eV%_SkdBZO>0n+A}Y`Za?_V8N2S0eRkuMN9?vA zy=r&8c*e%Y#_T;F#VPD>7S1?(_t)p1?_KuS|C;Ah`2OdtJ5Eha*@wsW%CUdVb-};Q beK7v0+=pu~+3>JkwD#+^@R}1Jb-w#2;~Txo literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox b/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..8eca7482a27b3f92a3763e4af672aeba1024f42c GIT binary patch literal 1660 zcmaje;ZIvt7zXgS=bTm|I+;K_$|%U#pk;wk7?i=V4C+=8Cqv0r8Abyc1c^#aGn&R^ zs}j(ltP(a8v7#Y-FvCeI(d+|~h2Rph7+j2B7P1)s17nO|9-q4{W=7m@^2>dn_uluM z-nO^<_{pLf5$R|SKgW{{I7GU_k6wok#WXxO$_5UQl!a{ zDE3H^CPSjxBSo4FiD8cvX)?r($8DrYld-acnKW_tH*KUylh~L^ktRc;*ds-n42fos z6lpRfhCNcG$&lFDBSqS(9jr-2abLxK757!#mzfl4G9-#UQl!a{X!b~vCNa#UNL#g? zHHm1huerYF`kL!AlOj!qM6pMTv{h@?WD~ujtUJ7?^i zv2(`G8D>(XNi;Jl(pGI)lg;MfjDz<(ct2~>B$}BNX{$D@>BP|^&HTOZ9N-a;$8kF; zI5xY6Jvo2k_naK8u69_La5?F0 zd8icouLv@R1dk^K*;4}Nmx7v(OtcMWA#yGo?=2UgH7@9!7QDJB82yp6oo;vri%}By zp*9^v{zwjrC*APP7ouvt6s{gY$vMIP8A0QUKwjYfu?)!c4#-jtCQ5f=;Xp2K9?l2a zoK zeHNWHZVZNs5$i0&OurxT7wa%H(1K)tGq5p-@;y#8`U}zibQ$`)>oC+NNSqd=-V&^Q zD5&+g5%!g!r?vtkt@Y^kIWbt1kIAEZk?yTT{NMBAhZL~2_R#0Abl0M} zq#a{tlG{Fib#*l^)TK~aHHU_Y^TUH79S9`G>$wRWJ=s(}Tb)U7?sjdx-3;?4S7m)ZO zjSrTt;p6W&aqx`^G@VbO{nHh6UD-r17{qOU6v-g`0lg{M`tI)M+v5N0Vb}Q*-g(cg nb1W9a{TWy1|G8!r|GIWBZ`Zs3-rYxrv8(=N->^)(|a8{zf7;w*>!r`u4c{@#kz`Y%GjJ-lTndTX~xN?$)m}m$)m|*;z|e` zGHCJ`O4~Jgj1^h56?qJ$$)m}m$)m|*tR;^okD)YqG1NTX;@utwIN&$e)CYJ_+6;&Jcz&>_3+HpKmrMn zzQ-Z6PeayRNNE*h^b3juh1h>hkklu5GA2kJ7r4F@RJJCgxjzM=^Qm}$IU7w;LEEI@ z^##GukG$LFMow=&3ZhqTyM7OG12;ZV5;fx0prf361O@9xIJ zXZiT$rWbc^72^}uT$&SXTo?TMlOWPtge$QMtX*xyzU*?i(lg+8yWx`|JhfxzL;JtN zx%^-M_+bXvT6<*wrS2*;6trOY%*3|+S5#EsV)YD4%VtqKdI6cSOssz{xc!O%b93-` zJQy4t#Pi1%A+ZS32hy>8`QAHxhkfMa5Lm%jn* Cie54R literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/hand_l.vox b/assets/voxygen/voxel/npc/husk_brute/male/hand_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..f4d8d5d139b93c831b36b48a0c6e086159dd407f GIT binary patch literal 3236 zcmajh|8Lb-9mnzaIp_U8pWAzTZ;O<6w4)$ngO&wGVWkX)?VxT2aWa%_mEo5_HiAT3 zOf#CsWUKe4Xf_!VHWLxiH2h$OlT@PF4@ee*OUPnyG5)fU#rPi>WBldq^A2NX#O)>z z&N=T_KcCP0b3XTT!~Q3qUU61L_Kb{uooy0kqN9Hjd&ybYnVoJv?CC*2#X)Y+aQe(^zqh{0)GUv^l7eRC`iq;cU zl~89qE2Q=(t1c_i3|!$WDw;zB~vn}Dtki)F)~CXsBxU> zM99>TGCgJ1V(f#>B`8dcK8-%D5rfqebA<()$dG94kIhBK#Hg@H21y);n8+9vmdGH= zaZ1LR7!{^u5aT#RBq+>`Ug-@fQ)3L0+0RU`nO-x!=DLJTuelzPm@ABVhD5SRhQwT9 z$gCxiB{C%D3PXk{ndU}RGUf_HW*v+kEH@IP!VoewBq)LujVJ}rz2LbQ^jXYFDCm=V zpw3)jtTQAQjer=*A{h)Bk~l6E^hw5CVaTjS$&?Ie63<_hNAxfrXN(P0o&WypR z8+9wuA9cncE%epGzP0dtTk6Irp@qJv2kMLpLx#i_`XXaYj0!`Bq?SfVWQmMXVaTjS z$qx_a-w9IoY^IXZHFeOJcYDO4t0VaO;F=hg~6l0lUW8AY>h)S*V5 zFj zP#7`_)!Z*E(?U>+lNC=3}zY~%XWp)h0=iMmpU!j$u%Xx5AxQfTKI?c8fS_u9_=v5u^f zkrL~~8W~AhD{Evt_4s2WqIdqU;e2LhX8eQG;!m8r?)P>4!~fRN;n%M1X-59W*sniU z`*5dkJ@BxPeq+1$o!{azYA#31E*C!Ka=p{r_lS2L6JI;J+8=yVymVB&IxD{Tlz8Va z#5e7!_^xB^KK|lj|K62lzH>%=?-}v0UlKp@2aes_?Y&1<`l^|JA6yvrp2-eh`Es}S z&oB24H&%Ps0r6EYia&T(eA`uV`6Ab!F1ehkxm@n>ldBi`#fO&odyn?G@A|ZF74b3r z34g_z7sN09Q2g3O@ppd3dRY9zsQ7Q55`X_W@p0BK>=!?Ei29WHjy~~&L*i3A#s7KZ zobTP#?MFse`t;s4e)jNy&wOdKpM8FZpFTX|e)EE_y|2@^4J`NFpIPIF_iy&2yToUo z6+i!N@vA=&AMEY+vHn$lU~rvJ?%d-0`#b%}rXGL!@%w$@;Cdhb!iWz%w9bbgeZ&ua z?OC7x=D2rvE%t?r4ZrpFIj>YIJ~TAs{r&yEd|8hVu6w{A8R+xTZ5#Z_&u;Nk-@Vr_ z{dA@O`JH}$|J}9zW3IU{FMjha@xT00eEP^5e|>hNUw>nVKd@}TJC}5McXziB$q8?( zE&AB|f1Q2#fA{adKkt6~`X}E1`tCs=S+(06&z-*O{cqg3(O=zs-q&xq;9F0=zCNFtn)1&*aoJ^d+Luf&@hh+0d4}KNK6-n5{nh#z-@f&X4z@BZ?BzcRkmPp??}??pLaj;+C`uJ`GUW4`ECEv?{4|S-#Y2r zUpnu*e{$9Ly?M)rhll+GT9Fd`@1Aan-~R2L{%-UA`lOt<@Wc14IZjVc`$yOQ*8G36 f=H$P!f3NRW`{>`^``9tRXUkW-XZ@wS9WVa^eNjs> literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/hand_r.vox b/assets/voxygen/voxel/npc/husk_brute/male/hand_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..09a0652069109e09f3467b0cd2d6c9aecd60fce2 GIT binary patch literal 3236 zcmai$>yOq~5y$6T=KP-fE&{t{DHka%?9xEFluMzw6t?YxSSd={mEt9kmLSo6Fr;iY zChhur@}Oy@NN7!ph=%aO6e~fZ=?f$c!6u|J*cjh5q%r;n#u(p>pR*WKBet7-IdkUB znVIvQncu^nr=D4OT10kk8T|r_oM?#b9vvHDnf|NrZvke2XPzA!{aRM=*Y8DCQzvTb z29RRvIIVRxrZTB^V@%y5YFPyB24t@~9$oB8XmupE%HZRX2o$7{N*8;(A)o^aT3y&EKsM{1NLl!XJDV~1`LfDdJ&2NLxwA_%c8d?YT& zdLPGA1c97*myh@-mXEbg0Y62^TouUlR>(b7htCQta;(Bx1>cFf^>kdWmsZHX0?!3~ zQGxR;C-egg1$USoMW+RK5;|sT`hM=q z8oklr9{g&p)I{Hc0?wk=@ZEre3c1$Evqpba+1EK%{YK#Z8<>vJpKBGoJedel0J~gR|LvCg3wn$L2$@G9pBvyDLTpV-4MPRo|-%Q2_$Tt)W(Cb=S&^&@Pv)Szay?A zw}QA{kjb&&UV-l*l}-dI%$KWlf`c2NAb4b;AUNI+)WJ>W0w~-BVLqgauZ-*iJ-Q%p z161I~)$mJS0tLY%0|mj+dq5q1NG&1=QpYDcY48T>;HXVrg%w%z9@+C=Pi#-_4xPiM zaMYYL@r_bkqjb5x_;=(`IC_Md39-ayy9|D_JiX%c88b`%&Q*~4rf@&uPszo@zo(ua zPCYg7oO}54*n94I;hY+{e3t!AbD!_ju*ty3bS~Mhfu8)yIWiN`F&B9ieix86?~$D} z$qhJUbS}>rtIsRv%6VcRnZxLq#k>l0i>!H{W#K#FnBlzUSQbQt_7!XiQklaiMk}}pA;UG=QqQTJLTQr z=_elBBJs}uHH^Q>$w~X@q}Y>ZuG@XH{$YQcHOsDD+nJB-t{lMyvJR5LmE8I$XM*1J=z|FGDyktO!v+hUbNV$CVBnJ2{hej&DIXWh0R?zOR( zX4?0!%(HEiV!KX>edD6ou|IHk*MQAGxX2by4%ynv!#1})%ND&dU_<8@*vcDAtbecA z;+Mo8JT12As+fF<_!AYAQ!SHAv+Vei8Ft~J+4jMsbIrDY);5aRDEJfjD>(I{*u@`- zUArLm-mlmXi=7)0`_0p0A3iTO#{R`UVkh>aKPt9$P;B3Nv7_6>{(0k!?OHQn2S*m! z#IB`w`oJoi{PH?G{lZo|d0>m#&2zTwzCPQuYJu(e+)_KRXPq6|E;jX?*xB!hUHzfh z+W7-EI<(mKu3c{JZ5wRQP@f%KGuK{u;(oilZ-tG0af_{bXt@nP`iSlS`g1n%tuY(u zpJ|sbbnMo)ZUm{ZP(x0Y7fj?Wqq^zZD3%)*2^*LY0db=_rC!z z|L^_w`?F@ZuYcKnudB^$#QldHD- z?OQfHJZvA4id2C8-NG%g+rPb&-);Kq)6SW~={d{m#KeSsd~ffZ|Ib+#{_E`D`@88r VZhP-zhwYvXU$wa_F5d0F{0j{fOcnqD literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/head.vox b/assets/voxygen/voxel/npc/husk_brute/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..b79caa6df9fb0d37492a962326f0170df4694047 GIT binary patch literal 4792 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox b/assets/voxygen/voxel/npc/husk_brute/male/leg_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..ea0f9b49e7f37e2a58267343aa657998a528bc89 GIT binary patch literal 1504 zcmaiz+fQ6o6vo%yX9kIAr7{d+Q7QX_!YIL7A@nNerYakK`9J zc}6gQQLsEGxcw#fLBUK&@bxjly;Fh+_h-5V<9+l;1uZ^7Z$J=j75uR}jm{bm20}%M zb(UhPzY6h}>o9e?1rzM;-nz?j$r9yL2bSVVSh1t zYRfU)T90nO8v`|7oIku9son}iUTj9yzH$T)9zfq~ClPxq0#8mBQgfqNzcr1Fj0^+< z0r>rX6y$kPTfPSes(c7FR^sS$^%#F|C+4pf;iubv+`ChTD?BqbD_FZJ`1uDxY@igE z6V+I`-hw@ORd8qLz~k{CAR~Bc+xCaff0_64fAizJB(Sma$oVTgwP-GG$LOhvE$6SU zuEvGBBq}Or&@grmxrtn?UK8AXg`e*1EPOs6qR}XxKe7Nx#E?Cljm1k3-r>8PBR@YM z7v7&lQ^N%MJ{-l4-W=TdVmB5extJ&{{LlTHJX7mL*BXXT10$E_koYWxj}~s>lW*6t z|Lrj}olBzq(SVu4z#C^6R=>)&QS{H15^Ps;CeqWD@|Md&P*jOyKY0ZDP>AyK^ cmjCqqYyWrsR=GP54Pi(9tMFFLZ&gSB1f&~DYybcN literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/shoulder_l.vox b/assets/voxygen/voxel/npc/husk_brute/male/shoulder_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..f5b43cfc8e8f872c5c13e17b26aa9dcb9bac591b GIT binary patch literal 2864 zcmajgUyM~(702;)_TFplt7xSHLmB=`X<>#2%AfM5P#g+lJ0Mnyl6IsR4WuPVbci8k zGBIh#dvnp$QY5q{;)sUuV2YI>QTu?TA=rd81{>o`LmK0okH#2Zett(9QzN#Me6rVB zzq`*li#>DM{n!%=PMO(`%|oAKu{l%Bb`1>=er)oBpB6sy-ulFo!$W_K$*$RN8ne_` zH#as?;0UgpWZjf(B%{C)Xfpjw9|ev;Q|K4^C~yQCr|t5lEF@wQhkU zxK7rLWE5+iX!ZJBhCP#rIP+^4}sgR?<5vVXH zM{;r$I06+G;0RP$W22NkWnfbg1Xk+O)dH@o(V@FS>gOkx4^Bm!%C-V3g=&#zc7Dc{=)o) z`AgeU;rt8pvo96qCr40MdY0Lr$&oYng(Fa5g}jg>7jifP73QVgAUXGU?oaIq>PpXo z=OYF07rY;wI_TBOtddnSluCx6uB@rWJzMl!^byp_yq(QEh1JbDf9L$2^LOTV=BG~` zjWfS9zjvBMo}BsFN9_peO3yO;GdVJKfg@01g}jg>Qx`Y_73Snl&YGS3Q#*pX(z9^R zpFDU!)&i%FU_YAboIe>#B|}hG*3_ck;+b&jXid%@oP98RbW#(1S4XG75l!&B9(-3v zC!@d-sEI5GbCRLJ5vcT=LRQF7;0St^wQ-(>i~>iXI{ShQ83m3A_90dJDDWD5fAhXA zuHmi8cdy+7Zz|_gdFR?Ltj-!pnO>#`rw-OsD&NDEccjM}tjXy)pL6yis8i4jJ{Nor zfn0fB5B2R|x1^GVs&9!=e0nt8~yba1imd(G53X!`iLY1(m9&(BP&cTCZ? zLsK>U+%$dX(p+sFGwnQS`s#Vp(ciOoXRqcRSg1u~{aSNzK(h}|*TNTi)qi%rR$N=G znR`r&o-^Hd%Czya$-cnzM_aO!cgQYG*RjQS>fHS^^!7uurEQQjpy^kSo8EcaG|ct0yG_UU(LZ9^(r4Pc&U9p}>7Un5Yv<}-9T;4w z(Va_lYX3@&eQ~W$J+nn8_HUN1pV890d$e)od~N^q67Ao;RtLA4#-B1xeA9IKMbnyj zy&CFYq&;hv>G0O|+TGuy1FL82g-7nu#l6cl{Q1pVdH*sEJoKRUedQ^QetlTIGpFg| zxsGnUaavQROwqb^>(t-hulaLlYt6EI_29}r4Q^ba$3C-O$G<&C=YPCVe|ocD@4U5C zKjfJg&zi2kZu;{dOrr;u=#}wRy87xC-8*-sdS=X2Z*Q;G*-?Gsjypea{#W>S`G524 zcN5ahs~MtylA^RPoKE${Hs>2(o1V6w0y-GZ8-M4W{uC%wV#;Y{*p;&&#JGl zPe+a%(PtmMAR8amjKec@>E&Bz_$}s`H*cO^YM<1m4JWkkyB*!Ncc$L@`8~QcJWD4Q zEcl;)|H;oy-s{O-*LCFCSnH2%|z`rd^%^n>5t&;#E%rcKXJX#0;YYu9TxG%zrr zcX<_SL4Q}iVY>P2Tkm(1->(nL`78YQ-`V6kIy$QNU+eX=|H&qc|H|IGzFqJApPlpY RA>Fn9%bLCX{O$JJzW}&I3@rcv literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/shoulder_r.vox b/assets/voxygen/voxel/npc/husk_brute/male/shoulder_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..ccb9e9960a517a9f7955677c7845c08c474e604f GIT binary patch literal 2864 zcmai#Uu@P_8ONXV_xCC~nUr?4P#9x_mIX#(r3{Acpl$_mGL&qUVKk79AkmkYW;Bh- zR^MM|#3^RMxC~Z0Bt4D!XPCLOV4)Hs7w2M~3K|xe9f1#V3#xTa0yT zkT;X7!oNXmimfWdx=H~%q{IjTe5#X`dQvOJiWt|-F}HHEc1p;h%yXT5RY!*$t(|>t zr+{pXF5`pFxn^u+){W$L&D3BFo(uG+Dx*k`UY{c!BTJ8QZ|YQ;uE zpK3=Bd}Zwbv5eSLHgdYAQDgHT3vkuiY_$Pgex0;^)n`BF!uhRC|H4)n;Q3lJd{ zs#u$I?U<|DJR|)GRn_tZ{4>3Z^v;`WXZmQ#wG%zf^wu&udL8Jy!zbY58|9l2Ggo(P z`37~AIrsu+Ez!R~k6o497F^pRRHrUx6_s@?neMu(^yMeGZT!1lCW9y70@K zcjgY?jNTZHn1nvg-38VqCgW@5H*y8ec;ZgG9LO75v7C9{guvW*A5!+5vp^4g(=j^U z1kW7_;4|+=Bt8(Auz|(Ubl5Be&JQuX6+YpEujBoRMTT7BVk9;a%elrUgDZ2^%IGad z>W}n=Wbw#++~OWw?VDK(SBGxz8%hh}or4G{wOD;RRQ zXXFa#Tv@NgKp-ZTH`bFolaqB^c^eAIj@XF5hk$=BePeEO_0t31*bE*&$GaLCbLo|5 zFOWU?%RB9;51et2d9TfJ=dd~6ac`x@QXA`Ii;MwV_T(>6b7tSssMGPCz!|;q^u_UA z!6OIkVQw$fL0kY24ieuv22T(9w%{PKml)B32L~w;%YH)H6F5lay@3E893}sdx?=p2AF|8h5srz3yH4d9T zIc-{S!qoY5(}rF1wByKpjX%FY-@UX%+ow#sPno`U!F22o#P04^@1f;dG1afZ*JHh(4jo^4r_MjHQ13k4Bkj0b zo6R%^e}cclspm`=erURK-t^Wlk%vv^Moqtd!u0Mlrg7xw_L@!{KtEyH)@Ry3WSZD+ z`q#BH+P$G$henrca`!5oJ~*JMFKyK6XSeC(!4c{DIjz2@Q(Fd>YUgKG>EPatI=sU) z{j}-qw@jCRU>fZ0)>!`v?HgR9quV!WZ-1u_ZRpX9kKU`<{cAP;g%J%rutviVKcoX+ zeOi;>7*}`K0?nSUb>q!5nm2ErhK7dJ-`}sLOL{c8<~}_%(5KNY>-6|%H|fN87VE-K zmg~=N_3PcYSL;>QoSiXUf5Y^bKbj^Ftvi?DZMtvCfI1g;sk^&dLv~D`y5r6d z-Ty1}<^SzpzdtM8y!w&*U)w#Xkrg{tKXdZ7`(M9)y!vI literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/husk_brute/male/torso_lower.vox b/assets/voxygen/voxel/npc/husk_brute/male/torso_lower.vox new file mode 100644 index 0000000000000000000000000000000000000000..fed77758eaeef7421560a33bc1600e568feb74f2 GIT binary patch literal 3628 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/ears.vox b/assets/voxygen/voxel/npc/llama/male/ears.vox new file mode 100644 index 0000000000000000000000000000000000000000..905e7ae7d64859f777a6a47aa85d13caac86203c GIT binary patch literal 1200 zcmWIZk5HJ#z`)?^=;;Tf80N4rFa&!>x$=NGK)?aSOhC*E#1WBEo;g4o1f+l%D83UY zzLSxWVJ8zK!)aC^W&^Sr85no60Wkw3BT$YJD8_i29mHl}0*W&M#hHNOOh9oapg7Y` zCI)7pIm|#YW}rFDKy#RZav(O#PF5fea(8lM0J;kb{&RD4|M&Lx9>rL~V9&HdnuZH7 z4)B^UE+T?g{{6Pb|L<29;8e3R(%}EnF#Z1Rpx}RJ6OI4gR=WR#9gY4+yP2b?e}DbJ|Cg6`|F17A{l8`T zQWQCuUtwzQpWKWgAMNJ+-^tkUzmk;X|831t|5sOs{$Eh+|9^U(_y1#4mSd=gnMp6& zN?YT;Dc0I{*D_E&h93n*5g%7W`jnE%1M7cjW)2 Kle7PW@;?Bh(+d~? literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/foot_br.vox b/assets/voxygen/voxel/npc/llama/male/foot_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..3c6f4129fbfeac9c7423fc768edfb94014ad869b GIT binary patch literal 1356 zcmeH`%}X0W7{=duXOoRh4-JZk`cp#EfI7^j3G)ySra8(WR%d(vd=P<(?Hc^l`x!V zBF_c%HOEB-RjSy67)#&gHBhChrSCBB6bw=0Fi%w{ZzM!N#B7LJDlrn~9${v~^ux?j zi4m7sm%dA%sxJ4SS~q7*BqthSHd0g~mbGO~jKi_k6b(@#mNn5potomy=feqcg3I{b z5RFFRdES5iatEio@BZn%@D1F#e?wi}o%5xWRg@0jR?TG79q^~yarC+i`!Cuma#OAK z`0?$k!n^P9;QZ4E+?;)^dWLvBUUe=wYb+MSNOudo{x+l%U6>u~smPbUp5y2B7pyGI zqK)?BTm*bI9z^({r8jDoAYq7b8stP-t)e+|49ql w>udjvMMqEjCw%)(u)?CdH#_x%&%E#azVAKWJec{Jh4bqoaIK(Aq$U?bN%qj)XMEp>Buf&KLwMk%%EHWc18i;D3s#Rm;O`yc$ zC>DxZq-yl2%|bPcjHozOQKzcJh?odDlR>jb#7=x%w?U+I=8Blh(r^i64M0h zsENfoBt<_J8WBw~ClwhHqb6q5(zdU}h$uBNB1TP&%ubCJ{w^!t zjR?}|G(6Ay&j~yDw7ztzdx`hoYWL@|*_M87_bF=I_nYPffck(`Sta~F@JG#9AlR+;X-#8c2_IdemsZGsWrh=f8@> zeLWcH>^Pd^*~1n18*6y^d=;h95sVIA#Ps#6@UG?2-I2kgk+bk$l;OX+i}>gN1F6C( A;Q#;t literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/head.vox b/assets/voxygen/voxel/npc/llama/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..7343d7c3a4a15cd5ca0a6e98bcd498a7a31cc8f9 GIT binary patch literal 2360 zcmeI!Pl%Oe6vy%N=Xc(F@7xI*6eCv=!5Af)36&N&O2%+Wt08g5HnWr2R#ykCp{8^$)_$dB!nWfVitjfP_T~qjvNW0`fNakg!+0&4IfdD zd^I6zpYhu=Wze!A`+W^biUbzMDzkr0Z^2FxRn5DGqwX$;9AY9BF!gy1vuNC-ZT)fm%5eLWlO9qgU# zo$Q_Lo$Q^{gs2M^%)~qb387$>SG~xQ5Q@yYJnJ1f5<-#LfP6rX zgiw7pBtt^*QBGq-4^jIJ&yi4HkEszR_7r=HJ;k14PqC-ilRU@~NC*W>u_rkaLXnwt z)kThkP-Ip*>qU-)P-NC=)jM(|gd($n&ijBI38DIINQQ*qBe5qv)YmiA2&-wrz1XSv z&KBR_a{i+eZC zz3}j^_WQ3tZpya1%iVZ(^Yc&I&)Z6}_2 dvQ3^k*mm!jYwsMsx2=7++}1vRwe|o1`~~O{<%j?P literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/jaw.vox b/assets/voxygen/voxel/npc/llama/male/jaw.vox new file mode 100644 index 0000000000000000000000000000000000000000..80be1dbc24a62844b70f644f1d75496ee8857a0b GIT binary patch literal 1208 zcmWIZk5HJ#z`)?^=;;Tf7?!XwFa&!>x$=NGKmg=2umLeM5JyBtd6oca5Rd_4Mka=x zOh62j+{wty@P`SAnSpGeraz28%ml>DAT}$I4aAI$j60ctn1P9LCnFQ%1tuV72C^BL zfqZ5lABdSjYzC&COh62@U?(FZ(*-6VW(Kl@+?^c34g$M?;XgMw_kVA1?@^2;4E9Vb zq-nSSqX4h@;vyn=<=<~>{QrJ+0Zuh5BMts94b%U>A;#$cfjZ4^3iV2|DB8t|0_vJ{@>Od^?!AB=>G-9{{N@vdH+8)WjTg= zn3?pVt+X}%>x&7)-O*A}_J8U0DgP(6HUAHGu>S90p!46)*5bdnrOAIOVZr~E)&l>R Pc1QkSIyw74DEk8dKY0$9 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/leg_br.vox b/assets/voxygen/voxel/npc/llama/male/leg_br.vox new file mode 100644 index 0000000000000000000000000000000000000000..007f8b0856fff94b1d52b57c02b582e495e36d71 GIT binary patch literal 1684 zcmeIx%}bO~6vy#%&b`k|*rGu(ausbfO0*IxCGdp|8B$9UU-}P%C?Y9ZR2XgAr6{y= zGe}7g6mAM~6$JAF5!5bPw(?IneMc}DOn13z;KP09dCvK9=bmRK$EJ=hiOA)Fkx>?T zl!{D@%v?NJ|H3DNTXFzX(=#LE#s!}Rs7lokpe8j#fCecW0#vkWP}Q0tKuybr01a9( z1ZbodDn^f0MXjbV1c+H#VF-|56@?){qE!`!P`^&-g-EC=45Fc|Fa(H&ioy^eAygHH z0EzU%5FiQtFmO8LMsg#$k=#gbBsY>9$&KVjawEBs+(>RDHGnT87e=sW{^6FEJ)du`KlaVFTf5f0obLA0WS76W ze%e>AbT-tDA8+-a-)jx`_WM29c>Th^etfm-9@^X6cYRjhYoSo^p`H#e_ICQjz-gZy zKHE^g`EA30eR=N>=kEHu)l$Q=?ccgx^W*c|9nWWnhkWqNDL>YB#MkF%eC@$CU%4~p z%QuVuX>oN&{dVSlt-U8YysNeO&pw{qoAc80qCbB+?-Tuf-rs%FM=zZ7;`ttLYcBZx RzC&JmHtnT_8(#nW{|3c&arpoM literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/leg_fr.vox b/assets/voxygen/voxel/npc/llama/male/leg_fr.vox new file mode 100644 index 0000000000000000000000000000000000000000..b5e2be3f48ca24bfda1cdadcae35a66883346fea GIT binary patch literal 1604 zcmeIxK}%Fo7{>AUyywihH*C?M7`ciz8YP+ul@d5gh74&nB#!nCf+!*>T1Xge+Lb7@ zax+Lt5EO0-auoz~??42#iN)wY@ zq(6#OCT1@jY`)YAzqnPX1R*b6ykjDpzsj&4F`pXcwcu=Nbs2h-zIZVhzsNc`9MC9 z599;+Kt7NU3ru926d+g}Q^nLwq4~P4^hA0hJ&_)=P>3Y#OVUt?OE{B+GfC%KJif3Lki+|jY;`qsun+giW1>&%O4ztyJu?Dh2lTfNfTGI#lSr~UZWX!&ffd)be* z%~#Lu%ZHb{-a~hH_pWQr`zaQSHa6H}<)L1ylm={W{7lRI*4It@`T3nK%-^-QYqgfO z?eDWa^ZnDC9qV)BV>WvFlpX6jVjGLIw*KInt=^fkm78VzxU{xoe!KHuU58HeSYK!R xpZj=pZ{BJvOZN2fqE$wQZKVICO`bn%<#U79)n2sw!-uT)q-wQiH>~;R{{_M0V0r)m literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/neck.vox b/assets/voxygen/voxel/npc/llama/male/neck.vox new file mode 100644 index 0000000000000000000000000000000000000000..d07c3108e0c95b34f109e0cc3b60fefd7f8623ed GIT binary patch literal 3744 zcmeI!-K*tu6vy%PT@T;icmJOD-ZLVuNS#A*rPMiRmlSt$>1zIjulFyFnwYuc%G7JlI&1&VTA#g}vzjL!e)7sQBJ$v| z;}7vg-X29x96xnmKYhcWj2RB&$&;s!KiyLB=ZuPIl08FG*{D*(sgucp8sEdGTGD|b zrL?awI2gdsragth5fDqvNE{52=fkTq+CnyY#fT*%p z*{keT_9}aoy~9k$$0N}pfETBqPCx) zFgOBYwwItVI0E9fNl>Q`rw&Lk9~$)G)G_rkvok&TR5#Q};^cGkIr*G?PCh4}lh4WL zl`J8-CJ|~}(&&lWHbMiU)oP16`C!dp#*)TW)63mCf;0Q=&J`@H=AT{(FX2YqI z#Gb<7kQAE)g~1UJje`V*!4VLP{RD-<5fG2P1ckv7kYGL(21h_L^Pw;}0;yp(3_jI` zc}SAUoyncaoyncaoyncaoyncaoyncaoyncaoyncaoyncaoyncaoyncaoynca&1@JP z0SV?qVQ>T_Gam|rBOnd)p)fcCsn9FThEpeL_7w()q-HNcVQ>UQn@xhk;0TB{2MG#; zBOu=FCnyY#fCTfQFgOB|nGc1*5s-%YP#7G6RG3|u0jEw{>v$tn& z&)%NBJ$rlh_U!H1+q1W4Z_nPIy*+z-_V(=U+1s3#|!z#tVy%@L`1NUO!UJNVA!#d@G zd%-+7V(K-+t~ShtPjwk~45}l0NA`~F9oajwcVzFlNe=NqJ;1^Wcc7*Np6CE_|xX$lj5?bN0^JJ71~IcMMJ~K3^xF?e9nuNA=zTBwqWmqy^FQ@VmJAMz4YJ+dJ+rv z(uctjkj(R$J`9eSdJR1oe5wmIRF`W*vgNMYlD$jzE_cP3I|&MdBOtNdO+g<9N6?eZ z^H3NZfz;50!Kb=VL-o*(A=x4JQp2gm=|N#|1SAfzmp%-RpeLEgP}2Tt9sD`tzQ9s>6%zwz34pM6k&`u39xW;k->$OT`U@+_Cj zdhgMz>((9D*AvHXu20>6>v_+g{rS84`;TAOS5LoKzx-(Xyw}dXpL5Ur`okB0d;O{V z@2&UTa#OwPip%R)ub--)zVdke@P&u#`_FFG@8A3AZ_l5b`Com#p!_?n1ZE|z8) zWFQhLm#P;JXAfL~a7zx6g-W&bi!oalh^o|#sA$cIs-{NNv|&WWxNkL4OI59I#F>j( zLx~a3a&dZ2&*?eO@YIQz*OeG?BJK?*DuI5WALs}AfqtML=m+|NexM&3N{l#>z(`ah z_8ry4BK8`kMx2O8btOhT%L8+w)w@-O+hj8AdWcgf}-vuyJ*;&AW247eBszYTG;L?_lTk3w(M1 zs$&m@LZM?V>ouRxV|uh7@%SLh#StvdoNe=)Uw82H^IJSzUP65{X{)vF+H$^sO!w3m zXQnZA<}^<99mDoY6}|)^El5u)4X&Z=HEiar{(2hI+gI^zr!KGLrRGJbSW& i^5g_2hX*iwehl%sQS^1^aev|nlBX3U&u=38{eJ@pxg>%B literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/llama/male/torso_back.vox b/assets/voxygen/voxel/npc/llama/male/torso_back.vox new file mode 100644 index 0000000000000000000000000000000000000000..141243e06b6f8ee9c05bb76b7226a4011a971821 GIT binary patch literal 4208 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 ADgXcg literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron index a9a7ff6c04..a1f9869837 100644 --- a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -1919,4 +1919,124 @@ central: ("npc.ngoubou.male.tail"), ), ), + (Llama, Male): ( + head: ( + offset: (-3.0, -2.0, -3.5), + central: ("npc.llama.male.head"), + ), + neck: ( + offset: (-3.0, -4.5, -9.5), + central: ("npc.llama.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -2.0), + central: ("npc.llama.male.jaw"), + ), + torso_front: ( + offset: (-6.0, -9.0, -6.0), + central: ("npc.llama.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -12.0, -5.0), + central: ("npc.llama.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("npc.llama.male.ears"), + ), + tail: ( + offset: (-2.0, -5.0, -7.0), + central: ("npc.llama.male.tail"), + ), + ), + (Llama, Female): ( + head: ( + offset: (-3.0, -2.0, -3.5), + central: ("npc.llama.male.head"), + ), + neck: ( + offset: (-3.0, -4.5, -9.5), + central: ("npc.llama.male.neck"), + ), + jaw: ( + offset: (-2.0, 0.0, -2.0), + central: ("npc.llama.male.jaw"), + ), + torso_front: ( + offset: (-6.0, -9.0, -6.0), + central: ("npc.llama.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -12.0, -5.0), + central: ("npc.llama.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("npc.llama.male.ears"), + ), + tail: ( + offset: (-2.0, -5.0, -7.0), + central: ("npc.llama.male.tail"), + ), + ), + (Alpaca, Male): ( + head: ( + offset: (-4.0, -3.0, -4.0), + central: ("npc.alpaca.male.head"), + ), + neck: ( + offset: (-3.0, -3.5, -6.5), + central: ("npc.alpaca.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -0.5), + central: ("npc.alpaca.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -8.0, -4.5), + central: ("npc.alpaca.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -10.0, -4.5), + central: ("npc.alpaca.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("npc.alpaca.male.ears"), + ), + tail: ( + offset: (-3.0, -5.0, -8.0), + central: ("npc.alpaca.male.tail"), + ), + ), + (Alpaca, Female): ( + head: ( + offset: (-4.0, -3.0, -4.0), + central: ("npc.alpaca.male.head"), + ), + neck: ( + offset: (-3.0, -3.5, -6.5), + central: ("npc.alpaca.male.neck"), + ), + jaw: ( + offset: (-1.0, 0.0, -0.5), + central: ("npc.alpaca.male.jaw"), + ), + torso_front: ( + offset: (-5.0, -8.0, -4.5), + central: ("npc.alpaca.male.torso_front"), + ), + torso_back: ( + offset: (-5.0, -10.0, -4.5), + central: ("npc.alpaca.male.torso_back"), + ), + ears: ( + offset: (-4.0, -1.0, 0.0), + central: ("npc.alpaca.male.ears"), + ), + tail: ( + offset: (-3.0, -5.0, -8.0), + central: ("npc.alpaca.male.tail"), + ), + ), }) diff --git a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron index c548271783..8e0ff588b2 100644 --- a/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_lateral_manifest.ron @@ -2175,4 +2175,140 @@ lateral: ("npc.ngoubou.male.foot_br"), ), ), + (Llama, Male): ( + leg_fl: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.llama.male.leg_fr"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.llama.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -5.0), + lateral: ("npc.llama.male.leg_br"), + ), + leg_br: ( + offset: (-2.0, -3.0, -5.0), + lateral: ("npc.llama.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.llama.male.foot_fr"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.llama.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.llama.male.foot_br"), + ), + foot_br: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.llama.male.foot_br"), + ), + ), + (Llama, Female): ( + leg_fl: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.llama.male.leg_fr"), + ), + leg_fr: ( + offset: (-2.0, -2.5, -6.0), + lateral: ("npc.llama.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.0, -3.0, -5.0), + lateral: ("npc.llama.male.leg_br"), + ), + leg_br: ( + offset: (-2.0, -3.0, -5.0), + lateral: ("npc.llama.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.llama.male.foot_fr"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -8.0), + lateral: ("npc.llama.male.foot_fr"), + ), + foot_bl: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.llama.male.foot_br"), + ), + foot_br: ( + offset: (-1.5, -2.5, -9.0), + lateral: ("npc.llama.male.foot_br"), + ), + ), + (Alpaca, Male): ( + leg_fl: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.alpaca.male.leg_fr"), + ), + leg_fr: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.alpaca.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.alpaca.male.leg_br"), + ), + leg_br: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.alpaca.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_fr"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.0, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_br"), + ), + foot_br: ( + offset: (-2.0, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_br"), + ), + ), + (Alpaca, Female): ( + leg_fl: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.alpaca.male.leg_fr"), + ), + leg_fr: ( + offset: (-1.5, -2.5, -4.0), + lateral: ("npc.alpaca.male.leg_fr"), + ), + leg_bl: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.alpaca.male.leg_br"), + ), + leg_br: ( + offset: (-2.5, -2.5, -4.5), + lateral: ("npc.alpaca.male.leg_br"), + ), + foot_fl: ( + offset: (-1.5, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_fr"), + ), + foot_fr: ( + offset: (-1.5, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_fr"), + ), + foot_bl: ( + offset: (-2.0, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_br"), + ), + foot_br: ( + offset: (-2.0, -2.0, -6.0), + lateral: ("npc.alpaca.male.foot_br"), + ), + ), }) diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 96ffd4263f..661f9639a3 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -307,6 +307,7 @@ impl Body { biped_large::Species::Werewolf => Vec3::new(4.0, 3.0, 3.5), biped_large::Species::Harvester => Vec3::new(4.6, 3.0, 5.4), biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5), + biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 4.5), _ => Vec3::new(4.6, 3.0, 6.0), }, Body::BipedSmall(body) => match body.species { diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index 7a816f512e..44285fa21e 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -53,6 +53,8 @@ make_case_elim!( Blueoni = 16, Redoni = 17, Cultistwarlord = 18, + Cultistwarlock = 19, + Huskbrute = 20, } ); @@ -80,6 +82,8 @@ pub struct AllSpecies { pub oni_blue: SpeciesMeta, pub oni_red: SpeciesMeta, pub cultist_warlord: SpeciesMeta, + pub cultist_warlock: SpeciesMeta, + pub husk_brute: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -107,11 +111,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Blueoni => &self.oni_blue, Species::Redoni => &self.oni_red, Species::Cultistwarlord => &self.cultist_warlord, + Species::Cultistwarlock => &self.cultist_warlock, + Species::Huskbrute => &self.husk_brute, } } } -pub const ALL_SPECIES: [Species; 19] = [ +pub const ALL_SPECIES: [Species; 21] = [ Species::Ogre, Species::Cyclops, Species::Wendigo, @@ -131,6 +137,8 @@ pub const ALL_SPECIES: [Species; 19] = [ Species::Blueoni, Species::Redoni, Species::Cultistwarlord, + Species::Cultistwarlock, + Species::Huskbrute, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs index f814b57a05..04efc68c25 100644 --- a/common/src/comp/body/quadruped_medium.rs +++ b/common/src/comp/body/quadruped_medium.rs @@ -64,6 +64,8 @@ pub enum Species { Snowleopard = 31, Mammoth = 32, Ngoubou = 33, + Llama = 34, + Alpaca = 35, } /// Data representing per-species generic data. @@ -103,6 +105,8 @@ pub struct AllSpecies { pub snowleopard: SpeciesMeta, pub mammoth: SpeciesMeta, pub ngoubou: SpeciesMeta, + pub llama: SpeciesMeta, + pub alpaca: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -143,11 +147,13 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Snowleopard => &self.snowleopard, Species::Mammoth => &self.mammoth, Species::Ngoubou => &self.ngoubou, + Species::Llama => &self.llama, + Species::Alpaca => &self.alpaca, } } } -pub const ALL_SPECIES: [Species; 32] = [ +pub const ALL_SPECIES: [Species; 34] = [ Species::Grolgar, Species::Saber, Species::Tiger, @@ -180,6 +186,8 @@ pub const ALL_SPECIES: [Species; 32] = [ Species::Snowleopard, Species::Mammoth, Species::Ngoubou, + Species::Llama, + Species::Alpaca, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index 759b4ece11..d9fea9965b 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -267,9 +267,9 @@ fn default_main_tool(body: &Body) -> Item { (biped_large::Species::Wendigo, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.wendigo_magic", )), - (biped_large::Species::Werewolf, _) => Some(Item::new_from_asset_expect( - "common.items.npc_weapons.unique.beast_claws", - )), + (biped_large::Species::Werewolf | biped_large::Species::Huskbrute, _) => Some( + Item::new_from_asset_expect("common.items.npc_weapons.unique.beast_claws"), + ), (biped_large::Species::Cyclops, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.hammer.cyclops_hammer", )), @@ -300,6 +300,9 @@ fn default_main_tool(body: &Body) -> Item { (biped_large::Species::Cultistwarlord, _) => Some(Item::new_from_asset_expect( "common.items.weapons.sword.bipedlarge-cultist", )), + (biped_large::Species::Cultistwarlock, _) => Some(Item::new_from_asset_expect( + "common.items.weapons.staff.bipedlarge-cultist_staff", + )), }, Body::Object(body) => match body { object::Body::Crossbow => Some(Item::new_from_asset_expect( diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index d105035c43..10968783d6 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -70,6 +70,8 @@ impl Body { quadruped_medium::Species::Snowleopard => 160.0, quadruped_medium::Species::Mammoth => 180.0, quadruped_medium::Species::Ngoubou => 170.0, + quadruped_medium::Species::Llama => 130.0, + quadruped_medium::Species::Alpaca => 120.0, }, Body::BipedLarge(body) => match body.species { biped_large::Species::Slysaurok => 100.0, diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 4f640bd1bc..983dc3e1f6 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -418,7 +418,9 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc | quadruped_medium::Species::Antelope | quadruped_medium::Species::Kelpie | quadruped_medium::Species::Cattle - | quadruped_medium::Species::Yak => { + | quadruped_medium::Species::Yak + | quadruped_medium::Species::Llama + | quadruped_medium::Species::Alpaca => { "common.loot_tables.creature.quad_medium.gentle" }, quadruped_medium::Species::Ngoubou => { diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index 567df6f2b7..9754e4370c 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -230,6 +230,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (10.5, -3.0), (Redoni, _) => (10.5, -3.0), (Cultistwarlord, _) => (0.5, 14.5), + (Cultistwarlock, _) => (0.5, 14.5), + (Huskbrute, _) => (8.5, 4.0), }, jaw: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0), @@ -251,6 +253,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (0.0, 3.5), (Redoni, _) => (0.0, 3.5), (Cultistwarlord, _) => (0.0, 3.5), + (Cultistwarlock, _) => (0.0, 3.5), + (Huskbrute, _) => (-5.0, -5.0), }, upper_torso: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 27.5), @@ -273,6 +277,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (-1.0, 26.5), (Redoni, _) => (-1.0, 26.5), (Cultistwarlord, _) => (-1.0, 18.5), + (Cultistwarlock, _) => (-1.0, 18.5), + (Huskbrute, _) => (-1.0, 23.5), }, lower_torso: match (body.species, body.body_type) { (Ogre, Male) => (1.0, -7.0), @@ -295,6 +301,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (0.0, -8.5), (Redoni, _) => (0.0, -8.5), (Cultistwarlord, _) => (0.0, -1.5), + (Cultistwarlock, _) => (0.0, -1.5), + (Huskbrute, _) => (0.0, -6.5), }, tail: match (body.species, body.body_type) { (Werewolf, _) => (-5.5, -2.0), @@ -325,6 +333,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (11.0, 2.0, -5.5), (Redoni, _) => (11.0, 2.0, -5.5), (Cultistwarlord, _) => (11.5, -1.0, 4.5), + (Cultistwarlock, _) => (11.5, -1.0, 4.5), + (Huskbrute, _) => (10.5, 1.0, -2.5), }, hand: match (body.species, body.body_type) { (Ogre, Male) => (14.5, 0.0, -4.0), @@ -347,6 +357,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (13.5, 0.5, -8.0), (Redoni, _) => (13.5, 0.5, -8.0), (Cultistwarlord, _) => (11.5, -1.0, -1.0), + (Cultistwarlock, _) => (11.5, -1.0, -1.0), + (Huskbrute, _) => (12.0, 1.5, -6.0), }, leg: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 0.0, -4.0), @@ -369,6 +381,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (4.5, 2.0, -5.5), (Redoni, _) => (4.5, 2.0, -5.5), (Cultistwarlord, _) => (3.5, -1.0, -8.5), + (Cultistwarlock, _) => (3.5, -1.0, -8.5), + (Huskbrute, _) => (4.0, 0.0, -5.5), }, foot: match (body.species, body.body_type) { (Ogre, Male) => (4.0, 1.0, -12.0), @@ -391,6 +405,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (5.0, 5.0, -12.5), (Redoni, _) => (5.0, 5.0, -12.5), (Cultistwarlord, _) => (3.5, 0.0, -12.5), + (Cultistwarlock, _) => (3.5, 0.0, -12.5), + (Huskbrute, _) => (4.5, 0.5, -12.5), }, scaler: match (body.species, body.body_type) { (Ogre, Male) => 1.12, @@ -413,6 +429,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => 1.2, (Redoni, _) => 1.2, (Cultistwarlord, _) => 1.0, + (Cultistwarlock, _) => 1.0, + (Huskbrute, _) => 1.2, }, tempo: match (body.species, body.body_type) { (Ogre, Male) => 0.9, @@ -446,6 +464,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (12.5, 0.0), (Redoni, _) => (12.5, 0.0), (Cultistwarlord, _) => (8.0, 0.0), + (Cultistwarlock, _) => (8.0, 0.0), + (Huskbrute, _) => (12.5, 0.0), }, shl: match (body.species, body.body_type) { (Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0), diff --git a/voxygen/anim/src/quadruped_medium/mod.rs b/voxygen/anim/src/quadruped_medium/mod.rs index 5c780cc851..c4f74eeb05 100644 --- a/voxygen/anim/src/quadruped_medium/mod.rs +++ b/voxygen/anim/src/quadruped_medium/mod.rs @@ -177,6 +177,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (1.5, 0.5), (Mammoth, _) => (0.5, -1.5), (Ngoubou, _) => (0.5, -2.5), + (Llama, _) => (0.5, 10.0), + (Alpaca, _) => (0.5, 7.5), }, neck: match (body.species, body.body_type) { (Grolgar, _) => (1.0, -1.0), @@ -212,6 +214,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (0.0, 1.5), (Mammoth, _) => (0.5, -0.5), (Ngoubou, _) => (2.0, 1.0), + (Llama, _) => (2.5, 4.5), + (Alpaca, _) => (-1.5, 3.0), }, jaw: match (body.species, body.body_type) { (Grolgar, _) => (7.0, 2.0), @@ -248,6 +252,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (3.0, -3.0), (Mammoth, _) => (4.5, -3.0), (Ngoubou, _) => (4.5, -4.0), + (Llama, _) => (4.0, -1.0), + (Alpaca, _) => (3.0, -2.5), }, tail: match (body.species, body.body_type) { (Grolgar, _) => (-11.5, -0.5), @@ -283,6 +289,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (-10.5, 3.0), (Mammoth, _) => (-13.0, -1.5), (Ngoubou, _) => (-12.0, 5.5), + (Llama, _) => (-9.0, 6.0), + (Alpaca, _) => (-8.5, 3.5), }, torso_front: match (body.species, body.body_type) { (Grolgar, _) => (10.0, 13.0), @@ -318,6 +326,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (1.5, 13.0), (Mammoth, _) => (11.5, 20.5), (Ngoubou, _) => (9.5, 16.5), + (Llama, _) => (7.0, 15.0), + (Alpaca, _) => (7.0, 11.5), }, torso_back: match (body.species, body.body_type) { (Grolgar, _) => (-10.0, 1.5), @@ -353,6 +363,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (-11.0, 0.0), (Mammoth, _) => (-13.0, -2.5), (Ngoubou, _) => (-8.0, -2.0), + (Llama, _) => (-8.0, 0.0), + (Alpaca, _) => (-6.0, 0.0), }, ears: match (body.species, body.body_type) { (Grolgar, _) => (5.0, 8.0), @@ -389,6 +401,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (1.5, 3.0), (Mammoth, _) => (12.0, -3.0), (Ngoubou, _) => (12.0, -3.0), + (Llama, _) => (1.0, 3.5), + (Alpaca, _) => (1.0, 2.0), }, leg_f: match (body.species, body.body_type) { (Grolgar, _) => (7.5, -5.5, -1.0), @@ -424,6 +438,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (6.5, -4.0, -2.5), (Mammoth, _) => (10.0, -5.0, -5.0), (Ngoubou, _) => (7.5, -4.0, -1.5), + (Llama, _) => (5.0, -1.5, -1.0), + (Alpaca, _) => (3.5, -2.5, -0.5), }, leg_b: match (body.species, body.body_type) { (Grolgar, _) => (6.0, -6.5, -4.0), @@ -459,6 +475,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (5.5, -5.0, -1.5), (Mammoth, _) => (7.5, -7.0, -5.0), (Ngoubou, _) => (4.5, -9.5, 0.0), + (Llama, _) => (5.0, -7.0, -2.0), + (Alpaca, _) => (3.5, -7.0, 0.0), }, feet_f: match (body.species, body.body_type) { (Grolgar, _) => (0.0, 0.0, -4.0), @@ -494,6 +512,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (0.5, 0.5, -4.5), (Mammoth, _) => (-0.5, -0.5, -6.0), (Ngoubou, _) => (-1.0, 0.5, -6.0), + (Llama, _) => (-0.5, 0.5, -6.0), + (Alpaca, _) => (0.0, -0.5, -5.0), }, feet_b: match (body.species, body.body_type) { (Grolgar, _) => (0.5, -1.5, -3.0), @@ -529,6 +549,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Snowleopard, _) => (0.5, 0.5, -5.5), (Mammoth, _) => (0.5, -0.5, -4.5), (Ngoubou, _) => (0.5, 1.0, -5.5), + (Llama, _) => (0.5, -1.5, -3.5), + (Alpaca, _) => (-0.5, -0.5, -5.5), }, scaler: match (body.species, body.body_type) { (Grolgar, _) => (1.05), From 38c9ff5225daaa1f273b9f30406af86965973513 Mon Sep 17 00:00:00 2001 From: Snowram Date: Wed, 23 Jun 2021 01:43:18 +0200 Subject: [PATCH 4/7] Husk brute animations --- .../common/abilities/ability_set_manifest.ron | 5 ++ .../custom/husk_brute/chargedmelee.ron | 18 ++++++ .../custom/husk_brute/singlestrike.ron | 28 ++++++++ .../entity/dungeon/tier-5/husk_brute.ron | 12 ++++ .../items/npc_weapons/unique/husk_brute.ron | 18 ++++++ .../loot_tables/creature/quad_medium/wool.ron | 6 ++ .../quad_small/{sheep.ron => wool.ron} | 0 .../voxygen/voxel/biped_weapon_manifest.ron | 4 ++ .../voxel/npc/husk_brute/male/foot_l.vox | Bin 1660 -> 1660 bytes .../voxel/npc/husk_brute/male/foot_r.vox | Bin 1660 -> 1660 bytes .../voxel/npc/husk_brute/male/leg_r.vox | Bin 1504 -> 1504 bytes .../voxel/npc/llama/male/torso_back.vox | Bin 4208 -> 4232 bytes common/src/comp/agent.rs | 2 + common/src/comp/body.rs | 8 ++- common/src/comp/inventory/loadout_builder.rs | 13 ++-- common/src/states/utils.rs | 4 +- server/src/events/entity_manipulation.rs | 12 ++-- voxygen/anim/src/biped_large/alpha.rs | 42 ++++++++++++ voxygen/anim/src/biped_large/chargemelee.rs | 60 ++++++++++++++++++ voxygen/anim/src/biped_large/mod.rs | 18 +++--- voxygen/anim/src/biped_large/wield.rs | 57 +++++++++++++++++ world/src/layer/wildlife.rs | 14 +++- world/src/site/dungeon/mod.rs | 8 ++- 23 files changed, 305 insertions(+), 24 deletions(-) create mode 100644 assets/common/abilities/custom/husk_brute/chargedmelee.ron create mode 100644 assets/common/abilities/custom/husk_brute/singlestrike.ron create mode 100644 assets/common/entity/dungeon/tier-5/husk_brute.ron create mode 100644 assets/common/items/npc_weapons/unique/husk_brute.ron create mode 100644 assets/common/loot_tables/creature/quad_medium/wool.ron rename assets/common/loot_tables/creature/quad_small/{sheep.ron => wool.ron} (100%) diff --git a/assets/common/abilities/ability_set_manifest.ron b/assets/common/abilities/ability_set_manifest.ron index 4a089589b7..41b0c565d9 100644 --- a/assets/common/abilities/ability_set_manifest.ron +++ b/assets/common/abilities/ability_set_manifest.ron @@ -34,6 +34,11 @@ secondary: "common.abilities.custom.husk.triplestrike", abilities: [], ), + Custom("Husk Brute"): ( + primary: "common.abilities.custom.husk_brute.singlestrike", + secondary: "common.abilities.custom.husk_brute.chargedmelee", + abilities: [], + ), Tool(Spear): ( primary: "common.abilities.spear.doublestrike", secondary: "common.abilities.spear.dash", diff --git a/assets/common/abilities/custom/husk_brute/chargedmelee.ron b/assets/common/abilities/custom/husk_brute/chargedmelee.ron new file mode 100644 index 0000000000..e4006d5949 --- /dev/null +++ b/assets/common/abilities/custom/husk_brute/chargedmelee.ron @@ -0,0 +1,18 @@ +ChargedMelee( + energy_cost: 0, + energy_drain: 0, + initial_damage: 0, + scaled_damage: 500, + initial_poise_damage: 50, + scaled_poise_damage: 150, + initial_knockback: 0.0, + scaled_knockback: 0.0, + range: 5.0, + max_angle: 45.0, + speed: 1.0, + charge_duration: 1.5, + swing_duration: 0.1, + hit_timing: 0.8, + recover_duration: 0.5, + damage_kind: Crushing, +) diff --git a/assets/common/abilities/custom/husk_brute/singlestrike.ron b/assets/common/abilities/custom/husk_brute/singlestrike.ron new file mode 100644 index 0000000000..d64184bfa8 --- /dev/null +++ b/assets/common/abilities/custom/husk_brute/singlestrike.ron @@ -0,0 +1,28 @@ +ComboMelee( + stage_data: [ + ( + stage: 1, + base_damage: 160, + damage_increase: 0, + base_poise_damage: 12, + poise_damage_increase: 0, + knockback: 5.0, + range: 2.5, + angle: 60.0, + base_buildup_duration: 0.25, + base_swing_duration: 0.07, + hit_timing: 0.5, + base_recover_duration: 0.25, + forward_movement: 0.5, + damage_kind: Crushing, + ), + ], + initial_energy_gain: 0, + max_energy_gain: 0, + energy_increase: 0, + speed_increase: 0.0, + max_speed_increase: 0.0, + scales_from_combo: 0, + is_interruptible: false, + ori_modifier: 0.6, +) diff --git a/assets/common/entity/dungeon/tier-5/husk_brute.ron b/assets/common/entity/dungeon/tier-5/husk_brute.ron new file mode 100644 index 0000000000..fc2592fb47 --- /dev/null +++ b/assets/common/entity/dungeon/tier-5/husk_brute.ron @@ -0,0 +1,12 @@ +EntityConfig ( + name: Some("Husk Brute"), + body: Some(RandomWith("husk_brute")), + + loot: Some(LootTable("common.loot_tables.dungeon.tier-5.minion")), + + main_tool: None, + second_tool: None, + + loadout_asset: None, + skillset_asset: None, +) diff --git a/assets/common/items/npc_weapons/unique/husk_brute.ron b/assets/common/items/npc_weapons/unique/husk_brute.ron new file mode 100644 index 0000000000..c2389e824c --- /dev/null +++ b/assets/common/items/npc_weapons/unique/husk_brute.ron @@ -0,0 +1,18 @@ +ItemDef( + name: "Husk Brute", + description: "testing123", + kind: Tool(( + kind: Natural, + hands: Two, + stats: Direct(( + equip_time_secs: 0.0, + power: 1.0, + poise_strength: 1.0, + speed: 1.0, + crit_chance: 0.0625, + )), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Husk Brute")), +) \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_medium/wool.ron b/assets/common/loot_tables/creature/quad_medium/wool.ron new file mode 100644 index 0000000000..3b3fa3f62d --- /dev/null +++ b/assets/common/loot_tables/creature/quad_medium/wool.ron @@ -0,0 +1,6 @@ +[ + (1.5, Item("common.items.food.meat.beast_small_raw")), + (0.5, Item("common.items.food.meat.beast_large_raw")), + (1.0, Item("common.items.crafting_ing.hide.animal_hide")), + (5.0, ItemQuantity("common.items.crafting_ing.cloth.wool", 2, 5)), +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_small/sheep.ron b/assets/common/loot_tables/creature/quad_small/wool.ron similarity index 100% rename from assets/common/loot_tables/creature/quad_small/sheep.ron rename to assets/common/loot_tables/creature/quad_small/wool.ron diff --git a/assets/voxygen/voxel/biped_weapon_manifest.ron b/assets/voxygen/voxel/biped_weapon_manifest.ron index f2210787e1..93ea6dc59f 100644 --- a/assets/voxygen/voxel/biped_weapon_manifest.ron +++ b/assets/voxygen/voxel/biped_weapon_manifest.ron @@ -1050,6 +1050,10 @@ vox_spec: ("armor.empty", (0.0, 0.0, 0.0)), color: None ), + "common.items.npc_weapons.unique.husk_brute": ( + vox_spec: ("armor.empty", (0.0, 0.0, 0.0)), + color: None + ), "common.items.npc_weapons.axe.minotaur_axe": ( vox_spec: ("weapon.axe.2haxe_minotaur", (-2.5, -9.0, -8.0)), color: None diff --git a/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox b/assets/voxygen/voxel/npc/husk_brute/male/foot_l.vox index 8eca7482a27b3f92a3763e4af672aeba1024f42c..8e09ba544ecb0007ccf33cf6b87728bc7a267fbe 100644 GIT binary patch delta 315 zcmWm5u?+%25JS=R*n80-LMk94CPAVK>LAz(XaPh_6(lr3R|NbGo@9^4zxB7?KN~fT zf|1AfvRCH-BQq~#s1=XJV~sq|Iviy#Fam`RBQtk0)XdT>&GMz)O~nO9W;Pks!dHfr zQ7{4(9Y!G2VPxjaO=r{DbT*w09Y!G2VfPawN+>8Tj1~q912O`c4kI&%{Jz#Uf1sKx ASpWb4 delta 315 zcmWm5u?<2o6hl!zJNeZ|luSTHO@qV~%t4U}SOG-M6f`WrRutS6N3oyc-}+ncpN&+b zVC3<=?A1BI$jl2FlKE&pdgOVo!%^V^BT%Em$jqG#DJ;V>EMK*|$y{J$=8#cp{Axqh zM!^VVI*dS}!^nKw+;ldbO=r{D&|w4$9Zo+nqBIJs7Dfw$g#j6XLWhx=8~J_pw*3Kf CS1S(y diff --git a/assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox b/assets/voxygen/voxel/npc/husk_brute/male/foot_r.vox index 20e681a1719b95b52cfc58ac9f57b82673174578..8eca7482a27b3f92a3763e4af672aeba1024f42c 100644 GIT binary patch delta 579 zcmWm7v2h$h5CgzjVD2m`9y!WM^%1;FlesWG8tgOre}F37{(Ss=eEoZ$na@z>%;zDL zWuhaLWvU~TWmZQh%Un7_*(cvJW#+tJXU;2>Ip=ig15??z(YI`%2X%xxN3?8nzq2LTlh5n(`u%w__m1z?oK?;y z_eN)Dt~I^rUNcW&KE8I)*vw#pj_=X6L2taOzm>W1cuZcs)prjb^iCd37zs7afOx0F z_L$8C6KDu%h2fn-u-iA@kVR!4`e{#qKj<@}PbDMaOI@y!^$YxQV GVio{IiwoQU diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index 6b8059cedc..f7262502a7 100644 --- a/common/src/comp/agent.rs +++ b/common/src/comp/agent.rs @@ -218,6 +218,8 @@ impl<'a> From<&'a Body> for Psyche { quadruped_medium::Species::Darkhound => 0.9, quadruped_medium::Species::Dreadhorn => 0.8, quadruped_medium::Species::Snowleopard => 0.7, + quadruped_medium::Species::Llama => 0.6, + quadruped_medium::Species::Alpaca => 0.6, _ => 0.5, }, Body::QuadrupedLow(quadruped_low) => match quadruped_low.species { diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 661f9639a3..6755a2bb18 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -180,6 +180,9 @@ impl Body { biped_large::Species::Mightysaurok => 400.0, biped_large::Species::Mindflayer => 420.0, biped_large::Species::Minotaur => 500.0, + biped_large::Species::Cavetroll => 600.0, + biped_large::Species::Mountaintroll => 600.0, + biped_large::Species::Swamptroll => 600.0, _ => 400.0, }, Body::BipedSmall(_) => 50.0, @@ -308,6 +311,7 @@ impl Body { biped_large::Species::Harvester => Vec3::new(4.6, 3.0, 5.4), biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5), biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 4.5), + biped_large::Species::Huskbrute => Vec3::new(4.6, 3.0, 5.0), _ => Vec3::new(4.6, 3.0, 6.0), }, Body::BipedSmall(body) => match body.species { @@ -359,8 +363,10 @@ impl Body { quadruped_medium::Species::Saber => Vec3::new(2.0, 3.0, 2.0), quadruped_medium::Species::Tarasque => Vec3::new(2.0, 4.0, 2.6), quadruped_medium::Species::Yak => Vec3::new(2.0, 3.6, 3.0), - quadruped_medium::Species::Mammoth => Vec3::new(5.0, 7.0, 8.0), + quadruped_medium::Species::Mammoth => Vec3::new(2.0, 7.0, 8.0), quadruped_medium::Species::Ngoubou => Vec3::new(2.0, 3.2, 2.4), + quadruped_medium::Species::Llama => Vec3::new(2.0, 2.5, 2.6), + quadruped_medium::Species::Alpaca => Vec3::new(2.0, 2.0, 2.0), _ => Vec3::new(2.0, 3.0, 2.0), }, Body::QuadrupedSmall(body) => match body.species { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index d9fea9965b..69a85e3402 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -175,7 +175,9 @@ fn default_main_tool(body: &Body) -> Item { | quadruped_medium::Species::Kelpie | quadruped_medium::Species::Hirdrasil | quadruped_medium::Species::Deer - | quadruped_medium::Species::Antelope => Some(Item::new_from_asset_expect( + | quadruped_medium::Species::Antelope + | quadruped_medium::Species::Llama + | quadruped_medium::Species::Alpaca => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.quadmedhoof", )), quadruped_medium::Species::Saber => Some(Item::new_from_asset_expect( @@ -267,9 +269,9 @@ fn default_main_tool(body: &Body) -> Item { (biped_large::Species::Wendigo, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.wendigo_magic", )), - (biped_large::Species::Werewolf | biped_large::Species::Huskbrute, _) => Some( - Item::new_from_asset_expect("common.items.npc_weapons.unique.beast_claws"), - ), + (biped_large::Species::Werewolf, _) => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.beast_claws", + )), (biped_large::Species::Cyclops, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.hammer.cyclops_hammer", )), @@ -303,6 +305,9 @@ fn default_main_tool(body: &Body) -> Item { (biped_large::Species::Cultistwarlock, _) => Some(Item::new_from_asset_expect( "common.items.weapons.staff.bipedlarge-cultist_staff", )), + (biped_large::Species::Huskbrute, _) => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.husk_brute", + )), }, Body::Object(body) => match body { object::Body::Crossbow => Some(Item::new_from_asset_expect( diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 10968783d6..102260b501 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -70,8 +70,8 @@ impl Body { quadruped_medium::Species::Snowleopard => 160.0, quadruped_medium::Species::Mammoth => 180.0, quadruped_medium::Species::Ngoubou => 170.0, - quadruped_medium::Species::Llama => 130.0, - quadruped_medium::Species::Alpaca => 120.0, + quadruped_medium::Species::Llama => 120.0, + quadruped_medium::Species::Alpaca => 110.0, }, Body::BipedLarge(body) => match body.species { biped_large::Species::Slysaurok => 100.0, diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 983dc3e1f6..35ac92b0a5 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -369,7 +369,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc "common.loot_tables.creature.quad_small.mushroom" }, quadruped_small::Species::Sheep => { - "common.loot_tables.creature.quad_small.sheep" + "common.loot_tables.creature.quad_small.wool" }, quadruped_small::Species::Skunk | quadruped_small::Species::Quokka @@ -407,8 +407,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc quadruped_medium::Species::Dreadhorn => { "common.loot_tables.creature.quad_medium.dreadhorn" }, - quadruped_medium::Species::Mouflon - | quadruped_medium::Species::Camel + quadruped_medium::Species::Camel | quadruped_medium::Species::Deer | quadruped_medium::Species::Hirdrasil | quadruped_medium::Species::Horse @@ -418,10 +417,13 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc | quadruped_medium::Species::Antelope | quadruped_medium::Species::Kelpie | quadruped_medium::Species::Cattle - | quadruped_medium::Species::Yak + | quadruped_medium::Species::Yak => { + "common.loot_tables.creature.quad_medium.gentle" + }, + quadruped_medium::Species::Mouflon | quadruped_medium::Species::Llama | quadruped_medium::Species::Alpaca => { - "common.loot_tables.creature.quad_medium.gentle" + "common.loot_tables.creature.quad_medium.wool" }, quadruped_medium::Species::Ngoubou => { "common.loot_tables.creature.quad_medium.horned" diff --git a/voxygen/anim/src/biped_large/alpha.rs b/voxygen/anim/src/biped_large/alpha.rs index 0d3e7c61aa..7f2ac702ed 100644 --- a/voxygen/anim/src/biped_large/alpha.rs +++ b/voxygen/anim/src/biped_large/alpha.rs @@ -384,6 +384,48 @@ impl Animation for AlphaAnimation { * Quaternion::rotation_y(-2.8 + move1 * 3.0 + move2 * -3.0) * Quaternion::rotation_z(move1 * -1.5); }, + "Husk Brute" => { + next.shoulder_l.position = + Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_r.position = + Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2); + next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2); + + if mirror > 0.0 { + next.shoulder_l.orientation = Quaternion::rotation_x(move1 * 1.0) + * Quaternion::rotation_y(move1 * 1.0 + move2 * -2.0); + + next.shoulder_r.orientation = Quaternion::rotation_x(move1 * -0.6); + + next.upper_torso.orientation = + Quaternion::rotation_z(move1 * 0.4 + move2 * -1.1); + next.lower_torso.orientation = + Quaternion::rotation_z(move1 * -0.2 + move2 * 0.6); + + next.hand_l.orientation = Quaternion::rotation_x(move1 * 1.2) + * Quaternion::rotation_y(move1 * 1.0 + move2 * -2.0); + + next.hand_r.orientation = Quaternion::rotation_z(move1 * 1.0) + * Quaternion::rotation_y(move1 * 0.8 + move2 * -1.2); + } else { + next.shoulder_r.orientation = Quaternion::rotation_x(move1 * 1.0) + * Quaternion::rotation_y(move1 * -1.0 + move2 * 2.0); + + next.shoulder_l.orientation = Quaternion::rotation_x(move1 * 0.6); + + next.upper_torso.orientation = + Quaternion::rotation_z(move1 * -0.4 + move2 * 1.1); + next.lower_torso.orientation = + Quaternion::rotation_z(move1 * 0.2 + move2 * -0.6); + + next.hand_r.orientation = Quaternion::rotation_x(move1 * 1.2) + * Quaternion::rotation_y(move1 * -1.0 + move2 * 2.0); + + next.hand_l.orientation = Quaternion::rotation_z(move1 * 1.0) + * Quaternion::rotation_y(move1 * -0.8 + move2 * 1.2); + } + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/chargemelee.rs b/voxygen/anim/src/biped_large/chargemelee.rs index 16e25c148b..74162d0691 100644 --- a/voxygen/anim/src/biped_large/chargemelee.rs +++ b/voxygen/anim/src/biped_large/chargemelee.rs @@ -148,6 +148,66 @@ impl Animation for ChargeMeleeAnimation { next.shoulder_r.orientation = Quaternion::rotation_x(-0.3 + move1 * 1.0); }, + "Husk Brute" => { + next.second.scale = Vec3::one() * 0.0; + + next.head.orientation = + Quaternion::rotation_x(move1 * 0.3 + move2 * -0.6); + next.jaw.position = Vec3::new(0.0, s_a.jaw.0, s_a.jaw.1); + next.jaw.orientation = Quaternion::rotation_x(move2 * -0.3); + next.control_l.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_r.position = Vec3::new(-0.5, 4.0, 1.0); + next.control_l.orientation = Quaternion::rotation_x(1.57); + next.control_r.orientation = Quaternion::rotation_x(1.57); + next.weapon_l.position = + Vec3::new(-12.0 + (move1 * 10.0).min(6.0), -1.0, -15.0); + next.weapon_r.position = + Vec3::new(12.0 + (move1 * -10.0).max(-6.0), -1.0, -15.0); + + next.weapon_l.orientation = Quaternion::rotation_x(-1.57 - 0.1) + * Quaternion::rotation_z(move1 * -0.8); + next.weapon_r.orientation = Quaternion::rotation_x(-1.57 - 0.1) + * Quaternion::rotation_z(move1 * 0.8); + + next.shoulder_l.orientation = + Quaternion::rotation_x(-0.3 + move1 * 2.8 + move2 * -2.8); + + next.shoulder_r.orientation = + Quaternion::rotation_x(-0.3 + move1 * 2.8 + move2 * -2.8); + + next.control.orientation = + Quaternion::rotation_x(move1 * 2.5 + move2 * -2.0); + + next.upper_torso.position = + Vec3::new(0.0, s_a.upper_torso.0, s_a.upper_torso.1); + next.upper_torso.orientation = + Quaternion::rotation_x(move1 * 0.2 + move2 * -0.6); + next.lower_torso.orientation = + Quaternion::rotation_x(move1 * -0.2 + move2 * 0.6); + + if speed < 0.1 { + next.foot_l.position = Vec3::new( + -s_a.foot.0, + s_a.foot.1 + move1 * -7.0 + move2 * 7.0, + s_a.foot.2, + ); + next.foot_l.orientation = + Quaternion::rotation_x(move1 * -0.8 + move2 * 0.8) + * Quaternion::rotation_z(move1 * 0.3 + move2 * -0.3); + + next.foot_r.position = Vec3::new( + s_a.foot.0, + s_a.foot.1 + move1 * 5.0 + move2 * -5.0, + s_a.foot.2, + ); + next.foot_r.orientation = + Quaternion::rotation_y(move1 * -0.3 + move2 * 0.3) + * Quaternion::rotation_z(move1 * 0.4 + move2 * -0.4); + } + next.main.orientation = + Quaternion::rotation_y(move1 * 0.4 + move2 * -0.6) + * Quaternion::rotation_x(move2 * -0.4); + }, _ => {}, } } diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index 9754e4370c..998777d2e3 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -230,7 +230,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (10.5, -3.0), (Redoni, _) => (10.5, -3.0), (Cultistwarlord, _) => (0.5, 14.5), - (Cultistwarlock, _) => (0.5, 14.5), + (Cultistwarlock, _) => (0.5, 11.0), (Huskbrute, _) => (8.5, 4.0), }, jaw: match (body.species, body.body_type) { @@ -301,8 +301,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (0.0, -8.5), (Redoni, _) => (0.0, -8.5), (Cultistwarlord, _) => (0.0, -1.5), - (Cultistwarlock, _) => (0.0, -1.5), - (Huskbrute, _) => (0.0, -6.5), + (Cultistwarlock, _) => (1.0, -3.5), + (Huskbrute, _) => (-0.5, -7.0), }, tail: match (body.species, body.body_type) { (Werewolf, _) => (-5.5, -2.0), @@ -333,8 +333,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (11.0, 2.0, -5.5), (Redoni, _) => (11.0, 2.0, -5.5), (Cultistwarlord, _) => (11.5, -1.0, 4.5), - (Cultistwarlock, _) => (11.5, -1.0, 4.5), - (Huskbrute, _) => (10.5, 1.0, -2.5), + (Cultistwarlock, _) => (8.0, 0.0, 3.5), + (Huskbrute, _) => (10.5, 0.0, -1.5), }, hand: match (body.species, body.body_type) { (Ogre, Male) => (14.5, 0.0, -4.0), @@ -357,8 +357,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (13.5, 0.5, -8.0), (Redoni, _) => (13.5, 0.5, -8.0), (Cultistwarlord, _) => (11.5, -1.0, -1.0), - (Cultistwarlock, _) => (11.5, -1.0, -1.0), - (Huskbrute, _) => (12.0, 1.5, -6.0), + (Cultistwarlock, _) => (9.5, -1.0, 1.0), + (Huskbrute, _) => (13.0, 0.5, -4.0), }, leg: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 0.0, -4.0), @@ -382,7 +382,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Redoni, _) => (4.5, 2.0, -5.5), (Cultistwarlord, _) => (3.5, -1.0, -8.5), (Cultistwarlock, _) => (3.5, -1.0, -8.5), - (Huskbrute, _) => (4.0, 0.0, -5.5), + (Huskbrute, _) => (4.0, 0.0, -7.5), }, foot: match (body.species, body.body_type) { (Ogre, Male) => (4.0, 1.0, -12.0), @@ -405,7 +405,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (5.0, 5.0, -12.5), (Redoni, _) => (5.0, 5.0, -12.5), (Cultistwarlord, _) => (3.5, 0.0, -12.5), - (Cultistwarlock, _) => (3.5, 0.0, -12.5), + (Cultistwarlock, _) => (3.5, 0.0, -10.5), (Huskbrute, _) => (4.5, 0.5, -12.5), }, scaler: match (body.species, body.body_type) { diff --git a/voxygen/anim/src/biped_large/wield.rs b/voxygen/anim/src/biped_large/wield.rs index c3d985fd71..ef94cd66e8 100644 --- a/voxygen/anim/src/biped_large/wield.rs +++ b/voxygen/anim/src/biped_large/wield.rs @@ -498,6 +498,63 @@ impl Animation for WieldAnimation { next.shoulder_r.orientation = Quaternion::rotation_y(0.4) * Quaternion::rotation_x(0.4); }, + "Husk Brute" => { + if speed > 0.1 { + next.hand_l.position = + Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2); + next.hand_l.orientation = + Quaternion::rotation_x(1.4 + slow * 0.1) + * Quaternion::rotation_z(-PI / 2.0); + + next.hand_r.position = + Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2); + next.hand_r.orientation = + Quaternion::rotation_x(1.4 - slow * 0.1) + * Quaternion::rotation_z(PI / 2.0); + + next.shoulder_l.position = + Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_l.orientation = + Quaternion::rotation_x(1.1 + slow * 0.1); + + next.shoulder_r.position = + Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_r.orientation = + Quaternion::rotation_x(1.1 - slow * 0.1); + } else { + next.shoulder_l.position = + Vec3::new(-s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_l.orientation = Quaternion::rotation_x(breathe); + + next.shoulder_r.position = + Vec3::new(s_a.shoulder.0, s_a.shoulder.1, s_a.shoulder.2); + next.shoulder_r.orientation = Quaternion::rotation_x(breathe); + + next.hand_l.position = Vec3::new( + -s_a.hand.0, + s_a.hand.1, + s_a.hand.2 + torso * -0.1, + ); + + next.hand_r.position = Vec3::new( + s_a.hand.0, + s_a.hand.1, + s_a.hand.2 + torso * -0.1, + ); + + next.leg_l.position = + Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 + torso * -0.2); + + next.leg_r.position = + Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 + torso * -0.2); + + next.foot_l.position = + Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); + + next.foot_r.position = + Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); + } + }, _ => {}, } } diff --git a/world/src/layer/wildlife.rs b/world/src/layer/wildlife.rs index 362fcf2fed..d09e3412d5 100644 --- a/world/src/layer/wildlife.rs +++ b/world/src/layer/wildlife.rs @@ -195,7 +195,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..3) { + .with_body(match rng.gen_range(0..5) { 0 => quadruped_medium::Body::random_with( rng, &quadruped_medium::Species::Mouflon, @@ -206,6 +206,16 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( &quadruped_medium::Species::Yak, ) .into(), + 2 => quadruped_medium::Body::random_with( + rng, + &quadruped_medium::Species::Llama, + ) + .into(), + 3 => quadruped_medium::Body::random_with( + rng, + &quadruped_medium::Species::Alpaca, + ) + .into(), _ => quadruped_medium::Body::random_with( rng, &quadruped_medium::Species::Highland, @@ -916,7 +926,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( close(c.temp, CONFIG.desert_temp + 0.2, 0.3) * close(c.humidity, CONFIG.desert_hum, 0.5) * BASE_DENSITY - * 0.01 + * 0.005 }, }, // Desert solitary wild diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index fa228fa181..750119baaa 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -1093,7 +1093,7 @@ fn mini_boss_4(tile_wcenter: Vec3) -> Vec { fn mini_boss_5(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3) -> Vec { let mut entities = Vec::new(); - match dynamic_rng.gen_range(0..2) { + match dynamic_rng.gen_range(0..3) { 0 => { entities.push( EntityInfo::at(tile_wcenter.map(|e| e as f32)) @@ -1104,6 +1104,12 @@ fn mini_boss_5(dynamic_rng: &mut impl Rng, tile_wcenter: Vec3) -> Vec { + entities.resize_with(2, || { + EntityInfo::at(tile_wcenter.map(|e| e as f32)) + .with_asset_expect("common.entity.dungeon.tier-5.husk_brute") + }); + }, _ => { entities.resize_with(10, || { EntityInfo::at(tile_wcenter.map(|e| e as f32)) From f518aebe81fccc69f0268dfd579a8980095b0f25 Mon Sep 17 00:00:00 2001 From: Snowram Date: Wed, 23 Jun 2021 22:15:05 +0200 Subject: [PATCH 5/7] Ajustments to new npcs --- .../custom/husk_brute/chargedmelee.ron | 2 +- .../custom/husk_brute/singlestrike.ron | 2 +- .../common/entity/dungeon/tier-5/warlock.ron | 5 ++++- .../common/entity/dungeon/tier-5/warlord.ron | 3 +-- .../items/weapons/bow/bipedlarge-velorite.ron | 4 ++-- .../hammer/bipedlarge-cultist_purp_2h-0.ron | 4 ++-- .../staff/bipedlarge-cultist_staff.ron | 4 ++-- .../weapons/sword/bipedlarge-cultist.ron | 4 ++-- .../voxel/npc/ngoubou/male/torso_back.vox | Bin 6852 -> 7264 bytes .../quadruped_medium_central_manifest.ron | 6 +++--- common/src/comp/body.rs | 6 +++--- common/src/comp/inventory/loadout_builder.rs | 4 +++- common/src/states/utils.rs | 8 +++++++- server/src/sys/agent.rs | 4 ++-- voxygen/anim/src/biped_large/idle.rs | 2 +- voxygen/anim/src/biped_large/mod.rs | 2 +- voxygen/anim/src/biped_large/run.rs | 2 +- voxygen/anim/src/biped_large/shoot.rs | 2 +- voxygen/anim/src/quadruped_medium/mod.rs | 4 ++-- 19 files changed, 39 insertions(+), 29 deletions(-) diff --git a/assets/common/abilities/custom/husk_brute/chargedmelee.ron b/assets/common/abilities/custom/husk_brute/chargedmelee.ron index e4006d5949..94c388f71b 100644 --- a/assets/common/abilities/custom/husk_brute/chargedmelee.ron +++ b/assets/common/abilities/custom/husk_brute/chargedmelee.ron @@ -7,7 +7,7 @@ ChargedMelee( scaled_poise_damage: 150, initial_knockback: 0.0, scaled_knockback: 0.0, - range: 5.0, + range: 3.5, max_angle: 45.0, speed: 1.0, charge_duration: 1.5, diff --git a/assets/common/abilities/custom/husk_brute/singlestrike.ron b/assets/common/abilities/custom/husk_brute/singlestrike.ron index d64184bfa8..3c93be79ca 100644 --- a/assets/common/abilities/custom/husk_brute/singlestrike.ron +++ b/assets/common/abilities/custom/husk_brute/singlestrike.ron @@ -7,7 +7,7 @@ ComboMelee( base_poise_damage: 12, poise_damage_increase: 0, knockback: 5.0, - range: 2.5, + range: 3.5, angle: 60.0, base_buildup_duration: 0.25, base_swing_duration: 0.07, diff --git a/assets/common/entity/dungeon/tier-5/warlock.ron b/assets/common/entity/dungeon/tier-5/warlock.ron index 3ad3030460..b6d9ae4608 100644 --- a/assets/common/entity/dungeon/tier-5/warlock.ron +++ b/assets/common/entity/dungeon/tier-5/warlock.ron @@ -4,7 +4,10 @@ EntityConfig ( loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), - main_tool: Some(Item("common.items.weapons.staff.bipedlarge-cultist_staff")), + main_tool: Some(Choice([ + (1.5, Some(Item("common.items.weapons.staff.bipedlarge-cultist_staff"))), + (1.0, Some(Item("common.items.weapons.bow.bipedlarge-velorite"))), + ])), second_tool: None, loadout_asset: None, diff --git a/assets/common/entity/dungeon/tier-5/warlord.ron b/assets/common/entity/dungeon/tier-5/warlord.ron index 4f7c0c4327..e248724c60 100644 --- a/assets/common/entity/dungeon/tier-5/warlord.ron +++ b/assets/common/entity/dungeon/tier-5/warlord.ron @@ -5,9 +5,8 @@ EntityConfig ( loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), main_tool: Some(Choice([ - (2.0, Some(Item("common.items.weapons.sword.bipedlarge-cultist"))), + (1.5, Some(Item("common.items.weapons.sword.bipedlarge-cultist"))), (1.0, Some(Item("common.items.weapons.hammer.bipedlarge-cultist_purp_2h-0"))), - (1.0, Some(Item("common.items.weapons.bow.bipedlarge-velorite"))), ])), second_tool: None, diff --git a/assets/common/items/weapons/bow/bipedlarge-velorite.ron b/assets/common/items/weapons/bow/bipedlarge-velorite.ron index f9fe278cf3..800a221e8e 100644 --- a/assets/common/items/weapons/bow/bipedlarge-velorite.ron +++ b/assets/common/items/weapons/bow/bipedlarge-velorite.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: Direct(( equip_time_secs: 0.4, - power: 2.0, + power: 1.6, poise_strength: 1.1, - speed: 1.0, + speed: 0.8, crit_chance: 0.140625, )), )), diff --git a/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron b/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron index a68c9c4a58..6161fa12a7 100644 --- a/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron +++ b/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: Direct(( equip_time_secs: 0.5, - power: 2.0, + power: 1.6, poise_strength: 1.0, - speed: 1.0, + speed: 0.8, crit_chance: 0.140625, )), )), diff --git a/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron b/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron index f0ac7f7bf3..c709f9a11b 100644 --- a/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron +++ b/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: Direct(( equip_time_secs: 0.3, - power: 2.0, + power: 1.6, poise_strength: 1.0, - speed: 1.0, + speed: 0.8, crit_chance: 0.140625, )), )), diff --git a/assets/common/items/weapons/sword/bipedlarge-cultist.ron b/assets/common/items/weapons/sword/bipedlarge-cultist.ron index 1f33916eb1..dd62980f60 100644 --- a/assets/common/items/weapons/sword/bipedlarge-cultist.ron +++ b/assets/common/items/weapons/sword/bipedlarge-cultist.ron @@ -6,9 +6,9 @@ ItemDef( hands: Two, stats: Direct(( equip_time_secs: 0.5, - power: 2.0, + power: 1.6, poise_strength: 1.0, - speed: 1.0, + speed: 0.8, crit_chance: 0.140625, )), )), diff --git a/assets/voxygen/voxel/npc/ngoubou/male/torso_back.vox b/assets/voxygen/voxel/npc/ngoubou/male/torso_back.vox index 97beb21457eb2da216d5345ba49db659c3d89bb4..6434fec7d2c1414c6780a7ecf58ba68965821a5a 100644 GIT binary patch literal 7264 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 Sk5B&W{p0Wc>Z9Z74)C8%Mc)1Z literal 6852 zcmeI0&8s!pRmN+t@4c(ejZO45z5zQn4XqJrjlqwWXm=!bn#TBQAao}|5EQ2lbkZQG zLx&EWDu@Gdl97XR&gh&|_rBoN|093G@wZ<=2+*s#E)8J)sL1N z?}~T4k3666RY zOSipby;K|5TKcuixc1gB73o{Ua!d&j5Q1!U0F}It7D^MV;J`9#DPt* zoh3Sak6m*+TW!Z!`kuD!8vT^4nP9M3&&j&E)TL~_X{^W6akD%ewenojuhn?B@u0v3G+< zt-VX$dW%bsejC`;y;!Rs6<;a7(zfmjk7kG6@RebMwQ*@Zj|O)U*d1ua;T@YCn;gG6 zHfgV;FLetz3~UN)3Tz5&O2hx~l!A?LluO*C*C`jfG&n5mD}`f8=Gl(Y*W<#P()&p} z+U8l|yRk;Kz#oQA{MHTL>EAW4UG>%_Xm;t%ZzK9H@YtiS!|NjGUC^SU5rtzFu%bgn z%i71uz+(ztI97ZoNvxr7&Gl@ZSc7v1zdJgIdq*Pbs2<4PqY{JP#KefzvrOB` zjg4zp-!0pdf@x&IS3foQ8Id;|brjpMsm_9q1&#!c1P!aLyA1Lu@vHEpug(I7> z4|ba|-|}ks+3>Ruv{A%Hl8?xVvca8?TSK=FC$4o9=JWO8ZZGgx$VC}f4mWU6X5>=1Sq0pA>>DwWLcA+H!I2x9 zA~sgtN9JWj>`jPoa5wfFnYhulNJmq|46&>DTEVO6T8Uj<;-ZU@BRY8u-H=nP!2vO8 zXxcluVUQb&mgEO=p_6MIzdP6*e>+IQ^D2If};iS^nngmVr3&niu>dqY(2;YPRtCwjy3kN+I1AT6V1hTYqnk+cpG>d zaV+>&$WwxEr6u?SEsz7yv#oOv>1Wx%5OdC+x}iQo(QFG_-BtG_)*p-`-{} zL5tgVvX%Jh#MB^%)Oz(C7u)LC_}x}=XrMLrXeVbmIl$q^@x9F7;K=cRY_dz_IYQ7^ zodd4I@IfUSGBo7Zgsq+Z!5drErSU9L+6>&!Lu;$W~Mo`>Izxvirq zFevsZI28MI*hL4wcg5#^l{6Y_70;WKQ^2+IJQV)q+8j>8XcH^zmry5wapj&kS;&1$ z61TBD1=yVRefaLI?>)#HXt;=F);HEScr?~Guqo>+>uX{U*mQ%J6;4*3;Yzz)g!P5> z1)P%DgqDQ3l#ORF3pO-^BXrovNsU-;$#2AVTjjQ}w=Ge7;=91MfcNNV8rvM+9c~=o z`HIbO$F;wk^O4Zem)= zi%Nb}I951T@_@1*D0_o|LBJsF8RFn$ACV1g7LuHYt~l2}N568IyMyq?qnMUL8dCKiI&3iJ}_)gA2Q7YB=j#S`oW z&SJkH7de=m{mSu+4{{=T!tjrw9|M~Oeq~Rv4cz2BRs74Ip%an9b0+p$GN?1G9ly@uw?guLB!cg$m4$suCSJ}2jhdvf z&o%b-#yLyaw_A|o@%JD<4Db)|cXZsr-^qQQ{LsPQ2ek$HsRBO84+Z|h--W*me;58P z_TWOl3I1eXPW+whF^P7Q_)GSm#LtO#!+a0?8~8WSZh$?Azaaix(F@vju(}gF4maTS zKpRP&Rn+Cw5I(rFFBu#d92k4385*IUQaDf{Ht@SrlPDa>0xz>xWnUL+SAh%RT+*m{ zniTrrp0kxu+YLAv=zWlb#>9``J2}6T^LtTq;rC8n>|pNX#3EkR51bbtPLU7n@ek+Z zIh;D!^HiQZQw#gXZ=8vpGbX=-;$1qDw)S>YTgLpE`8Jh7U5u8McY=dWv(lb0_1&NX>1 zt~#HUXOpK;=F)kkueHZ8eph9@ye#G_lgG67B=j?HPv-KZa}MT`c~3uOj4{TT$Fx0~ zwU^Gh+L+&Cd8ybUyc7B@v|yfK&SYE^ zeOGLq<5tFOi~+mDMOAyOIgUO#YuMl&wnZ{u=Us1Hm&f25eR;~k+=J)2u7j1eYyP%j zr_-=ESrQZ39e+#m^Q3nP=WL%mBu=a zaYi5GS(#I3f96o;HlBq!75j|7##MPXcrxZuxG;EAp5@iGy)!LbzScte)!@4w;urqlmAcS{xiLQ>ih5i+h5Hd$u{|i6R@5RqOyZ^_(Uw`1YPqXDm@$SXfzWk~7 z{p4$}-CzIQv-|7Mp55R2{O5nD?-zgK$L?Qx{^R#|UjN+v-8Y{9(EEw$<6rs0{X6fx zasQ*Qym|lQ-+Jr*$w$9>|C>L2=l-{U@|*YX{LXLRzxvC+bbsUdPu<^r{rUatZ~pZC z#almffAPgP@Bj4YfAK%g_kYRLJ3s%k_qU&Y_P_1;`g`x*UwrWXeO|x$?r+?mfA+Qe kH@@;~_YZ&l%l8-WynX-VyYJsW`P29BfA^Ok-Dd{)Pr3k!LjV8( diff --git a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron index a1f9869837..69901c6685 100644 --- a/assets/voxygen/voxel/quadruped_medium_central_manifest.ron +++ b/assets/voxygen/voxel/quadruped_medium_central_manifest.ron @@ -1809,7 +1809,7 @@ central: ("npc.mammoth.male.neck"), ), jaw: ( - offset: (-3.0, 0.0, -13.0), + offset: (-3.0, -5.0, -13.0), central: ("npc.mammoth.male.jaw"), ), torso_front: ( @@ -1839,7 +1839,7 @@ central: ("npc.mammoth.male.neck"), ), jaw: ( - offset: (-3.0, 0.0, -13.0), + offset: (-3.0, -5.0, -13.0), central: ("npc.mammoth.male.jaw"), ), torso_front: ( @@ -1869,7 +1869,7 @@ central: ("npc.ngoubou.male.neck"), ), jaw: ( - offset: (-2.5, 0.0, -3.0), + offset: (-2.5, -7.0, -3.0), central: ("npc.ngoubou.male.jaw"), ), torso_front: ( diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 6755a2bb18..8a1ab6de4a 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -310,7 +310,7 @@ impl Body { biped_large::Species::Werewolf => Vec3::new(4.0, 3.0, 3.5), biped_large::Species::Harvester => Vec3::new(4.6, 3.0, 5.4), biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5), - biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 4.5), + biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 3.5), biped_large::Species::Huskbrute => Vec3::new(4.6, 3.0, 5.0), _ => Vec3::new(4.6, 3.0, 6.0), }, @@ -469,7 +469,7 @@ impl Body { quadruped_medium::Species::Bear => 900, quadruped_medium::Species::Moose => 800, quadruped_medium::Species::Dreadhorn => 1100, - quadruped_medium::Species::Mammoth => 1700, + quadruped_medium::Species::Mammoth => 1900, quadruped_medium::Species::Ngoubou => 1500, _ => 700, }, @@ -594,7 +594,7 @@ impl Body { quadruped_medium::Species::Bear => 40, quadruped_medium::Species::Moose => 30, quadruped_medium::Species::Dreadhorn => 50, - quadruped_medium::Species::Mammoth => 70, + quadruped_medium::Species::Mammoth => 80, quadruped_medium::Species::Ngoubou => 50, _ => 20, }, diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index 69a85e3402..c3b6f5d3ff 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -186,7 +186,9 @@ fn default_main_tool(body: &Body) -> Item { quadruped_medium::Species::Tuskram | quadruped_medium::Species::Roshwalr | quadruped_medium::Species::Moose - | quadruped_medium::Species::Dreadhorn => Some(Item::new_from_asset_expect( + | quadruped_medium::Species::Dreadhorn + | quadruped_medium::Species::Mammoth + | quadruped_medium::Species::Ngoubou => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.quadmedcharge", )), quadruped_medium::Species::Highland diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index 102260b501..d18830cf56 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -79,6 +79,9 @@ impl Body { biped_large::Species::Mightysaurok => 100.0, biped_large::Species::Mindflayer => 90.0, biped_large::Species::Minotaur => 60.0, + biped_large::Species::Huskbrute => 130.0, + biped_large::Species::Cultistwarlord => 110.0, + biped_large::Species::Cultistwarlock => 90.0, _ => 80.0, }, Body::BirdMedium(_) => 80.0, @@ -138,7 +141,10 @@ impl Body { match self { Body::Humanoid(_) => 3.5, Body::QuadrupedSmall(_) => 3.0, - Body::QuadrupedMedium(_) => 2.8, + Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species { + quadruped_medium::Species::Mammoth => 2.2, + _ => 2.8, + }, Body::BirdMedium(_) => 6.0, Body::FishMedium(_) => 6.0, Body::Dragon(_) => 1.0, diff --git a/server/src/sys/agent.rs b/server/src/sys/agent.rs index 54d9fa04c2..2810a7cd40 100644 --- a/server/src/sys/agent.rs +++ b/server/src/sys/agent.rs @@ -1637,7 +1637,7 @@ impl<'a> AgentData<'a> { }, "Quad Med Jump" => Tactic::QuadMedJump, "Quad Med Charge" => Tactic::CircleCharge { - radius: 12, + radius: 6, circle_time: 1, }, "Quad Med Basic" => Tactic::QuadMedBasic, @@ -1645,7 +1645,7 @@ impl<'a> AgentData<'a> { "Quad Low Breathe" | "Quad Low Beam" | "Basilisk" => { Tactic::QuadLowBeam }, - "Quad Low Tail" => Tactic::TailSlap, + "Quad Low Tail" | "Husk Brute" => Tactic::TailSlap, "Quad Low Quick" => Tactic::QuadLowQuick, "Quad Low Basic" => Tactic::QuadLowBasic, "Theropod Basic" | "Theropod Bird" => Tactic::Theropod, diff --git a/voxygen/anim/src/biped_large/idle.rs b/voxygen/anim/src/biped_large/idle.rs index 96a2448fce..366a4c33bd 100644 --- a/voxygen/anim/src/biped_large/idle.rs +++ b/voxygen/anim/src/biped_large/idle.rs @@ -90,7 +90,7 @@ impl Animation for IdleAnimation { match active_tool_kind { Some(ToolKind::Bow) => { - next.main.position = Vec3::new(-2.0, -5.0, -6.0); + next.main.position = Vec3::new(0.0, -6.0, 0.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); }, Some(ToolKind::Staff) | Some(ToolKind::Sceptre) => { diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index 998777d2e3..f90f29f610 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -421,7 +421,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Occultsaurok, _) => 1.0, (Mightysaurok, _) => 1.0, (Slysaurok, _) => 1.0, - (Mindflayer, _) => 1.5, + (Mindflayer, _) => 1.6, (Minotaur, _) => 1.7, (Tidalwarrior, _) => 1.7, (Yeti, _) => 1.2, diff --git a/voxygen/anim/src/biped_large/run.rs b/voxygen/anim/src/biped_large/run.rs index e4c074d2f5..51c5829d0d 100644 --- a/voxygen/anim/src/biped_large/run.rs +++ b/voxygen/anim/src/biped_large/run.rs @@ -295,7 +295,7 @@ impl Animation for RunAnimation { match active_tool_kind { Some(ToolKind::Bow) => { - next.main.position = Vec3::new(-2.0, -5.0, -6.0); + next.main.position = Vec3::new(0.0, -6.0, 0.0); next.main.orientation = Quaternion::rotation_y(2.5) * Quaternion::rotation_z(1.57); }, diff --git a/voxygen/anim/src/biped_large/shoot.rs b/voxygen/anim/src/biped_large/shoot.rs index bcebd91075..2b9428d06f 100644 --- a/voxygen/anim/src/biped_large/shoot.rs +++ b/voxygen/anim/src/biped_large/shoot.rs @@ -156,7 +156,7 @@ impl Animation for ShootAnimation { next.control.position = Vec3::new( -1.0 + move1 * 2.0, 6.0 + s_a.grip.0 / 1.2 + move1 * 7.0, - -5.0 + -s_a.grip.0 / 2.0 + move1 * s_a.height * 2.8, + -5.0 + -s_a.grip.0 / 2.0 + move1 * s_a.height * 3.4, ); next.control_l.orientation = diff --git a/voxygen/anim/src/quadruped_medium/mod.rs b/voxygen/anim/src/quadruped_medium/mod.rs index c4f74eeb05..96cdd6a2ac 100644 --- a/voxygen/anim/src/quadruped_medium/mod.rs +++ b/voxygen/anim/src/quadruped_medium/mod.rs @@ -250,8 +250,8 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Moose, Male) => (10.0, -7.0), (Moose, Female) => (6.0, -2.5), (Snowleopard, _) => (3.0, -3.0), - (Mammoth, _) => (4.5, -3.0), - (Ngoubou, _) => (4.5, -4.0), + (Mammoth, _) => (9.5, -3.0), + (Ngoubou, _) => (8.5, -4.0), (Llama, _) => (4.0, -1.0), (Alpaca, _) => (3.0, -2.5), }, From 3b393a9c5c50a7071a61b0d1b153310966ce3349 Mon Sep 17 00:00:00 2001 From: Snowram Date: Thu, 24 Jun 2021 23:04:17 +0200 Subject: [PATCH 6/7] Ajust new npcs from feedback --- .../entity/dungeon/tier-5/husk_brute.ron | 2 +- .../common/entity/dungeon/tier-5/warlord.ron | 2 +- .../creature/quad_low/salamander.ron | 4 +++ .../creature/quad_medium/dreadhorn.ron | 2 +- .../creature/quad_medium/mammoth.ron | 2 +- .../loot_tables/creature/theropod/generic.ron | 2 +- .../loot_tables/creature/theropod/raptor.ron | 2 +- assets/common/recipe_book.ron | 18 +++++----- .../skillset/dungeon/tier-5/sword_simple.ron | 13 +++++++ .../skillset/dungeon/tier-5/warlord.ron | 5 +++ common/src/comp/body.rs | 19 ++++++---- server/src/events/entity_manipulation.rs | 5 ++- .../migrations/V41_remove_warlock_warlord.sql | 36 +++++++++---------- voxygen/anim/src/biped_large/mod.rs | 4 +-- world/src/layer/wildlife.rs | 28 ++++++++++++--- 15 files changed, 97 insertions(+), 47 deletions(-) create mode 100644 assets/common/loot_tables/creature/quad_low/salamander.ron create mode 100644 assets/common/skillset/dungeon/tier-5/sword_simple.ron create mode 100644 assets/common/skillset/dungeon/tier-5/warlord.ron diff --git a/assets/common/entity/dungeon/tier-5/husk_brute.ron b/assets/common/entity/dungeon/tier-5/husk_brute.ron index fc2592fb47..40f26815b6 100644 --- a/assets/common/entity/dungeon/tier-5/husk_brute.ron +++ b/assets/common/entity/dungeon/tier-5/husk_brute.ron @@ -2,7 +2,7 @@ EntityConfig ( name: Some("Husk Brute"), body: Some(RandomWith("husk_brute")), - loot: Some(LootTable("common.loot_tables.dungeon.tier-5.minion")), + loot: Some(LootTable("common.loot_tables.dungeon.tier-5.miniboss")), main_tool: None, second_tool: None, diff --git a/assets/common/entity/dungeon/tier-5/warlord.ron b/assets/common/entity/dungeon/tier-5/warlord.ron index e248724c60..01f7c29a71 100644 --- a/assets/common/entity/dungeon/tier-5/warlord.ron +++ b/assets/common/entity/dungeon/tier-5/warlord.ron @@ -11,5 +11,5 @@ EntityConfig ( second_tool: None, loadout_asset: None, - skillset_asset: Some("common.skillset.dungeon.tier-5.enemy"), + skillset_asset: Some("common.skillset.dungeon.tier-5.warlord"), ) diff --git a/assets/common/loot_tables/creature/quad_low/salamander.ron b/assets/common/loot_tables/creature/quad_low/salamander.ron new file mode 100644 index 0000000000..faad9ec4e5 --- /dev/null +++ b/assets/common/loot_tables/creature/quad_low/salamander.ron @@ -0,0 +1,4 @@ +[ + (1.0, Item("common.items.crafting_ing.hide.tough_hide")), + (3.0, Item("common.items.crafting_ing.hide.scales")), +] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_medium/dreadhorn.ron b/assets/common/loot_tables/creature/quad_medium/dreadhorn.ron index 74c79cede6..dbdeda8a3a 100644 --- a/assets/common/loot_tables/creature/quad_medium/dreadhorn.ron +++ b/assets/common/loot_tables/creature/quad_medium/dreadhorn.ron @@ -2,5 +2,5 @@ (1.5, Item("common.items.food.meat.beast_small_raw")), (0.5, Item("common.items.food.meat.beast_large_raw")), (2.0, Item("common.items.crafting_ing.animal_misc.large_horn")), - (3.0, Item("common.items.crafting_ing.hide.carapace")), + (3.0, Item("common.items.crafting_ing.hide.rugged_hide")), ] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/quad_medium/mammoth.ron b/assets/common/loot_tables/creature/quad_medium/mammoth.ron index 73dd2ad8a6..810ff5b9a5 100644 --- a/assets/common/loot_tables/creature/quad_medium/mammoth.ron +++ b/assets/common/loot_tables/creature/quad_medium/mammoth.ron @@ -1,4 +1,4 @@ [ - (1.0, ItemQuantity("common.items.crafting_ing.hide.tough_hide", 2, 3)), + (1.0, ItemQuantity("common.items.crafting_ing.hide.rugged_hide", 1, 2)), (1.0, ItemQuantity("common.items.crafting_ing.animal_misc.large_horn", 2, 3)), ] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/theropod/generic.ron b/assets/common/loot_tables/creature/theropod/generic.ron index 14dbec1175..17b921280a 100644 --- a/assets/common/loot_tables/creature/theropod/generic.ron +++ b/assets/common/loot_tables/creature/theropod/generic.ron @@ -1,3 +1,3 @@ [ - (1.0, Item("common.items.crafting_ing.hide.plate")), + (1.0, Item("common.items.crafting_ing.hide.rugged_hide")), ] \ No newline at end of file diff --git a/assets/common/loot_tables/creature/theropod/raptor.ron b/assets/common/loot_tables/creature/theropod/raptor.ron index 2cd8de953f..818f740948 100644 --- a/assets/common/loot_tables/creature/theropod/raptor.ron +++ b/assets/common/loot_tables/creature/theropod/raptor.ron @@ -1,5 +1,5 @@ [ (0.5, Item("common.items.food.meat.beast_large_raw")), - (1.0, Item("common.items.crafting_ing.hide.tough_hide")), + (1.0, Item("common.items.crafting_ing.hide.scales")), (1.0, Item("common.items.crafting_ing.animal_misc.raptor_feather")), ] \ No newline at end of file diff --git a/assets/common/recipe_book.ron b/assets/common/recipe_book.ron index 9f8f48e7dd..16bf38cecd 100644 --- a/assets/common/recipe_book.ron +++ b/assets/common/recipe_book.ron @@ -275,7 +275,7 @@ output: ("common.items.mineral.ingot.bloodsteel", 2), inputs: [ (Item("common.items.mineral.ore.bloodstone"), 1), - (Item("common.items.mineral.ore.iron"), 1), + (Item("common.items.mineral.ingot.iron"), 1), (Item("common.items.mineral.ore.coal"), 1), ], craft_sprite: Some(Forge), @@ -283,7 +283,7 @@ "steel ingot": ( output: ("common.items.mineral.ingot.steel", 1), inputs: [ - (Item("common.items.mineral.ore.iron"), 1), + (Item("common.items.mineral.ingot.iron"), 1), (Item("common.items.mineral.ore.coal"), 1), ], craft_sprite: Some(Forge), @@ -917,8 +917,8 @@ "woolen belt": ( output: ("common.items.armor.cloth.woolen.belt", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.wool"), 2), - (Item("common.items.crafting_ing.cloth.cotton"), 2), + (Item("common.items.crafting_ing.cloth.wool"), 1), + (Item("common.items.crafting_ing.cloth.cotton"), 1), (Item("common.items.crafting_ing.animal_misc.fur"), 1), (Item("common.items.crafting_tools.sewing_set"), 0), ], @@ -927,7 +927,7 @@ "woolen chest": ( output: ("common.items.armor.cloth.woolen.chest", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.wool"), 10), + (Item("common.items.crafting_ing.cloth.wool"), 8), (Item("common.items.crafting_ing.cloth.cotton"), 2), (Item("common.items.crafting_ing.animal_misc.fur"), 2), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -937,7 +937,7 @@ "woolen feet": ( output: ("common.items.armor.cloth.woolen.foot", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.wool"), 3), + (Item("common.items.crafting_ing.cloth.wool"), 2), (Item("common.items.crafting_ing.cloth.cotton"), 1), (Item("common.items.crafting_ing.animal_misc.fur"), 1), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -947,7 +947,7 @@ "woolen hands": ( output: ("common.items.armor.cloth.woolen.hand", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.wool"), 3), + (Item("common.items.crafting_ing.cloth.wool"), 2), (Item("common.items.crafting_ing.cloth.cotton"), 1), (Item("common.items.crafting_ing.animal_misc.fur"), 1), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -957,7 +957,7 @@ "woolen pants": ( output: ("common.items.armor.cloth.woolen.pants", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.wool"), 8), + (Item("common.items.crafting_ing.cloth.wool"), 6), (Item("common.items.crafting_ing.cloth.cotton"), 2), (Item("common.items.crafting_ing.animal_misc.fur"), 2), (Item("common.items.crafting_tools.sewing_set"), 0), @@ -967,7 +967,7 @@ "woolen shoulder": ( output: ("common.items.armor.cloth.woolen.shoulder", 1), inputs: [ - (Item("common.items.crafting_ing.cloth.wool"), 8), + (Item("common.items.crafting_ing.cloth.wool"), 6), (Item("common.items.crafting_ing.cloth.cotton"), 2), (Item("common.items.crafting_ing.animal_misc.fur"), 2), (Item("common.items.crafting_tools.sewing_set"), 0), diff --git a/assets/common/skillset/dungeon/tier-5/sword_simple.ron b/assets/common/skillset/dungeon/tier-5/sword_simple.ron new file mode 100644 index 0000000000..28d8bc547d --- /dev/null +++ b/assets/common/skillset/dungeon/tier-5/sword_simple.ron @@ -0,0 +1,13 @@ +([ + Group(Weapon(Sword)), + + // TripleStrike + Skill((Sword(TsCombo), None)), + Skill((Sword(TsDamage), Some(1))), + Skill((Sword(TsRegen), Some(1))), + + // Dash + Skill((Sword(DDamage), Some(1))), + Skill((Sword(DCost), Some(1))), + Skill((Sword(DDrain), Some(1))), +]) diff --git a/assets/common/skillset/dungeon/tier-5/warlord.ron b/assets/common/skillset/dungeon/tier-5/warlord.ron new file mode 100644 index 0000000000..85c6edcab3 --- /dev/null +++ b/assets/common/skillset/dungeon/tier-5/warlord.ron @@ -0,0 +1,5 @@ +([ + // Just gather everything + Tree("common.skillset.dungeon.tier-5.sword_simple"), + Tree("common.skillset.dungeon.tier-5.hammer"), +]) diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 8a1ab6de4a..2ae9bc6905 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -468,9 +468,9 @@ impl Body { quadruped_medium::Species::Panda => 900, quadruped_medium::Species::Bear => 900, quadruped_medium::Species::Moose => 800, - quadruped_medium::Species::Dreadhorn => 1100, - quadruped_medium::Species::Mammoth => 1900, - quadruped_medium::Species::Ngoubou => 1500, + quadruped_medium::Species::Dreadhorn => 1300, + quadruped_medium::Species::Mammoth => 2500, + quadruped_medium::Species::Ngoubou => 1800, _ => 700, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -504,6 +504,7 @@ impl Body { biped_large::Species::Harvester => 5000, biped_large::Species::Blueoni => 2400, biped_large::Species::Redoni => 2400, + biped_large::Species::Huskbrute => 8000, _ => 1200, }, Body::BipedSmall(biped_small) => match biped_small.species { @@ -541,7 +542,7 @@ impl Body { quadruped_low::Species::Rocksnapper => 1400, quadruped_low::Species::Pangolin => 400, quadruped_low::Species::Maneater => 1300, - quadruped_low::Species::Sandshark => 900, + quadruped_low::Species::Sandshark => 1100, quadruped_low::Species::Hakulaq => 500, quadruped_low::Species::Lavadrake => 1600, quadruped_low::Species::Basilisk => 2000, @@ -595,7 +596,7 @@ impl Body { quadruped_medium::Species::Moose => 30, quadruped_medium::Species::Dreadhorn => 50, quadruped_medium::Species::Mammoth => 80, - quadruped_medium::Species::Ngoubou => 50, + quadruped_medium::Species::Ngoubou => 60, _ => 20, }, Body::BirdMedium(bird_medium) => match bird_medium.species { @@ -622,6 +623,7 @@ impl Body { biped_large::Species::Mountaintroll => 60, biped_large::Species::Swamptroll => 60, biped_large::Species::Dullahan => 120, + biped_large::Species::Huskbrute => 100, // Boss enemies have their health set, not adjusted by level. biped_large::Species::Mindflayer => 0, biped_large::Species::Minotaur => 0, @@ -644,7 +646,7 @@ impl Body { quadruped_low::Species::Rocksnapper => 50, quadruped_low::Species::Pangolin => 10, quadruped_low::Species::Maneater => 30, - quadruped_low::Species::Sandshark => 40, + quadruped_low::Species::Sandshark => 45, quadruped_low::Species::Hakulaq => 10, quadruped_low::Species::Deadwood => 30, _ => 20, @@ -670,6 +672,11 @@ impl Body { Body::Golem(g) => matches!(g.species, golem::Species::ClayGolem), Body::BipedSmall(b) => matches!(b.species, biped_small::Species::Haniwa), Body::Object(object::Body::HaniwaSentry) => true, + Body::QuadrupedLow(q) => matches!(q.species, quadruped_low::Species::Lavadrake), + Body::BirdLarge(b) => matches!( + b.species, + bird_large::Species::Phoenix | bird_large::Species::Cockatrice + ), _ => false, }, BuffKind::Ensnared => { diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs index 35ac92b0a5..b01f17e13a 100644 --- a/server/src/events/entity_manipulation.rs +++ b/server/src/events/entity_manipulation.rs @@ -368,7 +368,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc quadruped_small::Species::Truffler | quadruped_small::Species::Fungome => { "common.loot_tables.creature.quad_small.mushroom" }, - quadruped_small::Species::Sheep => { + quadruped_small::Species::Sheep | quadruped_small::Species::Goat => { "common.loot_tables.creature.quad_small.wool" }, quadruped_small::Species::Skunk @@ -495,6 +495,9 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc quadruped_low::Species::Basilisk => { "common.loot_tables.creature.quad_low.basilisk" }, + quadruped_low::Species::Salamander => { + "common.loot_tables.creature.quad_low.salamander" + }, _ => "common.loot_tables.creature.quad_low.generic", } }, diff --git a/server/src/migrations/V41_remove_warlock_warlord.sql b/server/src/migrations/V41_remove_warlock_warlord.sql index e445c8a50d..500a505c56 100644 --- a/server/src/migrations/V41_remove_warlock_warlord.sql +++ b/server/src/migrations/V41_remove_warlock_warlord.sql @@ -1,33 +1,31 @@ --- xx +-- Replace all warlord and warlock sets into cultist set UPDATE item -SET item_definition_id = 'common.items.armor.warlock.shoulder' WHERE item_definition_id = 'common.items.armor.cultist.shoulder'; +SET item_definition_id = 'common.items.armor.cultist.shoulder' WHERE item_definition_id = 'common.items.armor.warlock.shoulder'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.chest' WHERE item_definition_id = 'common.items.armor.cultist.chest'; +SET item_definition_id = 'common.items.armor.cultist.chest' WHERE item_definition_id = 'common.items.armor.warlock.chest'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.belt' WHERE item_definition_id = 'common.items.armor.cultist.belt'; +SET item_definition_id = 'common.items.armor.cultist.belt' WHERE item_definition_id = 'common.items.armor.warlock.belt'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.hand' WHERE item_definition_id = 'common.items.armor.cultist.hand'; +SET item_definition_id = 'common.items.armor.cultist.hand' WHERE item_definition_id = 'common.items.armor.warlock.hand'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.pants' WHERE item_definition_id = 'common.items.armor.cultist.pants'; +SET item_definition_id = 'common.items.armor.cultist.pants' WHERE item_definition_id = 'common.items.armor.warlock.pants'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.foot' WHERE item_definition_id = 'common.items.armor.cultist.foot'; +SET item_definition_id = 'common.items.armor.cultist.foot' WHERE item_definition_id = 'common.items.armor.warlock.foot'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.back' WHERE item_definition_id = 'common.items.armor.misc.back.dungeon_purple'; +SET item_definition_id = 'common.items.armor.misc.back.dungeon_purple' WHERE item_definition_id = 'common.items.armor.warlock.back'; +DELETE FROM item WHERE item_definition_id = 'common.items.armor.warlock.head'; UPDATE item -SET item_definition_id = 'common.items.armor.warlock.head' WHERE item_definition_id = 'common.items.armor.cultist.head'; +SET item_definition_id = 'common.items.armor.cultist.shoulder' WHERE item_definition_id = 'common.items.armor.warlord.shoulder'; UPDATE item -SET item_definition_id = 'common.items.armor.warlord.shoulder' WHERE item_definition_id = 'common.items.armor.cultist.shoulder'; +SET item_definition_id = 'common.items.armor.cultist.chest' WHERE item_definition_id = 'common.items.armor.warlord.chest'; UPDATE item -SET item_definition_id = 'common.items.armor.warlord.chest' WHERE item_definition_id = 'common.items.armor.cultist.chest'; +SET item_definition_id = 'common.items.armor.cultist.belt' WHERE item_definition_id = 'common.items.armor.warlord.belt'; UPDATE item -SET item_definition_id = 'common.items.armor.warlord.belt' WHERE item_definition_id = 'common.items.armor.cultist.belt'; +SET item_definition_id = 'common.items.armor.cultist.hand' WHERE item_definition_id = 'common.items.armor.warlord.hand'; UPDATE item -SET item_definition_id = 'common.items.armor.warlord.hand' WHERE item_definition_id = 'common.items.armor.cultist.hand'; +SET item_definition_id = 'common.items.armor.cultist.pants' WHERE item_definition_id = 'common.items.armor.warlord.pants'; UPDATE item -SET item_definition_id = 'common.items.armor.warlord.pants' WHERE item_definition_id = 'common.items.armor.cultist.pants'; +SET item_definition_id = 'common.items.armor.cultist.foot' WHERE item_definition_id = 'common.items.armor.warlord.foot'; UPDATE item -SET item_definition_id = 'common.items.armor.warlord.foot' WHERE item_definition_id = 'common.items.armor.cultist.foot'; -UPDATE item -SET item_definition_id = 'common.items.armor.warlord.back' WHERE item_definition_id = 'common.items.armor.misc.back.dungeon_purple'; -UPDATE item -SET item_definition_id = 'common.items.armor.warlord.head' WHERE item_definition_id = 'common.items.armor.cultist.head'; \ No newline at end of file +SET item_definition_id = 'common.items.armor.misc.back.dungeon_purple' WHERE item_definition_id = 'common.items.armor.warlord.back'; +DELETE FROM item WHERE item_definition_id = 'common.items.armor.warlord.head'; \ No newline at end of file diff --git a/voxygen/anim/src/biped_large/mod.rs b/voxygen/anim/src/biped_large/mod.rs index f90f29f610..3af791809f 100644 --- a/voxygen/anim/src/biped_large/mod.rs +++ b/voxygen/anim/src/biped_large/mod.rs @@ -277,7 +277,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (-1.0, 26.5), (Redoni, _) => (-1.0, 26.5), (Cultistwarlord, _) => (-1.0, 18.5), - (Cultistwarlock, _) => (-1.0, 18.5), + (Cultistwarlock, _) => (-1.0, 17.5), (Huskbrute, _) => (-1.0, 23.5), }, lower_torso: match (body.species, body.body_type) { @@ -301,7 +301,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Blueoni, _) => (0.0, -8.5), (Redoni, _) => (0.0, -8.5), (Cultistwarlord, _) => (0.0, -1.5), - (Cultistwarlock, _) => (1.0, -3.5), + (Cultistwarlock, _) => (1.0, -2.5), (Huskbrute, _) => (-0.5, -7.0), }, tail: match (body.species, body.body_type) { diff --git a/world/src/layer/wildlife.rs b/world/src/layer/wildlife.rs index d09e3412d5..df7c579196 100644 --- a/world/src/layer/wildlife.rs +++ b/world/src/layer/wildlife.rs @@ -119,9 +119,14 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..2) { + .with_body(match rng.gen_range(0..3) { 0 => biped_large::Body::random_with(rng, &biped_large::Species::Wendigo) .into(), + 1 => quadruped_medium::Body::random_with( + rng, + &quadruped_medium::Species::Mammoth, + ) + .into(), _ => biped_large::Body::random_with( rng, &biped_large::Species::Mountaintroll, @@ -133,7 +138,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( group_size: 1..2, is_underwater: false, day_period: vec![Night, Morning, Noon, Evening], - get_density: |c, _col| close(c.temp, CONFIG.snow_temp, 0.15) * BASE_DENSITY * 0.1, + get_density: |c, _col| close(c.temp, CONFIG.snow_temp, 0.15) * BASE_DENSITY * 0.15, }, // Tundra rock solitary ennemies Entry { @@ -312,7 +317,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..12) { + .with_body(match rng.gen_range(0..14) { 0 => quadruped_medium::Body::random_with( rng, &quadruped_medium::Species::Deer, @@ -364,6 +369,16 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( quadruped_small::Body::random_with(rng, &quadruped_small::Species::Goat) .into() }, + 11 => quadruped_medium::Body::random_with( + rng, + &quadruped_medium::Species::Llama, + ) + .into(), + 12 => quadruped_medium::Body::random_with( + rng, + &quadruped_medium::Species::Alpaca, + ) + .into(), _ => bird_medium::Body::random_with(rng, &bird_medium::Species::Chicken) .into(), }) @@ -832,7 +847,7 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( Entry { make_entity: |pos, rng| { EntityInfo::at(pos) - .with_body(match rng.gen_range(0..3) { + .with_body(match rng.gen_range(0..4) { 0 => quadruped_medium::Body::random_with( rng, &quadruped_medium::Species::Bonerattler, @@ -841,6 +856,11 @@ pub fn apply_wildlife_supplement<'a, R: Rng>( 1 => { theropod::Body::random_with(rng, &theropod::Species::Sandraptor).into() }, + 2 => quadruped_medium::Body::random_with( + rng, + &quadruped_medium::Species::Ngoubou, + ) + .into(), _ => quadruped_low::Body::random_with( rng, &quadruped_low::Species::Sandshark, From a81c71b461cb84219a7ce925b0baef2d504b4c35 Mon Sep 17 00:00:00 2001 From: Snowram Date: Fri, 25 Jun 2021 20:00:04 +0200 Subject: [PATCH 7/7] Increases base damage of husk attack, rename some cultist weapons --- .../abilities/custom/husk_brute/chargedmelee.ron | 4 ++-- assets/common/abilities/custom/minotaur/cleave.ron | 4 ++-- assets/common/entity/dungeon/tier-5/warlock.ron | 6 +++--- assets/common/entity/dungeon/tier-5/warlord.ron | 6 +++--- .../bow/bipedlarge-velorite.ron | 2 +- .../hammer/bipedlarge-cultist.ron} | 2 +- .../staff/bipedlarge-cultist.ron} | 2 +- .../sword/bipedlarge-cultist.ron | 2 +- .../common/skillset/dungeon/tier-5/sword_simple.ron | 13 ------------- assets/common/skillset/dungeon/tier-5/warlord.ron | 5 ----- assets/voxygen/voxel/biped_weapon_manifest.ron | 8 ++++---- common/src/comp/inventory/loadout_builder.rs | 4 ++-- 12 files changed, 20 insertions(+), 38 deletions(-) rename assets/common/items/{weapons => npc_weapons}/bow/bipedlarge-velorite.ron (90%) rename assets/common/items/{weapons/hammer/bipedlarge-cultist_purp_2h-0.ron => npc_weapons/hammer/bipedlarge-cultist.ron} (88%) rename assets/common/items/{weapons/staff/bipedlarge-cultist_staff.ron => npc_weapons/staff/bipedlarge-cultist.ron} (90%) rename assets/common/items/{weapons => npc_weapons}/sword/bipedlarge-cultist.ron (88%) delete mode 100644 assets/common/skillset/dungeon/tier-5/sword_simple.ron delete mode 100644 assets/common/skillset/dungeon/tier-5/warlord.ron diff --git a/assets/common/abilities/custom/husk_brute/chargedmelee.ron b/assets/common/abilities/custom/husk_brute/chargedmelee.ron index 94c388f71b..9b778e9af8 100644 --- a/assets/common/abilities/custom/husk_brute/chargedmelee.ron +++ b/assets/common/abilities/custom/husk_brute/chargedmelee.ron @@ -1,8 +1,8 @@ ChargedMelee( energy_cost: 0, energy_drain: 0, - initial_damage: 0, - scaled_damage: 500, + initial_damage: 50, + scaled_damage: 450, initial_poise_damage: 50, scaled_poise_damage: 150, initial_knockback: 0.0, diff --git a/assets/common/abilities/custom/minotaur/cleave.ron b/assets/common/abilities/custom/minotaur/cleave.ron index dff30a6fe4..3aa9a1b690 100644 --- a/assets/common/abilities/custom/minotaur/cleave.ron +++ b/assets/common/abilities/custom/minotaur/cleave.ron @@ -1,8 +1,8 @@ ChargedMelee( energy_cost: 0, energy_drain: 0, - initial_damage: 0, - scaled_damage: 500, + initial_damage: 50, + scaled_damage: 450, initial_poise_damage: 50, scaled_poise_damage: 150, initial_knockback: 0.0, diff --git a/assets/common/entity/dungeon/tier-5/warlock.ron b/assets/common/entity/dungeon/tier-5/warlock.ron index b6d9ae4608..369bd091cb 100644 --- a/assets/common/entity/dungeon/tier-5/warlock.ron +++ b/assets/common/entity/dungeon/tier-5/warlock.ron @@ -5,11 +5,11 @@ EntityConfig ( loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), main_tool: Some(Choice([ - (1.5, Some(Item("common.items.weapons.staff.bipedlarge-cultist_staff"))), - (1.0, Some(Item("common.items.weapons.bow.bipedlarge-velorite"))), + (1.5, Some(Item("common.items.npc_weapons.staff.bipedlarge-cultist"))), + (1.0, Some(Item("common.items.npc_weapons.bow.bipedlarge-velorite"))), ])), second_tool: None, loadout_asset: None, - skillset_asset: Some("common.skillset.dungeon.tier-5.enemy"), + skillset_asset: None, ) diff --git a/assets/common/entity/dungeon/tier-5/warlord.ron b/assets/common/entity/dungeon/tier-5/warlord.ron index 01f7c29a71..fe2152e6e4 100644 --- a/assets/common/entity/dungeon/tier-5/warlord.ron +++ b/assets/common/entity/dungeon/tier-5/warlord.ron @@ -5,11 +5,11 @@ EntityConfig ( loot: Some(LootTable("common.loot_tables.dungeon.tier-5.enemy")), main_tool: Some(Choice([ - (1.5, Some(Item("common.items.weapons.sword.bipedlarge-cultist"))), - (1.0, Some(Item("common.items.weapons.hammer.bipedlarge-cultist_purp_2h-0"))), + (1.5, Some(Item("common.items.npc_weapons.sword.bipedlarge-cultist"))), + (1.0, Some(Item("common.items.npc_weapons.hammer.bipedlarge-cultist"))), ])), second_tool: None, loadout_asset: None, - skillset_asset: Some("common.skillset.dungeon.tier-5.warlord"), + skillset_asset: None, ) diff --git a/assets/common/items/weapons/bow/bipedlarge-velorite.ron b/assets/common/items/npc_weapons/bow/bipedlarge-velorite.ron similarity index 90% rename from assets/common/items/weapons/bow/bipedlarge-velorite.ron rename to assets/common/items/npc_weapons/bow/bipedlarge-velorite.ron index 800a221e8e..40c9d278dc 100644 --- a/assets/common/items/weapons/bow/bipedlarge-velorite.ron +++ b/assets/common/items/npc_weapons/bow/bipedlarge-velorite.ron @@ -1,5 +1,5 @@ ItemDef( - name: "Velorite Bow (bipedlarge)", + name: "Giant Velorite Bow", description: "Infused with Velorite power.", kind: Tool(( kind: Bow, diff --git a/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron b/assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron similarity index 88% rename from assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron rename to assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron index 6161fa12a7..1493bb69a2 100644 --- a/assets/common/items/weapons/hammer/bipedlarge-cultist_purp_2h-0.ron +++ b/assets/common/items/npc_weapons/hammer/bipedlarge-cultist.ron @@ -1,5 +1,5 @@ ItemDef( - name: "Magical Cultist Warhammer (bipedlarge)", + name: "Giant Cultist Warhammer", description: "This belonged to an evil Cult Leader.", kind: Tool(( kind: Hammer, diff --git a/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron b/assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron similarity index 90% rename from assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron rename to assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron index c709f9a11b..13139bd011 100644 --- a/assets/common/items/weapons/staff/bipedlarge-cultist_staff.ron +++ b/assets/common/items/npc_weapons/staff/bipedlarge-cultist.ron @@ -1,5 +1,5 @@ ItemDef( - name: "Cultist Staff (bipedlarge)", + name: "Giant Cultist Staff", description: "The fire gives off no heat.", kind: Tool(( kind: Staff, diff --git a/assets/common/items/weapons/sword/bipedlarge-cultist.ron b/assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron similarity index 88% rename from assets/common/items/weapons/sword/bipedlarge-cultist.ron rename to assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron index dd62980f60..06eae29d7a 100644 --- a/assets/common/items/weapons/sword/bipedlarge-cultist.ron +++ b/assets/common/items/npc_weapons/sword/bipedlarge-cultist.ron @@ -1,5 +1,5 @@ ItemDef( - name: "Magical Cultist Greatsword (bipedlarge)", + name: "Giant Cultist Greatsword", description: "This belonged to an evil Cult Leader.", kind: Tool(( kind: Sword, diff --git a/assets/common/skillset/dungeon/tier-5/sword_simple.ron b/assets/common/skillset/dungeon/tier-5/sword_simple.ron deleted file mode 100644 index 28d8bc547d..0000000000 --- a/assets/common/skillset/dungeon/tier-5/sword_simple.ron +++ /dev/null @@ -1,13 +0,0 @@ -([ - Group(Weapon(Sword)), - - // TripleStrike - Skill((Sword(TsCombo), None)), - Skill((Sword(TsDamage), Some(1))), - Skill((Sword(TsRegen), Some(1))), - - // Dash - Skill((Sword(DDamage), Some(1))), - Skill((Sword(DCost), Some(1))), - Skill((Sword(DDrain), Some(1))), -]) diff --git a/assets/common/skillset/dungeon/tier-5/warlord.ron b/assets/common/skillset/dungeon/tier-5/warlord.ron deleted file mode 100644 index 85c6edcab3..0000000000 --- a/assets/common/skillset/dungeon/tier-5/warlord.ron +++ /dev/null @@ -1,5 +0,0 @@ -([ - // Just gather everything - Tree("common.skillset.dungeon.tier-5.sword_simple"), - Tree("common.skillset.dungeon.tier-5.hammer"), -]) diff --git a/assets/voxygen/voxel/biped_weapon_manifest.ron b/assets/voxygen/voxel/biped_weapon_manifest.ron index 93ea6dc59f..04d8e11aea 100644 --- a/assets/voxygen/voxel/biped_weapon_manifest.ron +++ b/assets/voxygen/voxel/biped_weapon_manifest.ron @@ -1074,19 +1074,19 @@ vox_spec: ("weapon.hammer.2hhammer_oni_red", (-3.0, -4.5, -12.0)), color: None ), - "common.items.weapons.sword.bipedlarge-cultist": ( + "common.items.npc_weapons.sword.bipedlarge-cultist": ( vox_spec: ("weapon.sword.cultist", (-1.5, -4.0, -6.0)), color: None ), - "common.items.weapons.hammer.bipedlarge-cultist_purp_2h-0": ( + "common.items.npc_weapons.hammer.bipedlarge-cultist": ( vox_spec: ("weapon.hammer.cult_purp-0", (-3.5, -4.5, -5.0)), color: None ), - "common.items.weapons.bow.bipedlarge-velorite": ( + "common.items.npc_weapons.bow.bipedlarge-velorite": ( vox_spec: ("weapon.bow.velorite", (-1.5, -4.0, -15.0)), color: None ), - "common.items.weapons.staff.bipedlarge-cultist_staff": ( + "common.items.npc_weapons.staff.bipedlarge-cultist": ( vox_spec: ("weapon.staff.firestaff_cultist", (-2.5, -2.5, -4.0)), color: None ), diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index c3b6f5d3ff..2eb0a990d7 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -302,10 +302,10 @@ fn default_main_tool(body: &Body) -> Item { "common.items.npc_weapons.hammer.oni_red_hammer", )), (biped_large::Species::Cultistwarlord, _) => Some(Item::new_from_asset_expect( - "common.items.weapons.sword.bipedlarge-cultist", + "common.items.npc_weapons.sword.bipedlarge-cultist", )), (biped_large::Species::Cultistwarlock, _) => Some(Item::new_from_asset_expect( - "common.items.weapons.staff.bipedlarge-cultist_staff", + "common.items.npc_weapons.staff.bipedlarge-cultist", )), (biped_large::Species::Huskbrute, _) => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.husk_brute",