From ae07c9ffb5f0e522ed5b37c185d93911430aff75 Mon Sep 17 00:00:00 2001 From: Snowram Date: Sun, 9 Aug 2020 02:36:55 +0200 Subject: [PATCH] Add werewolf npc --- assets/common/npc_names.json | 4 + .../voxel/biped_large_central_manifest.ron | 65 +++++++++++++++- .../voxel/biped_large_lateral_manifest.ron | 70 +++++++++++++++++- .../voxel/npc/werewolf/male/foot_l.vox | Bin 0 -> 2064 bytes .../voxel/npc/werewolf/male/foot_r.vox | Bin 0 -> 2064 bytes .../voxel/npc/werewolf/male/hand_l.vox | Bin 0 -> 1904 bytes .../voxel/npc/werewolf/male/hand_r.vox | Bin 0 -> 1904 bytes .../voxygen/voxel/npc/werewolf/male/head.vox | Bin 0 -> 3360 bytes .../voxygen/voxel/npc/werewolf/male/jaw.vox | Bin 0 -> 1360 bytes .../voxygen/voxel/npc/werewolf/male/leg_l.vox | Bin 0 -> 1676 bytes .../voxygen/voxel/npc/werewolf/male/leg_r.vox | Bin 0 -> 1676 bytes .../voxel/npc/werewolf/male/shoulder_l.vox | Bin 0 -> 2180 bytes .../voxel/npc/werewolf/male/shoulder_r.vox | Bin 0 -> 2180 bytes .../voxygen/voxel/npc/werewolf/male/tail.vox | Bin 0 -> 3168 bytes .../voxel/npc/werewolf/male/torso_lower.vox | Bin 0 -> 2808 bytes .../voxel/npc/werewolf/male/torso_upper.vox | Bin 0 -> 12224 bytes common/src/comp/body/biped_large.rs | 6 +- voxygen/src/anim/src/biped_large/idle.rs | 36 ++++++--- voxygen/src/anim/src/biped_large/mod.rs | 9 +++ voxygen/src/anim/src/biped_large/run.rs | 11 +-- 20 files changed, 179 insertions(+), 22 deletions(-) create mode 100644 assets/voxygen/voxel/npc/werewolf/male/foot_l.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/hand_l.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/hand_r.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/head.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/jaw.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/leg_l.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/shoulder_l.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/shoulder_r.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/tail.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/torso_lower.vox create mode 100644 assets/voxygen/voxel/npc/werewolf/male/torso_upper.vox diff --git a/assets/common/npc_names.json b/assets/common/npc_names.json index 657d073103..fe3f432d3c 100644 --- a/assets/common/npc_names.json +++ b/assets/common/npc_names.json @@ -573,6 +573,10 @@ "dullahan": { "keyword": "dullahan", "generic": "Dullahan" + }, + "werewolf": { + "keyword": "werewolf", + "generic": "Werewolf" } } }, diff --git a/assets/voxygen/voxel/biped_large_central_manifest.ron b/assets/voxygen/voxel/biped_large_central_manifest.ron index 1be2239118..b970f0daed 100644 --- a/assets/voxygen/voxel/biped_large_central_manifest.ron +++ b/assets/voxygen/voxel/biped_large_central_manifest.ron @@ -239,8 +239,6 @@ central: ("npc.troll.female.hammer"), ) ), - - (Dullahan, Male): ( head: ( offset: (-8.0, -5.0, -6.0), @@ -271,7 +269,6 @@ central: ("npc.cyclops.male.hammer"), ) ), - (Dullahan, Female): ( head: ( offset: (-8.0, -5.0, -6.0), @@ -302,4 +299,64 @@ central: ("npc.cyclops.male.hammer"), ) ), -}) + (Werewolf, Male): ( + head: ( + offset: (-5.0, -7.5, -6.5), + center: ("npc.werewolf.male.head"), + ), + torso_upper: ( + offset: (-8.0, -12.5, -10.5), + center: ("npc.werewolf.male.torso_upper"), + ), + torso_lower: ( + offset: (-6.0, -5.5, -4.0), + center: ("npc.werewolf.male.torso_lower"), + ), + jaw: ( + offset: (-2.0, 0.0, -2.0), + center: ("npc.werewolf.male.jaw"), + ), + tail: ( + offset: (-4.0, -27.0, -6.0), + center: ("npc.werewolf.male.tail"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + center: ("armor.empty"), + ), + main: ( + offset: (-1.5, -9.0, -10.0), + center: ("armor.empty"), + ) + ), + (Werewolf, Female): ( + head: ( + offset: (-5.0, -7.5, -6.5), + center: ("npc.werewolf.male.head"), + ), + torso_upper: ( + offset: (-8.0, -12.5, -10.5), + center: ("npc.werewolf.male.torso_upper"), + ), + torso_lower: ( + offset: (-6.0, -5.5, -4.0), + center: ("npc.werewolf.male.torso_lower"), + ), + jaw: ( + offset: (-2.0, 0.0, -2.0), + center: ("npc.werewolf.male.jaw"), + ), + tail: ( + offset: (-4.0, -27.0, -6.0), + center: ("npc.werewolf.male.tail"), + ), + second: ( + offset: (0.0, 0.0, 0.0), + center: ("armor.empty"), + ), + main: ( + offset: (-1.5, -9.0, -10.0), + center: ("armor.empty"), + ) + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/biped_large_lateral_manifest.ron b/assets/voxygen/voxel/biped_large_lateral_manifest.ron index 92ed8119cd..d077d97521 100644 --- a/assets/voxygen/voxel/biped_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/biped_large_lateral_manifest.ron @@ -339,4 +339,72 @@ lateral: ("npc.dullahan.male.foot_r"), ), ), -}) + (Werewolf, Male): ( + shoulder_l: ( + offset: (-4.0, -4.5, -5.0), + lateral: ("npc.werewolf.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-4.0, -4.5, -5.0), + lateral: ("npc.werewolf.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.0, -3.0, -13.0), + lateral: ("npc.werewolf.male.hand_l"), + ), + hand_r: ( + offset: (-3.0, -3.0, -13.0), + lateral: ("npc.werewolf.male.hand_r"), + ), + leg_l: ( + offset: (-2.5, -4.0, -3.5), + lateral: ("npc.werewolf.male.leg_l"), + ), + leg_r: ( + offset: (-2.5, -4.0, -3.5), + lateral: ("npc.werewolf.male.leg_r"), + ), + foot_l: ( + offset: (-3.5, -6.0, -5.5), + lateral: ("npc.werewolf.male.foot_l"), + ), + foot_r: ( + offset: (-3.5, -6.0, -5.5), + lateral: ("npc.werewolf.male.foot_r"), + ), + ), + (Werewolf, Female): ( + shoulder_l: ( + offset: (-4.0, -4.5, -5.0), + lateral: ("npc.werewolf.male.shoulder_l"), + ), + shoulder_r: ( + offset: (-4.0, -4.5, -5.0), + lateral: ("npc.werewolf.male.shoulder_r"), + ), + hand_l: ( + offset: (-3.0, -3.0, -13.0), + lateral: ("npc.werewolf.male.hand_l"), + ), + hand_r: ( + offset: (-3.0, -3.0, -13.0), + lateral: ("npc.werewolf.male.hand_r"), + ), + leg_l: ( + offset: (-2.5, -4.0, -3.5), + lateral: ("npc.werewolf.male.leg_l"), + ), + leg_r: ( + offset: (-2.5, -4.0, -3.5), + lateral: ("npc.werewolf.male.leg_r"), + ), + foot_l: ( + offset: (-3.5, -6.0, -5.5), + lateral: ("npc.werewolf.male.foot_l"), + ), + foot_r: ( + offset: (-3.5, -6.0, -5.5), + lateral: ("npc.werewolf.male.foot_r"), + ), + ), +}) \ No newline at end of file diff --git a/assets/voxygen/voxel/npc/werewolf/male/foot_l.vox b/assets/voxygen/voxel/npc/werewolf/male/foot_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..30846ca309e5660bb559f67f4f35bfcfad3f0904 GIT binary patch literal 2064 zcmchWZD^Hc7{{;s^*QHQv2sqg>0DEDo8jBmUexTE4xMY(TrFKrGL+mr&q>B%=r|a< zh*ns(#x&5TiI|9QV_R>ajS>+=#H4}{k%;J15fOa|{{5c`eF^Pb5B&Jw*LB_3%X2^X z)AIDX;sFt9Tvoq^B7X%U&GoHy_eBODni8!ikag=@>#rCt`20r91j(3$WL%s|6mc=G zi6TCrO-vwZMP;#!_w;#5TQ4a?)l@|l`n{91Bi2cWA(|-K;w0s*q?~2UGDb8}k5~{i!aVGJ#_4c&KPQuQJvv_E({%D%#>y$`MNp(L@nvRcI}JR83XH z8I`t1g~o6nRS~D@BSzClRm3UQQ>w#6#B@fF&!IDxs*PcPo%TMSa>Pbh%|1G%i8Go# zXd4}Bs?$1UwPtWxi#;Wxh>2 zv7r^q8uUf#5}^wcDbIXIw04}+v9Aja(OfI46Z(iDS{O6@eo=qs7@y#|#M6!#*3vc} z8XKJ*&(YE!#HgO%%%=_28PENmHGEnVr#)w9jA+fc;$G!>hCZdEwQ#RQx$LDK?;UHi zx6!fCYSyM|6Jxy??;UNTZH)VATkc_=w*k*7;9U)P{sH3w_t7TC1k9(c1I|I4Xkr!j z63058b)2Wq2caR}u^zF+xPbR9`WBoai1Ge#1|Q>I&cL;Iw25`Ji6)Nsz!D$LN_7F> zDd4$Lh5yjnl}|3Cjz2XuHOOYOxZNjMb?72y6?4fC<7Z85T4 z4H)UI$4K8MjO^cz>XBEFlgvZ@i^VA3H3wybwU9ao*_MDDc?fbb4>^s3$)RBCKEb1B z1+i^{`+EcvY3H33R5nh)>M#ebyC>q!(P>zb6*Tn=UOFwu9tKO4aC!3`Mur~_w4zQWMC^EmPGc`PU^LDk$xuxMc!_PsV0rw^ClyUXRcd36pB zvghzI!IjSiKYT6dZZE}wo(fz%wH&{G-;B<;aUpQe*WLz zzoMc7?^X|D-hv}o+`9+)J^8rwq2R^~f|I4CC@U+&))`%RYSj>=ryG+xCt-B|oo~3S zfOn^;2(QlS$I``p*!7u@>v&V09czy2%EpK$y?yPHPA QyTu~^y<+2q@0~Ay16k;oo&W#< literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/foot_r.vox b/assets/voxygen/voxel/npc/werewolf/male/foot_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..e880a7e5d190b238a4c72ea860d73f1cbc473449 GIT binary patch literal 2064 zcmchWeP~s67{{OA+d21MD^||wHl6FLxjVzRt-Yw(H61$FthrjcoMb4udCpD7W$3sV zx`F7iq3A|8F7WV9!Np<1e=di0Bvj3U}ehar|Y+Mbg@tOUw3W*H-vxX5QD z(1t!@iKA^2it~_|Vt=ZO2gX;d9SZOQMuo<3AJq}1=_5wdM|DIg)>Ep(M8tH~j?ba9nre+incPLC64);^^7ns^f~tO6B%U_f%Ouc#fC;(=335TIg8~imid|ON7c#1j2kptahB!v9Ajav0OW<68eZCRv0t-sfHlVIAes=lP)_;#iMpVw}(W7JUoO;Kz7>ID;4CUe3U^INC%z+QbsYd!UI#vr?7M zck+2|RFD7A+Lcc(qIB0Bqy}ptbq=yE0XgyzR>!PI?% zN6!jk+XVOb2qw}lI4P)XoPgC~9$I%##G9kjup%dD>KD9pTCnpPbDN4#(w@Z3Tsf+S z(g)Cr{5Ed9T!|aM>{PzQYZLit>EU%f>zo)S_Jzx)88dno)T=V5p=B( z9H76cvIy;UNpv@rVPMNbz}Dp$d*gZhbgUh7W)xt_!s%#uq6}MFsk>UEbiTd!k$80`cQD=1;NR(GNe)|Y@N}Cr&bL?db%;Ga}q}P-}#2S zigJ%ecY-~yV@UPn5e#%%#4M(_vBb-}Gq@630L_v^pn{0YbZv%6^& Qyjv{t-zzp=_}=;QH%ok$*Z=?k literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/hand_l.vox b/assets/voxygen/voxel/npc/werewolf/male/hand_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..1ad3a1b419b82eee835cae4be841290e727ef3aa GIT binary patch literal 1904 zcmchWZD^Hc7{{;s-(|F8SLuKT|3 z>wa3F-B3CtB29G->u97sDALll6qG>BpS5!2uRMgY7MnzpqD>~{b zO&>9u>xeSZv^La+b1K615znYd+Nuc86GY$UBMwdI@& zr?m>ZhKLR`o?3^wUzqV>#)my+!mcL9gc%=pl?{8^Qqw9GaDY z!1w^;1B?&yoIy_!Yl4gq^6r9+4>F!U_R(niXcZBTjbe-nvKJg%p53wrT5CeQKh{cA zZp?ZO>m`P@XrlZYbG?muT4J7&7<(IIZ)40yAFWX__BO`e#<(Ya#AvP~%EXw5npR1i zIpWL_XO1{?#F>LWTBG935oeA#bI?bO<~pKGoH?j{YongxCom&mLc2Ih_U_#j16qY*r6S$ z9(xUWsR9(fT#C}&^N<{_h15Hc?GecFMItSF6wJRM2yGX{`vjAz3(g2C zo1$3j<)LlQWV}5-1FN!v=0U+L=LEZMGPb!0C7lV(&X%KUG=<{sd?fZ4q5R}bEWSDy zQ`-fz_b~U6VEJW%JkR}mLy*Bqkdb`!&wT`^7EQtJCyRl#k6};*N%__k1B{R|ZR2jCmR%82GL0^YpI3u`xKu}dugog6jXs=p; z?p3vDEiXW4Wij@zo`ca%3sGB}LS^Mrv^`gcX~hW?mn1NQe0TL2u6;Iy(If4c_^1o# z$G*bI#Y;H-@g*!yCQ!BDaV%Yu#KAYFU+PXGxK`~h=IaQD;u=ex`I^V3gRDRKpgG_Fu(@2~hsVobX#Ru@ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/hand_r.vox b/assets/voxygen/voxel/npc/werewolf/male/hand_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..ab79a11591baa37bf58c056b1b87aa1d39fd774f GIT binary patch literal 1904 zcmchWeQ4EH7{{OUcHgh8oYQSO*Hv?Oif>zcQL}40bgo%*wRCNgq2%W8-eg>cj*Fp- zXoY2KOapD2h>7?%w)F7XY%;5n_cP8(vg z+Ni8Gni!&}H8ELHIxAcwTqD|Lt#zIuR-$RGC95TxQ4;l>ie{{erVXuDQBTo29rdiH zk7&(x#F}Wv7;3{g72*0wTB}G#sR+*#$yiMvt=17w(K-|Htf7x+!*#^kNXA%d%Q+R! z7!~$3aXQR+Y8~c&VaA6UA5L2n_6*S`%=oZpZ8&W#HLX=4&!|wR*48t`60JhaX_+rX z%`vSq&eJ-SR@Bb;IOg|#ybofD^R;rFhFGF)fOi$(egVb@xIZZZH#-;N3`ZTVoi*BsA;Xl znIp~|aps6KN1Qq6qtzNIw>Fw~d@G7rjx{khmUfD7m2c1S z%^1r%9PiKt3F~w0E3KZeychZ{wWT(WZ^{M<`^o-0jvdF2W8+vq^JwDyevu7po?I!` z|6oLFYHE=K-P zPcVK`aP)2e#7REm)NlY_1V>uNEAlzp1ha9d!xxG?ig+ z+Y;oStH$8=RTzKcdHj5$1M_ATVEK}nXn3Lw+ghrzW1XP4T`-gtTzW@PRZ@id^4Vys zT7a(AwP-0XKu2XU_OF?Pk_3%{3pWaJ8#Di@zw`JJod5Ng|GoZ-iVD12J%ojek6~Hg zJ{0yA;>w4DTQ3Msmz5!zOk(@2ZalSi7}DE=DP2=AcJN*g_Z0E%l$7ArIRjX+tRGw7 zdL7d?PsR0fb1>Fgi2l;jf8D>o&d;@}`5L;m1G^8NMDOttygmFS-v8nz9^2W675j$J z@WCZCpTCJzDuufONQmGMn45w-pWZv)9lo#sn&&4t@txhz`jhvY^ZgH+n@IfNc=-$a Ce}uLG literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/head.vox b/assets/voxygen/voxel/npc/werewolf/male/head.vox new file mode 100644 index 0000000000000000000000000000000000000000..d60157f9fcf644bdc0341e7ecc84db7e9e60c059 GIT binary patch literal 3360 zcmchZZH(PT6^Cc$oO$`*-K|whp)HiUfOK2KOI!Ow5f`C>r4}vK3bk#-K;+)udnI+Z zfo6k&8e=V0tWCiLER{5s5K7y0>svx?l#nKbkV@1<8$yf$Kj{Z!{C0e1oA||m-@M6_ zGjq<&{O9~;&g^dd>^%z(IOo>gGIkfn4GuZCVQkZy!P?>1f)4?1ch9|>#{N`j@LL|7 z^D@{gGT4o|bYm)AiKUw=UVCv+Q*_OQVjD@_Mj|oai_!NLE75lwja@e#({5JZOX|B3 z6oh_&MzveScQb3cx-M-631uRIr`-hKEf5`Xd|Ih(*P2MK^gJ;KJ`D6q80b40=nMYr zGW#iAg+SZK)YbZpR_taMd)kV9oss$xpA5x*gaitKcq;fgCWvmlpZ9`h}RUc}T09q=lAoLg+WNeQ0_CN?pI?zOUL=vxAw(8?j z&xP2H13xX7owu7Ws z)6k$-!@a0?0d44~x(<|3m{(Z8^a2QNmC}#2qffoqaOMze?zN9d3Yob%Yd>YBF7ScS z4;f9-BoI%GS2T(BZlP6)%AH|ORP<5wQS?#t(XPi|lsI*elr?B82!?LX?QvPrwV-d|9+0Dwqmmzx3_7HqBy#rDNyEKws?M|v zmV3^j_9JNK>>(#|OZZYuWS4|~pkE@f$ari71&PG)dD=y(8AuS7wb`3s1J>g!f~NKT z5aL*+FA%`vbL8l%K3U!q;K6xMAU53B3U5;^*n;l7RVk+@Vx|v5JEycKCC)I_vG^e1 z%Q5vxgFSPfK_KAcNZBiXP!I@8El5Jo#6F3E(idz154oQE5XwNHozPOMo*vCJb(1si z4|g%;J-PZ5eF(He^~FpL<$lB}Rw90ER_aU{52~5{WNL?6l+3*#hK*Ro3N{FD9aaX= z3St3ku09x-k?|Jggc<^OBLvUD#)Ub1LJQDLkcz1=dLOn{aagn*4 z741aL1;=~GyQ97}A@mb~ow?xoJ-9HBV& z?DBYGj7*PXf5dZLclvKnGam65d|Jn#k3wO8rRKsrnz0Eoc{;|0`W-a#^$h|y-LKj) zr|z%5mzDaK4{9et7T-xA5FiKN=7M!3xQ>F*58!2>9fKo=uNB*=6+1bWb^sY*tpRNp z#&~J917vA+3g|#;$5!fSD={v1WH5FV(m-s-YAY@6sJM0nQP<%QVn-wW=sI2+)@xX= zVZElUil4X;=K<}cMmy4II~8ovcI11)dLb2Je6NXZ86plkLpyN>?VQ^JDdmo&+|H@A z)%kXGzM~%Nv1kyvIlGAd z>=&IaTQ^{L_Ga3q$1bw(oVwg@n{>8*zq79#b@s@c%w0d%=C_CKs>wyR{N$+3+dj*N z_s+FNhp(_3Uc1IF+3f79$5{J-vztykbD!t?JBzvfGt8ZsWxKEWupPPnVteb8^UUu2 zsO@*oPQmZsFR=e%XGeeF?935oXOGh#b#`ctv!C7V?EF`qZKD71MrTjnkAH`=TSuI2 zUFmGcZO)#?zkb6ha^KUG+XZYsH!_Hp+rL#Z(*4fVXLVJ4GQhW8KTkY?E z++f@H%(T5P%(CNe&av}$#eeeeJpZg6``cgt@A)rXy41eE;-Fo3!y#L}`*EAIYmUA4 zV`p!D$=Qnw7uv|kh&_1a4*Sd!pLl4u z-Te4LTl=Haw&B=08yy|Bcbu6kVE;5Z=j`pDU)bN<+^_!?rwXU*?EP#FzF(~RKPWc6 J@CVO#{{|2MH{$>R literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/jaw.vox b/assets/voxygen/voxel/npc/werewolf/male/jaw.vox new file mode 100644 index 0000000000000000000000000000000000000000..a64982dfb99e239f6608e07b1a71c9e45027e676 GIT binary patch literal 1360 zcmchWZAjf!9LIm>{JmbQ71n&1x~W~Yc{R5AkPp+=bt>D{Tsg}&Q)#i0_sVEU$R?M? zb|bQ3ITKy5yDsWzi%}lZ^+4xYSpS zO9B$LW7Jk`oCzAmahrg+Rby2Z$EE60KgI+_aU4}g<5uH}b+oo(jR_bZdes61Ie!hWd zyX=p!r+ym;+A0Wj*AwaW6B#%_WcUcBk=Kd$C6V$>(x)XBosG1MBU+dT28Fz-PujlgoMUH;nfM@*bN=qm`ZxU zLv|>Sk{KUqT?u&lQpp?3pkQ$`$*n^639UUORL%+Vg3jL)hYUV~OefI0`BBEVC35rW zG^l%=K@nz^@06dF!K1>&2g3Zgur#H7N-)Z_0ZFp%g~`hLNAsw)KSg+J1?<179c+>iORwZ>YvHwP;)7rbwapJ74;(x@yX4&PyUtoJQZS9A?_LQeN((xOh7)&sVV_%|lwchfT`&i|1MT zVu+cut;~NCc4=sFco-^B!`Zlth6#y{&1UO30(ufP27>n|!Q;&kZzjW_WMqm{alC4Q5g@gfWJV3Sx{A5&czvMD*Xc@9Us{V(Y(N`0)Im=lQ+Q z^?jS3+nX~iBK6y9c2h{VE7DjKsd~s)_&6kq1jycfk(z4F1D}&bJC3Ks#44%{#U!A4$B9{2#f+<>nkb%y()f0VcA_2S zDThAmM78y$@~ofBsHhd!Gt8-6KcDL<<}t>`l(wwL#td`YfQ}j>v}@(?zKvSeW?k(W zS2M5X`}9+aww`t9bLeyEBg&!Omwru_u`KJRR79+1KEDsmo_Sw0mZq+B)GEtaxhx_9Uw66>2X?bSdiU={Bzf#;O z_os+u4(r#)`<8u}fN;k`pC6xRqKI(!mKf&MWY4bc+r%z^Qc_V-fp|QQJA;DiGYiN~ z`3rxvv|xU|9{zKwCV|~`8?nD-GvZx!Nc7bpF}NRzk;5oYypH5>D$-xcLC(=aghneN zRSu-%0m#^6kcCtv*9+33g4F|pCnp6-9fF5@1uLkhUKEtpKZx3BG9t%T;N96Z*clfz z3<+MH5FEL|cN;R0)gHv!cmc|0!pQ7QL9jmq1?RI-bafrlngwf*G4`-v%bY-7VE&#Y z$j~E@=@j&>dlcgvSK{W=nLzF17!tuO`HuWdhPnk49|-2h1&dSE!-BCY!Do8}w_X!O zsCPFB1`g2PCD;)Xv{neZb_!0>-cXu>_NpLy8uBrGuo&?d%Q4)x1M}~^gkR3LqcArW zTZ*$$_e?$xHkG5JR?yob7=1%9_r9PkD+4tJYtdY`9-TWY(NvI%_R>uB@5;kW>jqR- zhEZC&36bZwVO3@jnOQ-sA>Us;i^VU7F>|^Z^Pe2T<-|9bp1OhypI$*xD2TH4PheAV z2m^1e#>CkmepoEPt?Pw2&73pm1=qe5{PeA$r#&C1dP}fyX$OA)u@RjolF@%51yeWD zaSPf1^nd8w8BG56>;K+=Nl6J#mXBgX(HJ)O9Y=a^I<9^!xcRc+VtzhCp%B_~yYOuF zG^Do&D?3+WcI563k7n@O$;!f;c|+K`c@PIqyp2_@X}Eql53`YU4CdtgYySQ{Ki0m+ zYv^nPj*N_>_uLHLoBkRfezk68?C4|Fa+z~*M2>ygw65Rg$Zhg1; cef^i8f8p|fb}#8W@8$FD_wy|WzW@93Hxw9VlK=n! literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/leg_r.vox b/assets/voxygen/voxel/npc/werewolf/male/leg_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..9139d9b0e6b04ced3709a7c0b588d16da2d6856c GIT binary patch literal 1676 zcmchWdq|yi7{{OA<$aHI!qm{alC4Q5g@gfWJV3Sx{A5&czvMD*Xc@9Us{V(Y(N`0)Im=lQ+Q z^?jS3+nX~iBK6y9c2h{VE7DjKsd~s)_&6kq1jycfk(z4F1D}&bJC0|>#44%{#cV+HjuR7C#gwa}ni!rfrSk0#?L<4u zGY);$iE8Uh<%yrmsHlkRDdse;pU?FS^C)9uMqAcnV~V*YpreXd+O=|c-$sSCiK{*3 zYUb5^pMFZKttSqB4t)-N#5lD3(yz%fmSx?PhFGha&+kLCXWrM0rKu|&6=m74iD@5g z8H06O#&-?-HOy<6*RWs1x?NBFx*Yl(`X~*tzGSb8b&KWvEMpNvEOjx4v!cx~2BjrR z8}7l6$@`l9D(b}eQVe^ijk`0Buz&7|7|zNF?G9(;aDSYE_I2SrEzhjm5K9#2ZxnaR z{TafKf%_o5FYH4FggX}c{P;W*Lo9bML@}=>dve zU-+Y?1@rUu@SjUH3GA-hi2W^_5$~!)qOS&t!Tm^#97cKKbtH#Vk^V{!a*h@vG+GI% zav&WKK*k<}ETkg2UXT_QtR4_NIVni$5Io!~SV2AYqM)??LDWW*5jnO3@6N8l&bXjq zNbu@};K&WW+mL~*_8`{A3s5!_MrLOUg8dmNIG>H8tLu=~ELeMtv4;g)<^=Kr^Y)Ge6!KrlZpSe&9B7K~L1KHDR>^_n0; zy}L;;aDetM!H$riwL;LfQ*es*hSChQR|V12kdNVm#fZOHj^VZ)n1AOb{Bph>g}JHN zQk;#tXYz5dsT>`(g5DOv=o^B$_XTBH8K@~(i{`TR=-gR}rh-(omu8}WR~}|sH=wdI zjMCCgh&;ayt1^Sg%nD)+`TpuzEPgSJnbXaf|Kt!ZC%(b-)D>L#^a_eXL6oh30-K6M z7TY`m4JMjCDjp#g)jQ$HLn7WaU zTgd*W|3l}_VDh(L|M&h&N=k6Dd=wjs#<02XIMRF5arI-t&6foi^Yal3h0vDUg=ed$ zA-z3V*|`$4BX@UrG=twxRujxDQ*8kD~6QIW$f#Asi0ljsTKG@F&cY;P&Tt>$}bG c>%aW`3zz@1dr9AUFQ0F}pKm$v{oj|r0by}wZvX%Q literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/shoulder_l.vox b/assets/voxygen/voxel/npc/werewolf/male/shoulder_l.vox new file mode 100644 index 0000000000000000000000000000000000000000..359b1b41373d0619db2b3636134dd1839602ac5e GIT binary patch literal 2180 zcmcgtYiO2b7`~tLJ3FnM(``D})ZAux+S)jE4O%pK@Ph(pr&_;;}B4ScOh)6{AtA0fE@9O$A`V-o}UbwjK=f3afK0WuhH9xzm zs9!`H7S*jF$(Bf@sjj8={>*_NkCH`Z4Gl$M_6N+({N^nGc)Xu z{@O4n{k36#hW*h-7V5lWTt%CrjnIS_`U_(Q8+&hKM_6yu-dXldnd~j~*0Ki68Z3La ztiiHx+6hBwLQ&^6?`g}ovwS=1$%^b1^@@5$f3g?eC#=vGT-tk=IKp}td*@>3D3iUV zY$;pE+>W`aGxRl%xgB#mzOUoV8ADUAsV5AfHT8s7j6qoCn3pnPg>vxh*)y+a&z?O~ zCaj}uJ@Zm;J@b0*DSeISUU}}SXI{^q>8I(ZsUsV*)}DJrogzme?E~Qh=NcG0aGqpK zwjnWuGlB5}_cZYB0%sREJK6{zqO=Q9;yu}uUBtOWoC(i_wbYr2F(S?)Vl9+4?IDZz zGQE)r@3NRXi}!f8WJ5MtiQ#@3zOmt)E#q3&X&h@0tR-Tci2bt{mDxehU7^1f?x*k` z*^sU9w?a6cLvV56`vt}ee5b$|fprAVH!yDC3ZgCST`h(f$_>C=nk@4qG0)z#?g>cXvF!LoxFFeT?t{NCD%(a{EEzLRys zSW!P4>ssfdtD_#nJ#`rFU5DX)TTnIp8nRQl$a}d6McZefbf5-O>mZxQKn_0wxsZ$O z2Eq75FmbQo@iT&Gv*3Yl!C0PiPY5a+?!)pV8!bD=;+>I6SkfhE>=V3lO0exJ?>6S6 zu&o$VyUI{GltMv!4vKf@qwMHp%(*xn9iCRY42STbl)Y*Hhmi zSX?StTP^5VBG^xTV?{pNYKzg?Sc3iybJ6ue75XU5*PU7vr}dn$W&08@rF^;Ox~r+`#02 z`rmZqAkO^y%m3bgd3ibBs~W(pIfpU7XD9Ny^KkJa!S$B}CrV0CT3U*YQ#$a>vO!39 zC&smp!^plnZ@4|5yHi+*H>UMr;rw2#-}M$ItR0Ulr>9}0B@ewtMgN+A#xE0Vb<<_E zZv?jOJBIEfL)bI;6+Za#8lKqFgM~W>Q2*h1G@ZGIR4RpA0!T#Q514C$o1fjO?Xe*1TJH_jOEX3OaBWxE~t-uLA%Gu)#S literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/npc/werewolf/male/shoulder_r.vox b/assets/voxygen/voxel/npc/werewolf/male/shoulder_r.vox new file mode 100644 index 0000000000000000000000000000000000000000..c0c2b593e1d8eb099feda9c934c666d1e2c9d2a0 GIT binary patch literal 2180 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 E0sOA;86$6#moytw(b2{-%W6`oF!Fyq?QEhR&d z6On~wHjD+@Xd))2sm$07vY|wT2r;Q3EFvQMR39Sxw)(9j^d+iqz3}6C*0a~zd#$yf z^{mT&U;iE7ciSUf*WLG$dtZa-e)}0+_qu!Ue|c&Nek0rj2l&44zyIC`pN_)sZ$sCa zv%I8ZSmJqD`V^NGNXN2>jGodG&dfS8eMC-MifPL^t>!Fl;re-$5AzbeT@=Is-Ynwim$Y|F%)^q-;u3~o$uVv!msJ;Z zpB7>AQc_uDDcp}XanDGd`ka?s@)C=ua`2$ z#Zu05?-=3|V_X#1CD%nJe-c+IiBp7-#H9y^&5|}qOpLQ14S_Q>pMkLOulEWz_Eqyq~EG}jbT zl233w(U);3Yud@H2%*qkhfk-lgc25oO+udKRhs1~PS~7Z9DN;muL(a(Id9fD`kOu` zpP1!k8ru6#n;mzno#xG-;bYUZ*?HdF4k@|br_EXJF}tNWyEu(M`hqXUO}2M4@I0_# zSPOpP+SnTG;+0vf-fe2&Sp&}^Zz<$0t^TxQR*Q{!k!>7KanW2;MPBw$vb@Y$o>C?s zGJu-nB7$E6z9Dvg(alCaNgjdTqnAVBkKb)B%$sVq^I=nae^UDh#0N0fGNLEQv}0cFn6BKI zXczC+s73A7m4viYmvN`)BkU7-z|O>#IbEq^*wl`EP-bvDEv}g1$2497ZY*Zrp1BgngRhm z*GnOPpym2%*+a>c%k&>IW`&=slP4Z2<{32*3-<*- zr5s4E3G(*nCDATOiE@cLf+y|3q8p?}Dv;z6qaF@NNc15iA^AT zWC^VwDHqgLgn;hBpE{=^nid`XpT0;-D`Bx*sTmZjpwxMk><9Gw+fvMPKEjiDCLG zA_MqB{YYD+0gbMZ5(M;6GUc)+j!_N*c+xKOEOdjekqRk6Ko2F+u0**+IrM<^q#e2i zgRZeDbcrsYhZ1>Sq@GbTkI|3l9_g@Kbc3$Z6}kjLx+h%%<1uLFG0i+iIdqS7V9^ay zb4?*7X@TBTrug=rc^*Vh`;Z>#Jmt_0x&{Rj1oT`hv%yEqWtt6fG_PT1?L^vv#b%Hi z^3dXlA&!_+kG)LhDo^M`SR*ok$L1!=p&O(|Dr{n8?L)eUGMZB!%~gWHIxCR&=niSY zjFdwPRaS{zKo4c$S&^8941>A!;J}hLNR3p;J~;fu;3w1%QZbhiLg6{29nyk9*Vq+E z(gN9IE19-J$_787T&5g2(w4MA*PuvC(gMAQk|>vW9x@_Bq8!qJMK{q= zHI9~fgY`GKk#eLBQiH;l$F!CqZasRL!dePCG7LNm++ca%toe}|*~hfnoLA#m9~VnZ zu*3xFjqVH2Kw6{$ja`AnCXhK>VgdOfWb%`CV8LM1ps-7%K;}gLM1BZ~{G=VyA`Lc; zRHP-kfD|qB0{w*ak-DQ>q#>=53Ms(_?16rn*+`Ymtr@RBRD<=<;{cR3q z6SO1cj@Z{RFSEC`eiiH|r1z_K-J*B-6hQA1vcb9+!j82t1n#XN&`u40NB=ZfGlwQ! zcNL@GRPt-io_%lLq+wmny&ZVhF~?%V?~-$CNp20;MPY7$gk8>VHSC>o>aH~R)NMW9 z#u8ZS;6Uw2gWdx&fI&A%4;G~F*!y+#1?zliH?Qp)j9nf5pnb=j+ObFIh^uy$Gj`uy zx$FBdpWvSvdd6P?vuB*|h#6qOUrXkQ9rICdR;SG>2D7Tste$(yNz)F!#hqRyW7e@g z3!_{OF*#5tOF0L9^Ks~j4+Z+xPRb|pNX`z_$Qqu05S#;qIjuQ`O%hWDV_gLD1g_2O zE709;+JJ&njQAvIa&TWO~_Qb#fJu$REPu%T2 z?+%i)_=;Jr(Q9&gHG91(XSTq-0`EA?oKehW3+%7WIBb#oC$5ZQ3JxE`<-@(A8X1_cpPVa)KH$o&#|RBq40 zPknn<-t@7s|Fop->i3-81o{f8n(r6Ab+gE{j_2mEhOzm4o^OU5q~ zXAI1<0Uu<(&Fm9B{^%v=3Ms7$ACDk-|6XzCu$$=z<``|+Z&5FUbP*rm%xSbsnkgsP z1I`oYVLfLA{Z(*rO}S^S5@}mp?VhpA{Y0Dl0&`NkhW}>Lg0ZAIOVh4rztP4k=WT~^ zi~GD8*K>YFd8C8Hx>GTK=>z9%oPl`FzINu>E-y;y#XvX`ms|cWZ=UnLz`x3h!( zK9nUF)bitz%TvVrGCuF1gs9Kx!Zdo^(&W#-`aY>j`CM-dkk zu^`h15vU_}qd6DVjCnI~PQkb&-pkOlclE0xj|M|p5wjCWVnPH-?6#q2FOFWY4akXm zDYqHoc{0Rk_I)Bb&Q53__XsXfUt&NjM>-+%^)>22% z#1z?LI%CmB&HyL78ezDPVO;c_#W2?>Vw}Q;jM{9a)hj`Z?MQ3pO{bpNLcQ?)ggs5< zM~}N!R&Sns9vPag<=YXj&{gI>`{o0hxt8;mS>Z2kaiyIP%FPYPmIgacTVzZ-q|40@ z@UM0bJj%@yj|}HdjF!T?en7B z`3&C%5mdzRQ zl$lG3oq5;_Y2W6cUGq7+_B(sk@7R~2dnlv}>Bt;qnIrn0yApeRg?Xx=tAS^5Hj=Rw zWZ%wF_xKlcm?0kbjBoGM7KpWlYnr&JKpdDCxt58!I<+&8rsJEf?1Z0>g?$obN9Le* z4P8QNHs%WlqMgxlhL^9;YVkSZwmTNiit+zJT)8uBP0j;-O{_jA=1_+Ok~z{IiEB<` zdoejrTxUu=KIsQ1m;*bB9ELuFb*^_4~DZL*mJ*~A+BX&3v(R^m$7Ni zsNI$=?QZD2We9`ZvSBYudj#WF;0um*P+}g4mi*Y_%stU%OHb?@xvsFq2}af}ZT*1% z73SMOx-hqj_P+2lMOtvaQCQDP^oXtwe2amAF4}jTk^VRYY^rB( zpt#Qc0=hk>)4*EGA$!W}X2-uhYcFM4qa8VK=3N`(xd-cbaFAwf$8gHK=6Co9Ydmjx zU)c1Kc-7WmNV(%X6S`zxP?538bwz(Uq@*9c4ZH`|Fsv~w(trlL9~m=@Ywls_V~Zae zuoJ#^Aa=B89NS)#_%Yxg=<3Ls0J!FlJlB%Pj+uQ;W`C5~zrc{#%P{9n*uj8r`b=Md z2Xn0#Y=wMCup_d;p2dP=FJi%ixz;&LZ~Kyo_CuK1kAP=SV8F9iG2p;nOX|iRBC=jr z5I}?BOkT65_ej;`NPWRiNU+1WxI8Wv(iz`*h?DY+Sb5;=_P`vDF3(TX&_ucG#D@uH~QuvZ5Z6M&|miH?d zI~v_#v*6JUamFA68%VXYZ=4%VDm}r!84|b9j57RtQlelGS7UIZRu!eh0Qa|GFOSKJ7YX zz+m%WX`cg2dmSj|9cS6w5yygM4r=|?X!9p~5~rI@ZyMcl-GOiUSi@V&_QWrZjI8++ z^sJeCZ-~ccOS~Jwz9hAGL)=X4rwnm3aeoPxdnEFD=0}Z>2mCpnHyIXlo)!;*wSj7W zel{%boIMSGZ?f(Je zV$#6;!gp8h=g~FN^6lH5vt~zEl#A`!8Fk^m2d;7CTQ%zn!?$qU)ozY<6g*c9L2C1}1!8rEu_eT}#5 zS->>Ox4po(JP!^mn5J8FkbAr2o#h*@<-Y>lk2(mx^E=jlg8Iou)7ir$)`yaB`vGY{ zwKNFYmMN3To5>gX?}lps86a=w+nZp$nrUxlpOPSg0tr2o0STG=l!BeU?AX`z3B9$I zJ*#5BqZ>`9Px~f^w!XwC+P8JfeaRcSmZ(GKo4ag%hV0pgN!ljZlS%59ShvcyPvd)i zB#)1*IZ3;+Up)J2$$rjx_HNT|(dZUw`Mw{TeVSpS{=8@Qes(v*M4Naf`$7qBKk?rR zeQTeVcDSMlAQ>z=CPI zL9=2TF;zgz&m`{Qy1E&+ghLbCbT&RKQnEw3=*uT zoTeYxx4STLe|!Qm|1C%mL4kx4?b3rY^HP|rEYIliAz#KNTg#YWZ1ZeerbRQaNl2U( zNN|?^*GyF1!QHJ$3t5?-&PQEjsrx;E8pC z=a@5M8)MqEI0%ur?AkYe(BSw#k%qvxe-F0(2Y~+zq&@cb-vNWIq0t%Nw#7j3?Y~Hj zYuBLu>4^Uj=LF+7ws%N8N(cJ;h_4**yX))pH{&_B{j5{mUlEh2GyB}UZ?Teh#(OKg zFT*uQp4?(7_s{r~;hD0Xoi+c%=UuCFYX@;rwEtERi)D+q&Hrh?)vT$IMr-a%|Ik+s z4F6XMszF)Z`Wzf{q-^nr_h1=IuEAO}w)n$)aJ;*O|Arm!k#}m^T($$^ zqbK$l<`;ucMCu&y8ATjS;M&~L>I#Z8MM1k|Ya{cl$6pnFCpZ_-#C(r$EBsv(Pdmm( zVSFUgg7FZE{R&&)-Nqg7g>|Xo{n{3zk*dXK`cd!<)6OA@y%wKMoT14*=V`nL$M_VS zuPNfHpk0~qZ16Kr`$d~~hyjW!kr<{NjJ{Sg+DVl3|MgI=7v8v z7Zyy@XK}-U1v85aKarlqg$08iMsdS~8O4Q0#sM4XL0l*Zh3iFJII!pjG64A1DVF%s{$u9c&?u^qF+#I?^EB(ehkNyE@Vx z?d-VTQMZovcNe;Jl*0}VJm~;>z&>CHhwdSun-SaC(FfR?KA|`0dkdcacJ#eP8u0X) zqt7hTK%DRe@Zi8s*pV8kkg@eE{cAuqxu*|yv;*vpHX(KHX-iKVd)m^|mY%lsv;{lZ z((@jA+JYVQ&{G%eNCzH0G~0*`+=#8|6Z(W5-}KE#_tX#kkv;``q>qvQKz+c1fj}J{ z@6@*Uder2h`~klP3#P$)_eXsBfKMOraj@W9S;zkv;k#b(Z7=E6SO16m{O3QvKKS5+ z_3z)))mOg%bM-0v|ET}=#y8d{p17~J-^cHLyuRku&#XW6#uwHH-}dVI_&e{dkH6=K z>f`VI@%p^Sf2@x89P3R#cw4>gr=DK#eDnpid%3RNTSM(WIM?oT$2#8E)w5GqzvkUt z{f19=)xEW=`Jt}vNFP7e)w}PD^;M^_-v2YZ`U{_VQhnKjU48AtUH#!tboD2{NZHrk zTyMQ`dwuGIch%=Uc2B+KfqlLGT{qXeKK$hRtj~XaJ$pk}pZYW0`;o4`=(AnzzMJR2 z-PP{lQoB#@>pQ=Gsvmjgp?>*WZmIQEUt1sUy80RTOZZ24_$RvhiC^vN6Cdg77d}P$ zp00lI;Q7 zZ-4C_^^qTWc75=Bo>w1v%S-DMKmWb;pFVt}KK&`j`l4q)xxV^a@2EfW`sdZRzN)Ja zy|Js0u3i1?FL(91x87Xuz3Zv<4bT0?`oPOxP+x!7vEI1*min$&Jgq+Vrf1X_yx^XC z_ub!I@Bhx1)bm?zueaQKdwml8)#pD@zwif-)W_cUhWf;BUDV%s{7>trKlMlTqrdw{ z^;vh`UZ4AoUsu2R*>~1=|LoV)Pki9^`qy8$tA6FrpI+a`GavhKSO4q}yZR4*(bc!# zxTF5sL(i$7`}j-izy8hZ>I1(x)^~k$UqAK5o9b8UlmDyz7aw|m{p7#=^Z$GMpYxpO z)L(htqxBij`e1$GJKs@ndg!M5`QPm7mw%wEAG_m@dgq;Y*0((6ZS~t<`RUp{^!9pq z;7~vF-mkvHpSl^}x%Jli(@%T2zW9ajsc-(ppR4C@I;(&FJ5Q^hx&Nm6p4)EwZ~fo$ zwR?U4>;9}h@RnMC^1UCa4}Ivd`b(ewlltp_{H6L$KmN}8;&(h+U;P`Ot*`s!m+C$D z+*AL)tF?1b|GmmDb@lIl|Eu-;JN)bay3Q!P9%uiPY#0BhYt8<@UAw;V|6acPPr AMF0Q* literal 0 HcmV?d00001 diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs index 9e007caee9..d7d91803ec 100644 --- a/common/src/comp/body/biped_large.rs +++ b/common/src/comp/body/biped_large.rs @@ -39,6 +39,7 @@ make_case_elim!( Wendigo = 2, Troll = 3, Dullahan = 4, + Werewolf = 5, } ); @@ -52,6 +53,7 @@ pub struct AllSpecies { pub wendigo: SpeciesMeta, pub troll: SpeciesMeta, pub dullahan: SpeciesMeta, + pub werewolf: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -65,16 +67,18 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Wendigo => &self.wendigo, Species::Troll => &self.troll, Species::Dullahan => &self.dullahan, + Species::Werewolf => &self.werewolf, } } } -pub const ALL_SPECIES: [Species; 5] = [ +pub const ALL_SPECIES: [Species; 6] = [ Species::Ogre, Species::Cyclops, Species::Wendigo, Species::Troll, Species::Dullahan, + Species::Werewolf, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/voxygen/src/anim/src/biped_large/idle.rs b/voxygen/src/anim/src/biped_large/idle.rs index dffe3d56ae..c06c237236 100644 --- a/voxygen/src/anim/src/biped_large/idle.rs +++ b/voxygen/src/anim/src/biped_large/idle.rs @@ -26,6 +26,9 @@ impl Animation for IdleAnimation { let lab = 1.0; let torso = (anim_time as f32 * lab as f32 + 1.5 * PI).sin(); + let slower = (anim_time as f32 * 1.0 + PI).sin(); + let slow = (anim_time as f32 * 3.5 + PI).sin(); + let look = Vec2::new( ((global_time + anim_time) as f32 / 8.0) .floor() @@ -38,8 +41,18 @@ impl Animation for IdleAnimation { .sin() * 0.25, ); - - let wave_slow = (anim_time as f32 * 0.8).sin(); + let tailmove = Vec2::new( + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(7331.0) + .sin() + * 0.25, + ((global_time + anim_time) as f32 / 2.0) + .floor() + .mul(1337.0) + .sin() + * 0.125, + ); next.head.position = Vec3::new( 0.0, @@ -65,17 +78,18 @@ impl Animation for IdleAnimation { ); next.lower_torso.orientation = Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0); next.lower_torso.scale = Vec3::one() * 1.02; - - next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); - next.jaw.orientation = Quaternion::rotation_x(wave_slow * 0.09); - next.jaw.scale = Vec3::one(); - - next.tail.position = Vec3::new( + + next.jaw.position = Vec3::new( 0.0, - skeleton_attr.tail.0, - skeleton_attr.tail.1 + torso * 0.0, + skeleton_attr.jaw.0 - slower * 0.12, + skeleton_attr.jaw.1 + slow * 0.2, ); - next.tail.orientation = Quaternion::rotation_z(0.0); + next.jaw.orientation = Quaternion::rotation_x(slow * 0.05); + next.jaw.scale = Vec3::one() * 1.02; + + next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); + next.tail.orientation = + Quaternion::rotation_z(0.0 + slow * 0.2 + tailmove.x) * Quaternion::rotation_x(0.0); next.tail.scale = Vec3::one(); next.control.position = Vec3::new(0.0, 0.0, 0.0); diff --git a/voxygen/src/anim/src/biped_large/mod.rs b/voxygen/src/anim/src/biped_large/mod.rs index 48706272a4..6ea0b0c2b7 100644 --- a/voxygen/src/anim/src/biped_large/mod.rs +++ b/voxygen/src/anim/src/biped_large/mod.rs @@ -129,6 +129,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (3.0, 13.5), (Troll, _) => (6.0, 10.0), (Dullahan, _) => (3.0, 6.0), + (Werewolf, _) => (19.0, 1.0), }, jaw: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0), @@ -136,6 +137,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (0.0, 0.0), (Troll, _) => (2.0, -4.0), (Dullahan, _) => (0.0, 0.0), + (Werewolf, _) => (-2.5, -4.5), }, upper_torso: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 28.0), @@ -144,6 +146,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (-1.0, 29.0), (Troll, _) => (-1.0, 27.5), (Dullahan, _) => (0.0, 29.0), + (Werewolf, _) => (3.0, 30.5), }, lower_torso: match (body.species, body.body_type) { (Ogre, Male) => (1.0, -7.0), @@ -152,6 +155,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (-1.5, -6.0), (Troll, _) => (1.0, -10.5), (Dullahan, _) => (0.0, -6.5), + (Werewolf, _) => (1.0, -14.5), }, tail: match (body.species, body.body_type) { (Ogre, _) => (0.0, 0.0), @@ -159,6 +163,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (0.0, 0.0), (Troll, _) => (0.0, 0.0), (Dullahan, _) => (0.0, 0.0), + (Werewolf, _) => (-5.5, 2.0), }, shoulder: match (body.species, body.body_type) { (Ogre, Male) => (12.0, 0.5, 0.0), @@ -167,6 +172,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (9.0, 0.5, -0.5), (Troll, _) => (11.0, 0.5, -1.5), (Dullahan, _) => (14.0, 0.5, 4.5), + (Werewolf, _) => (9.0, 4.0, -6.5), }, hand: match (body.species, body.body_type) { (Ogre, Male) => (14.5, 0.0, -2.0), @@ -175,6 +181,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (12.0, 0.0, -0.5), (Troll, _) => (11.5, 0.0, -1.5), (Dullahan, _) => (14.5, 0.0, -2.5), + (Werewolf, _) => (10.0, 2.5, -11.0), }, leg: match (body.species, body.body_type) { (Ogre, Male) => (0.0, 0.0, -4.0), @@ -183,6 +190,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (2.0, 2.0, -2.5), (Troll, _) => (5.0, 0.0, -6.0), (Dullahan, _) => (0.0, 0.0, -5.0), + (Werewolf, _) => (4.5, 0.5, -3.0), }, foot: match (body.species, body.body_type) { (Ogre, Male) => (4.0, 2.5, 8.0), @@ -191,6 +199,7 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Wendigo, _) => (5.0, 0.5, 6.0), (Troll, _) => (6.0, 0.5, 4.0), (Dullahan, _) => (4.0, 2.5, 8.0), + (Werewolf, _) => (5.5, 6.5, 6.0), }, } } diff --git a/voxygen/src/anim/src/biped_large/run.rs b/voxygen/src/anim/src/biped_large/run.rs index ede6b30ebb..c443c98aad 100644 --- a/voxygen/src/anim/src/biped_large/run.rs +++ b/voxygen/src/anim/src/biped_large/run.rs @@ -2,7 +2,7 @@ use super::{ super::{vek::*, Animation}, BipedLargeSkeleton, SkeletonAttr, }; -use std::f32::consts::PI; +use std::{f32::consts::PI, ops::Mul}; pub struct RunAnimation; @@ -82,11 +82,12 @@ impl Animation for RunAnimation { next.lower_torso.scale = Vec3::one() * 1.02; next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1); - next.jaw.orientation = Quaternion::rotation_z(0.0); - next.jaw.scale = Vec3::one(); + next.jaw.orientation = Quaternion::rotation_x(0.0); + next.jaw.scale = Vec3::one() * 1.02; - next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1 * 0.0); - next.tail.orientation = Quaternion::rotation_z(0.0); + next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1); + next.tail.orientation = + Quaternion::rotation_x(shortalt * 0.3); next.tail.scale = Vec3::one(); next.second.position = Vec3::new(0.0, 0.0, 0.0);