From d5f27ae9ea0ed66e1d71a8a1c3265015120e6170 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Wed, 13 Sep 2023 08:06:08 +0200 Subject: [PATCH] Manage hindrance dices --- images/dice/hindrance-dice.png | Bin 0 -> 38241 bytes modules/pegasus-actor.js | 119 +++++++++++++++++++++-------- modules/pegasus-utility.js | 41 +++++++--- system.json | 4 +- templates/chat-generic-result.html | 10 +-- templates/item-armor-sheet.html | 2 +- templates/item-weapon-sheet.html | 2 +- templates/roll-dialog-generic.html | 18 ++++- 8 files changed, 143 insertions(+), 53 deletions(-) create mode 100644 images/dice/hindrance-dice.png diff --git a/images/dice/hindrance-dice.png b/images/dice/hindrance-dice.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bdeede3c1ab9f7cbe548c0239ee893461e3e4f GIT binary patch literal 38241 zcmY(rWmr~Q7cTr57=)-a2%;j5bV(y1Qi@1-H%fyvh)5_c(nxm-NQZQHH%O--9p6~) z_dDl0KlbJJS#!-f=E!@*()X3jb1ZaXbQB7O^+H_aH41fw1^MsBHTb23eUAbDxcN?8 z*&2nyxQqOEsc+Kt6on#3y$}(4;}Ekxi52$dckI^5q*A80P z@4r}Ht$hpbLfFsQ?ih{T>Yrqrv_JEELS0^wxu1KsUKM{aHQlXJ)I|M;PkvDSnlsQN3rPhZW?3WZ0fF1>`r*M-S?o+Jz00 z9gcS4Z%=P{VmmTXz={N;{mcX+8k6(U(&0_{2mJ#Bd&7?!F;pAj8OqIwZp{9#+pk~0 z#$5>I7rmwA*`^kyR-j z?~WE_!kl_%e&1%rI;$b7E_D9wbL^|;a;aDEAK$iQh4%#c-c}zOY&Vg-z1q!pV78s5 zc}_cWTECc#elMr%)bVvE>Mo5QB8dApyDh)gyX|P6ioV;ADe|)J<_kr! zgE+j6V&B`}zxI-UM`Szc{u%Y*P-)G^YL3;^jap-b`^gff$`j4KB?XdC$|w#y&j?;w)JCU81? zK|1k%EvIgOBd>{Qgi$OC)zB4V`MRZnLC5C&cWU(8)PG{)T{QAG*lKB$%GRN@dw`Sn ziF+j($BSpHlJ)082x9{=A`SOFv+)uJC97Xpbyoz=Et9&5D!%#3w=~e`{P?_HGX8ey zwg9Zs8Yrzf%b97{JeNrF8YV05C*fo5fA;`qNvmdmxBwm5XoSGpHg)zI3JZ_rbBWTB zLZREmLHu=A!>)kS7 zZa`LY_YV!>XIHP~&Ztfw8$4oM50#dd4qo#Yr(=QtAr-n^d7Hi9qP*s$LhFd3G)#jW z-f=%Y-ooa?RohN;8*5psuySxXtkAxAHz2$i??ry-9M(&JaXjo59nsj;aut?qiFh@3 zOa=eC82@!T+oReJYLT1r2~q7=-G)zok~=JGUa+s8u(99pbh~xp^DL)@jh#J~tuV#R zWaRpg9m_^2a^+W2Sh*ea_sPg|qkj^W1UX9iysPIgy0!0iaDKv#gRH<+gL8=f*0Zcx zFpwA*-z)zl>#y&J$Q@PJ!of<)?VD~vP!vVS@<_d{Hz-H;sLMSKRkHmQL>28RlNDfPR5K+;A8She@lg!Es zggNA2qAkj4)~6K&7gv5?Sf&RNjVj=qBHH$ z=ILCDvktPg4$uCGuH8Uhwl?enJVQx})` z|4FV(bR}S7V8BMEEa>JSWrBGd?tj1getH*{lEmF`|LF&>bA<8`7TeW<{6OdT)^c)k z%U|@7--5#A1RPA3pIh8=;{W*HPrR0|lXL#}@J44N^}kymK9I0xMkhjES$x%k{K4cS zjQA;cZd?e~C{)MyAmlb$x4aR0QP%&x_U+jNM8|9I{lBlKc?V*mX2xcQmb_-CHno;F z`0CChIPSmSTipMmRo{C5$(eO~Hmhf9iE-rt%Kam9pbpXd-O{>RYXR(I4nBO$%55tq z(32kQ;nPj~t2x$&*FqO#NTqmpE4AuZmUgsJC}D&k5srxps>49HBZZ!mv%kUU5xpO$ z4g(Xmd}`>=G;dER(wb3fp0~~{*PPxJ#X==ecEL%){i~ApOZs(Pa)#F{@|5mmeIg1( zkDdz0Mtgg{L*U8Tbu8F(Q1tfCEDF^m3fD`|Qmd_Wt#6j_{)ql18H>M^&S5Pv1(yxw zZYc}fnT(aX%5OJCT1%oy;kTi6sz$`inLGr06hz(?%VMfInRqU#+R~@wk@0-VXo~A^ zztC2>3_nCVV5L^}`Dg4f1#Pu>56kaPvo0xvMC|v#-4MXDnHysg`zHcNB#a8$nZ2tW z(edY8s-38WT7>sL%Yro}A<79wtTiVCOEdY-;LQ{~cy3$|pHY1&x@fKY^eu=;9e?e5I4| z?F6}asa16N@0sqR1VfO`-QN#Qgk>@4CuLk2KPMpDF@1$Xr6CWrY-*=XvVK$V=TB1dfoq{T?Z=YC30m{RLj!iIssZ+!;@dw3gg6VsDvlT zB~a1}yAu{=WcrKLJl9b{_hD_2wd1WCOi9t0LV%-3LLfu#h=c9+{IJ+0Oj48}Kf;kO zc#lt6vJ>@|QG$2={hirTAcVyxEaeI+A7O-5rqOJKHXeiIb<`h(9xIcVOIXf7=E*5= zP=7p-AH;F~dia#?_9_U8Q=&$mBc~+Yd~ZK2!9PTNqxCB41eil^$R;$rPcx8eMyjBX zsznHHxg*`-Pv%PWRY8A0SII~>ALY)BtbESKOm)h_tG|v}b)-u73k~%KVOLDghnVg5 zWjn_5zOkT73EP*E9k3}EK0g3D%n;_?BR^#!W3flok|B>gsIMi!@_f*{?9Kqp z(2Aj)$!=;$TPGc3zT!@b{BmzL!h+h#CrApF?*%u(TvH!@ahUQ9dE?)6+}Vgt8n2~| zV$REPMw8^#{>BJ?rn61h6E!2@7R|K`uCMYsDS`3ytz zs=%{rx8Vvww?J1~KK z@-p{Xu@F)GLEMBs2v`2q07lKdO}?1>)-!(Bs(;khbz&V1RB ziBnZ(C$(3bUnuAk0h^;hZ0>ck??&w}3(7;|*AJLA4)s+iyH)jAD2ggfA0v0V4R;dv zrTh^!qLOr3*jwby6-EooV~I8W;Y0B(7K9EKgpS8iJ>}w6FIAJ!8eZ84_6O5eG?|D~ zW`V%S!0wX;aYidYYATFfSQQ@880(MxOwLY#a1uqri8}m(5Ru?(cBh`v=lv~v2FXO$ zXcn{Vk9xE`H&8POIHBk;IsCnFWaxdXMk*BaH)~V~HA9CGreq&cHB{Hv>-ciLSzHIt z6CBOIAl=&6U^`tdy*TxIKiARr7vnFkeAdW~Hww>K7z}P)a?e9Z7IIRY*4f;U_h8cZ zm>w?;GwwexrsE}i!Pa&gQR4~3-+nNvk81EZNX`&6VgvVJCl#XJF}7$Qi3JY50rBxS z!DD4y{w|wTq)S`z?eX^{YfHbaFC=YuSJj7&EhbPiBnX-Al$rRy7}W``J#z|W(4%zO zr$ZPggm^aHuOL9epKSS$k8*5*zG)4o(Cd#bp(+q_V3vO6f7^8hLw}Nbw<#*F>o4*e zCSnFbl&Mh(DoKOiDC!xnmu^V?j(r#G7>brf^b9p~1&(~zvf5yCoVms27}Kjh*7uYu zxr0Q1S}7^u0qAi8GqS~}!R_{vMgp#zH62lfZ^5IebP!)g-A4@R5#lnQsE00FV_HZ* zkxUH%rswF~0qgBWXufhra-Ul5P+#d+Rcnb>uFYP`Fk;zgNNBya4t}YuR2Iio`ZSbd z&+fe=4Q(65KX)C3pWpU#H1#=7Syl!KM=$yo8{(5f3g4-83(yQM*?55PK79mb(CKL? za`LSjs)<^zxK*>4aWeEHmxqr~l&y{I7-GFDF$+o$iNUb0U*}Li3g@hDxFl^~O~0){ zmg5UMcepyLJ-(uos%Qz>JH^zOJu>Z_XQFCb3y2=NYB`4Fb6w-vC(Lde>| z$xvQKy+M@Wjxs2y6?^K%%If&{LNhuuc8Y!-jytGiU)b$oAy?gii4^f{#2_%06PWrN zJTdMiRMWp#_s-U%DgQa@uM&qTd0~;dmhxgmq9E|vLquCCq^a#0l`J+l`mRpd9_qij zuHp8$eKze5#;oZ_Qg9D}S|cuhU32n}{!- z6J#3xMG5vI&#|Jo?z$39*Zvy4zn_;ZMe3i$Qjx1MQ%8-e#Rjc><<;n`J2V@CPc8R+ z^yv`wFL7lt6ap{O+e{Ain@NZD?z$?!J^A+5XD|mmL^~oZM6oP^^)b9}WhuMW-=2)T z%X8a^1h@OoinQ(_+B|7laXl&jmkIdY&!CR4Y~U~^KLuUHCC31yctoUm(eG+E5%vD8 zlPusNG2SRJkNPQ`OsK!*=S``oOE1&nk|0lnU7)4|POal!r2U*ZT#U(IP{Ic4dlH`u}CFZBm@c|&|o*k-#l zAkq`{rK@qV$!u1uywCw0ZXxZJ1aVL{+$e})fTR4bKjL1lUCTRU!Zbwu@s*n>KTqLn zg5RsE_9^QbNeL(JY&r*rdm_=SFbI`!19|r=r88gbT4&X1>u&cS{?o#!e6&Dpcw41Y z__BLCvO)ozwnBx_idhFAaQY&wvww=cdt!}(0!L65RD_yBdT&2xTyHbQR3{cx{T@Ud zX7(u>3=4LmkTUzf3}gY9Q6Z4VB?QsS?6G|xY8Wg0zDXvRq$u|CWH=YHoL(dOk8n{( zFsy`kY<2x2-Ne%AE?719oEauYBfj%h`35!?mmH}ZJcF3tjga&O(dTp*cJL9e9+5bV zbZK8m;Ile~eIBUD?e_{s{R?uqew20}G#}FH?<1bT6_V9ggrEVc-2$y3fuGrnF-iah z6z-xH?s#Lm*MpPb&RLVe7Mtzzh~>Z_(m$a7)l97a7~Cj%AabZD9BOV@NbDNV*>;oI%hShyeGm*bF1_N6{iM}W11J4kF(8DQQA?!b@xV^8#uY(xMU z-BJvRDukCv4~BjIz+OPt2$(0=1sbf(AtCFm;*}0!m;G4tMo$H+bpk*(1SWUH8!ddL zG=rP(mJ{QMm|@Pa>Yq^0H%DzgJ^;p$6CevhC{3dBm35gzo>Vt64LZTy^kKP=}iFA8*&<&i z`o4|(#h69pZ0i$$#s3A7Aj5s`riq_mn_8eAs9m;8<5gN^Wf9+R<`r*C4%l~8nRZr5 zf@{bJ({^_R_AJy5D7{6OAw|U@b+7(Zv>?l!j{5M02EgYP{`du8?~Y+ zHSiU6|KPfEZ_j=Gc&-uGtw)X10uFdap}gl(KEyP4<*0WM&Z@p|#(ivJ`pK@T%#uVy z(xSt&xcPh7kqI4@4#}>&vI3QwC`JuEt^O5+xs*8nK$`mtpowQlP5U&_O)#-I~F zzO`OWa6o7hIZSc+48Q4eL#7~wnqdX`EkbUw{&PM`_@gF%ERuGxB9b)(9!d2!WLB7_ zlwnKbjJEFLJ2KrpAfB8XF5S6VqxtO_fa}SLZ@{P-9@r(-NJrn2y=hJae^V;Pni=jo zLkRq1{XwjYcu(bf#zrsSexC}?7@l6QqfUfy=8l;3w*vb{;ZO)9RQbk)4h~M|ntI+h z)8Y*|C_?3lQ2ZcrElD@tUN%2VGp=Bu? zAlDf(z*^HNE@fWaDL|MvYB0ZFtms%MzD^Bl1g3ByOd)_%D-GCB3(Z|4u0QesZ;e6o z3o-F(2yQbuQ?{{y4S1dsI5DA4s`*vQ0ezq$5c<5yGIHRm&4a{?{g#^PtX1SmIEh z?FvbWGO@+Or%$(-xi>eTIK>X57BGO_TS~Fy%CSKPt#g^trftL~TTzA<6DLFF06YX! zf!z+GIFF=*vU^3?wq_&5yTZ^)qcB@1Dvt3XmL(uw-=T4?K^*6mv`8=E=IVXS);Ie> z>@EVQNRGh*ZmgCh>b9|to^*O4}2HQtjZ56BUWD~aH>_@%2C;0zPYD`yN^}*GiCX0-JLK|JuCTCYd#?EH3S-R zxu`=M#>(yqp9Eh@D3)N_9xTl2bFsS&+Dm!O!I)auFnE0`d+*67MLj z%P)%Vg^bqhT*4N+Ouhvy)Dy-bt!I>Nda$!YlhmRkz8LqI^F7!s66eTq@Ts1PV%JFZ zdBozf%**xy_OzZpmM06iDi{Z9D;`V9g%2=D&E;_xvv_QwUzoC<^g)Od#DXAdP~42Z z1~Hs_{$HZbWn7hLf5s&53rMGBsn8qX(~w9I$)bXAkwp-zXk4Pn0F0ayPL!7|zZEh; zaKR(L-Iu5kP;+v2FsSxpGRLMskA)sc!V_!IY?V8o6h`5p)w+QkUhBFDCt34NsLM3f z;yaP9_oc2U-n705g@{Jy2aH5&f;On zrvLJ_TskPcl298yb|h|V4)^w!K&ee>8>t)GMYY8~Xw zl^8UIQ;8~#Cez*3D-gUE&>+5x7|-eKSe)z?w`YFTyv5sI_nYD!d1Z+QLFplH~7UmSTzlF@#&$+3*Fc-8{AAx$QAzDcIU!i6H)5Roj&c>&U zPVPuO%&N}VW0N1Ty(U5HMu_((u|~;2AQJyTNgI`~l(e_kyQHIHct0||3s$eY`CcxF z;x#uM*uqA3Mc8;l`VIY*P#oY{-E;NbfiKJ#xm&^a)7T!mVO2M2U;My4{o}1xMW!zS z9a=#(5Kc@Hq%|dnp3GUyeO9M0;H~K!Aof4{F?>HymA}KDbgS~+hv#08bJkZ{=78FAmCyv^1}nH6E`_GjIS(#^to+H z9p5g`V1ok4Y^+q)O^~SEs>wc{&cfvyx`OWVi+1?%IR5>QMYnjirS;c~vPi1H*>Vj5 zTS!@^%Sf1IJHP76OcY81BAZ-Ehfz$Z5b-gY8|^@mR9vaiM7-QIEKZO`7||n=jD#mn zIUE6L)Y^GjBx}=YMPeQ~rp5TmDRX2G*^8~`VbND0Q1Qija6>7@T?}mOoiI+Y%JmQz zJiEE!iC+HAnyu+WL2Wnpki*LBr6G^yXgW@qXTw-;o$WSo6GRjSWy>z&iqikX#0{x8 zAsv^LKCL(6GvEK|mN|8VM*f9qDL*RhUKxW`B|XKovAhA~A*b2@3TT36QSJ+m0bDQc z7kvLF^kEm{hT%o~2MPs~g?nEMgTj3EJ{P79m=L4tLBDSMQ<6EN*JK+&n}+P5X8H88 zs?G$_>PlC;q~*g7?(DD1h5<+RgDk<$rB1!!l+9S=B)|lnf~Pz0xO+)Pq(}^Ya{gqW zSRHU6Js4n78x-Vf6${arDfT=Q4k`9xg|~hVGL-8SJhUn*_c^xBDsNVS1NT>c zgDQl=K!Wzaa!Y4_gGJlr(s2t|Yw$CILF>hulhw0H!}M?xT_`e+vxAl2z6R#?(I`>d ziha>kaR93(J5@zhwX5}Ks0hbr`77OL<(n!ogD95`Dg;Gp(Va{(b{Y{oh)>sIX@0sM=6*EUl5g(c?|9!&>h>x=~P&8u~_7>qnF zytb3kychIofsr5otLvmgNkh;m>Xng>_Gij>vh|Ev#&NGJUI>nC2s#SB)3^GunsM!} zHe0Ep=Hq)gNxNjBThAen>M}+30e8vSvT)E9aenUH9iX$6Y5IJg=1=;G@UfOHi2T-> zVR&pZ=3`Sxst{F0T3k0oac)XeXG1a}w6NW7vRZ7u7=x)cf|O*Yp6gR9V*<2OMk99w zJrD+1%x$|uoEE4|7n)?Wq!+?+sPfZX-f^&W$G0ahJA>hLs8B1JQ1NRBds{Z(fm$PY zYn2u%Gwgpa-#8(A{E{-aPSJkE^%Aq_k-BLlo~x;HWMLQtj?03NL5XZ3H$j5?q<}^2 z#24`9Ty8S=kw|Ez z_||@EzJ+~woH=eP!?7!s)ILaQ0EyG`ZijUyp`mRQR7Toklec&!vqpaUy&vZ5#N*Sa zYh?IXCeaZHo_8jHb$y%<0oJriNwIIq-yCvQDXVs0V5)oL26S3EaJmm3B9)4$LeF~mYo)w zGXfsxU9-n!#4Q4qWpUJiTGbgztNCT5LQ#8%jTu@+)zmBN?p?{E=GOe+nqsQnwy6~o zhLjn$eumUaPyt-~y}G#u!7Sz%a5q-tu2I{IfJU7jDp8DyiTgXw0cTFq+%Ac{yi}ZwGfYJ{#Cct-j3(`V6e)HV1$iOMN5FFoKo_O0;x?m zu>LBxm!V7Hg9LRCfA#M^-}#$`8tVbfgU<{Iz}Q6>MC#eppo)%=C-D(B9{zbRL-{#8 z)x*c%cBCeFI9kMqAJU|@N>D&*B)3etDcEg(5bg9R1j0nBzQWIEL*VcUtIdVhmFyy} zCw=-7B=s+K38O?o(o`7rPLw*c>USF&2$rGv}z*-XeRlKW9`L0BJK>udjoqT*r`7CDr$5)y2_Q=JxCGBo=z>Tyx^e}gI@z7Oe(=}?kNvUrxL z5HtFqut|)sMR(D0p^N=Wu)KCn_^mWPlq>JqPMio|D0j888E8qKk1JyH9;`ujY3<~* zTkvMyT0xE-5h=o^ASfvt+fQuPQQtB#!4L>uh{0@1+VA_E>nFp-UG>EUf!?1*#VLc{ z;<5cnE%5Kq zJTbr)vrMKYjfIhduU!eRgN8=&`~}ivm5w9x0WBLDa-q%<5r||l0~9T;YUG4LgO6mg z(~r6xIM2oKX4fT%uW2}x%^J4O9XwcDPZd+{XuEtHx(u(#Aq6!4)2I?FDBq`iV}I>= z#PGXkv5|eFG?HPH0|kq;a=N#`Jy-!&q`rY5bS`~T(A{Ki!{^7lU%N!el@*G-VZjUz zP)q)=^WuGc*L6iAuB$a!A8HYHPUGNUKVDd@9nG=^sL6elLqN*@>1WW{7U)AJplmLc zmV6dv)Bf`Syp*q@7*ASInl+2DFYD}qGGH-cGWFdbB~qHB3y%I$ANB0)bCR*12C)J! zyH@IRFn+Q}Q5)BXQ8{u`vHnOK_L3bju#7f*9M2M4-?w%DLFB(uFn1b;ebRR)vo4mM}6dI`&<9Da0Fe!^te+oIA$YSjrGP= z5sh(E=OSW1yPlKS~D<}irKL!FJBLqv|_uDGok6+BsDho)m#QkhEYu_2Q zWgzJ^X$l>bVn96yEMt{f(XQeDW@Wh&ien#!t>$)uFS=@rKJ4O!`;Gj}N`6jy!2foN z5A0SC+<40a^@IbYl;~Y--?_^HO#O@^*Nw40UboaE~Muw(vp~3 z(xfuG&-X_+G>;R*avbkOc>E8&!Bg+S-m;MN6DaPxMT$jUS5K{neWCJ#JI2GTWnb2Rq`#8DGE8utpdn(;I{uZEmQKkhc>@sx21e zFqy1@4<6ZiwKfr{QPU2V_`gomZ9H$xAe{2sIIfYO#i%0i$7{$O&cX-cSsAkwT>=Gu z*HMS0U{dP~Dfjo6#RW;#lA{xmU$?n59kmf3~x{Sl3WrCeb*^_iiua*Y7l+uaiE9C}sr zb>b7>91P~i=aKo6VSk~AekI2S5O6pNz$VwhZ({aSeA|{BSF&?{^qhqLb8i_R8CAS#b23Dj`wg+BUPq4x)RM3B`y1mHs)voUW~0 z9M zeb`;7yjEo*Q^!&mM*+OS$BQRRdVkDk$~1YLT<{fH!|_r&s7=cWrk;ya&Tyj>)e@>J z*?JUHLRp4^ifnp&nn8HZNliJn(^s-4&(Y{UX~bYhdK^0^Qv4eP%9@m_@)wcJ;wz4h z83U`G3?&A#*c3c6j}yJWp>$gqQOY{C>3cvvLqfVh*L5K{6 zMXfutxoi|pcxw*bwZEuo_nLKN`#GraHQ@JpGzE=h+gxTqVTDoKr9*GwYuhnTVqi>w z^MKhnF=QAyW2r0P??DbA3ohuFy*rj^G^d^og{GXTMF%LzIaFnNq4d-@C-T^|IzE(W z;@CO0+YP$(EH3BiYVpSYmflOIH_H3xhq3GL{M{&j?*R=$KZu;$L5&!C!I0cohDWk)XUE&W z59K%G?j7am}G>HR@M zUw`{wM{xTYWP8nI*O&A%dGhj+WK)Kp?FPvMV69?GKcK;Ag11%Am1u z`2F{XL)CWAKJ~Nv<8G|zMp~?~*>m5Z(6ZQ+O@a;L90hm7`>z0<#f(oy_QJ%%9!JH9 zhV`-Z*~=4k>OFzK>ClXn{5L;w1BNiR-Af)TVb+)(_3ZUET=9|S8kIKs9=K6Tle@a+ zbebVTHY_@liKkGM4z3L8WjJUZB+^N{VtUn#NK;QxOPgCL=y?Y7K7d+y-gIn#_K#2d zk%j3`p;m7(0puXPL>8pFTzRIuwW`W;-~XkGL78&!O-!?-w)$FpH#fy^4dsx3Tfz-4gO-Dj|9g9T@iSRs{`*jGak0jWqzP*OD`l2Y0bn8f*un2m9HQ*n75ce=MI-q zwjcd?D$Yp`e`AQcVcdldN2t6BxiW;cHXH4=6}7jU=JC82+03&MopQ|vskhMyu6D{z zkaduaNU2UsK%c%bzAgaLvB(Cpir)?MI8J7CkkhDi-nfztYVvw$Qa>-n=+#pa>+WxE zoKtOHU9z}m?&WI=W&E+BJ9RU+YM!30EQ*9IO{&On(G)b7%+<<7(~*E!k>R1&$rxkR zw$U9`zc;}u*tbiUZa+n|%l(2bFG*Vr1W~%r`T|2$_&#S%tq+A~9zi-K3rkbT!GzWSFh`(<% zg9?Pq-j0hx+qepgooW_4KI<$tHS4 z#{ZajY-QUy-1`i?CW6z@Z7vm&0jkOg_jy>VYr$t;(%&puNcWYUKgaBr#bnH(HCr*B zwQ1zwt-wKCmvCZn=o0lcF; zr9xn;|AI~mH39zmu7Ry-0}PxzJ1cviqwPQD%I0g0rEJ$s{C+%-r?nc_799Py7Vc5f zR=|6@w_86uG(6JqC@sWMn_vVt3(MJc`Uv>BD3J&{zh7}Rf>@x51l|9&HUihq1;=?Vcw27WhPp7Yrw8dtiTo>dH zt>lF#r-fhh?M3|UdWs!YqIaA1{y6vaXkep9UJn)EWP{>?uYeEZKqlWht=;d@$|T0B zYLmF|Za91n9Ms)>C^{@oDM(*sdtf92DE0e=!jwwpP~X$>v!jn}l-=_?-`}OfoYXi8 z8g0w&?SbV`>YOpU?!}cw$!{HW)3`h9yfXRwL=u7rzoq*Pd?|CxJRyH3 z9anUNsI&atw)EGW{9Wo*T03xKUk<0+DkXI24EwlvZZv>laN+JJWWKG3Ni`hX6G_=I zW*=ke$xj}JD-LYXhEMH|SD;(JnHF># zt#Jw`2m!czRDOHKQ%^b!umxot(b*P(wq&C$Ykg_Kmxo!_EL`FOrTC?R$LYAl&f{mn zVndMs$X}?2VbaGdb>6#DCc5S1aF6K(yCz9*f^G!_70_q znl!J6G{$oe@7IKNDu4em<>db$P@873y7z#&gSL>R;9oa@{7NB|ks9<0!tE!MR>= z?z%=YM&;UeI~UEqS|tfMh60Spy5YX*O@+OK3AEyjw|h>k5|(LZ^!`~Y;C5#LOkwqT z8ytB4UYz1rADKt0ew>Z`c?4TxDsn#I`@nAK!an+YC*>%P)BXocrWyN=r}D32A;560 z86(g=NQxYS6O5kyVhkUNpQ5pms^k2_MvWY$-LHXtELnC?s_a{~ve8P5$I1Lb zLbhz!Ki7$&x$N8vfkNjqbOCzD8x6z5@qApn!1n&{Mj@3673iC5&|M2{-tk^55>HBr zG=6P!r90J$Kedc+%1(NEeWmij{wLz2IN1nRD7RgmzFZ94xU*9K8Yv^I6<(|SFXxWzT>)L zQXf}J?@ckjY+|LfaO=63YJYpk3dGHUIJ%c=>|(}jS+s;S?hrfs3`o;qYV=br0t=(E zVnFuuCiS^P*-+LGCDfr*k>Ta`Ia9%wa)WN%Cb_uD1 z-}yN*A6o(wlv$RePZT?a8LWplnD3Ag-fA5f;uU7`D1cCS+vd{Bri$@qP9K`npGwgTzWBA96;ZSc z+HMYgJ|+IHGL%@NZ!>#t469nI|8R&vDr^gu$OJDFKR}$T>Vou}fiF)yV;erW0KAJ4 zFd)PG8zV*h;)M2YzsBcc!a1&}wIb47mPpF3vTvY!RB+}~HeY1k1;Z{XYHZ@|_dZhf zwUb}{Tx;9+FV3iZ1)j^Mj1n<0LdgHUw;0%UTsHBL=kIZJET4i3=nOJ1xZ1;w`-0Ye$Jty0LsoSndJU%RD8f$KEIy!Fp*2;C4$`^mp zSkLrvo&FWHTBM+PEsG$4p0VeJ^vLLa4b9gKp4T-egInfRf<^7#><;MhOg`3sx3((; zpC~K^#))89>zmT(w!3uFv^Q$@{5QAl?A3McPK_tDx1a?y*FF14IxaM1L3c^^ z;LqA!M|qrXDFg3OB)ybkCBF#~8t;Q9he2OV5suTk%Nj>y6;5Om>3(8dDADGI%zDA~ zxX#6;PEiAiF{nWVjdaFS5c^(*E^pgdp_nQybhhANOQ?65U5w#ncxxIouEw^oQKr6# z3#G|Ky4Zi()b&%7jiCgA<5ZGN?E9&(gdVj0DjLM*CjEcYA&QIh-`@E}XZx6BPx(rj z>O>826U9FsmCxQ1QepJzt;l69$j)K&!-PD}(a7_1157Ujge;(OzaWkEuOfWD8@8bM z0eaIGn=*Q@RdvP25Av{|x^+PBBt{?=O=Yqz^Y5`N>w1i}=iTBu^bQ5plD;3{v* zMtB8*2I1+Z^?fWmDQ83CXJ1k-ni<2Jj)s0OU7d`LKsy=Aqm|B|w zBi%tWZsOHy!yA9f;}cC+enQ9&Qf^lGKXIYeq7yg~E4_*Z(D>DjrJlH{9$lW1W5o-5 z2XDdaja0D*1qpw>(jq7uwEbQ2gp_TcNM+4@mXzk~YZ;T+tqdyJgIXo4y_{suN}BW0 zoh=KKOE19Ji&5H^-&RV($PIK_QI+9!)f0~7Ep~P}pd|4Qpxif>I+a+`8@hKstztgl z80eu{b$btbD9>>A{s=8wS-!qSJwU;l6EBoQNW+RawyRz|CD&oD^5(~KCzI+llZoDw ziD%DoIa65mt-GF7eKf(T@#v&T8%`8v%-Q^6?A9!;{LZxJvrcQ1AfYAT{CYr^HlOPwz-u~ zClrsT;nTm1(IwBJz&QJ5Zs_*2twhMlTR(R)=qCL-cAnZh$?PwqbL^-{sd!L-^4e{a zOG02+^E8$7vnKM{Tf%nV7};!8_iTi5T1Zy^#6q{*=!wkB7l!L^R?klwwj@vF?KrjptL6_*Y;zt3$(|A16M%3nz78 zk~u3;hEwc)&B-I{oWo*?eG7CV+#BAQ=-u$)LT`k|R-JfLgdJ@eWg4HU1^UzS>iE@N zv2d{_8TQ{BZ)j6hy1BY-dhdFpM?Y)qjQTacJ`ikHIhgrNwfEI$*Wtb~yKsHkG_%~& zCn`~+yPTeQCb$4y&^xUTQ@U|_>FZAiJolDs_D=FmqqZc!S(A$<%afQ_(Y&pZ)$Tu7 zzLIk7CVqEo3d3i+_V7N9$(%RG+(-2XojD_>#ZsK*epW@78^uoaalgX+f$hgXF4#5- zs+G{a2x{H^7`||lDF2k*&0)CaLU%jf?ksR7cG@Z1M)B*zR1O!))ol)!POrM1v$x?> z0#$+U1&UrACF0cC=@_viG) zw;J@BnFx)p0vldvZVx@}yZQ)6k&I&1;MM8q zdrB#{3~<@6uh>h}s2cxyOo)6R;lSj#e4|z54yZ?vjnd#lNrHjwa;&53oW$URltPDI zd}?zBy}`%oN&Zprtpo)}@BWT~C_ddt^;NG`F%SN?rZ$U`hEeXkNkKxh$u3HR;e8FQ zJ+TM$6<9}=ISB6Kmj16;NI|km= z=>9~;g1Eq`dyul02R*EW?|%0FOumkL!G0VgpTGL0X7jYjyu*!_skreaT3Sh*a?JWr z=pcRyo0shxjgOv6(ic-GoiK4)kkf zKaaq-oE>o$899%NmdFBK1;S_bKNt2Pr38x!K|a{@xSJS^Z_t$>@eAR#|Rg+KuB}u z_+hD77BfPk%=a{7($hTo+A!=b)01zWwA?4J?;U5$_k@+)$}P(@5bA$A9@unA+0F2{ z(z{*atKwr9f{fjJL7YI&Rp38-^fu%r%hu&%A#*$t%Ac*4=iVFX`)AgrBoHrx-wCgv z7(Ht0?dgDjk-CX?+;4k>_70**K6^fBsz^>tf6#jfV_!i|Fe={4imTOs}OR z|13oX?X&Ag*9$5)oJ!jx?mGCGn$>Z7FE#^zQ8^06mZaiq$N*I`3$Dx$t8Z`O55JPM_qS}UQ1l^Vxq-}>Xp7UV7v8MPJq znpf{T3jaKCm6o83@8a>g3{V7`}f2EEOQz zLOxs`p=r4Jd!;@dLyt^~>o;behUi2WUzC)|YwmI`g;{0(hHfH4HVONqv^>ZBfs(R6 zm>)}`H>!0+jnSA^Dpsn0qzjmQyy#?-7!`v2Dl#!h$YRCwE&C}8BWX@l+97+!@P~KM zR1Cg|Q`l$o9ndTMb1#50T4Hv1(gvOIXJV1%*6EaP3WHy`{b}*#^zhoaa7}5wib!IG z!@k6+Hv0sYYDgGwhxk?|z|Q(a3q#cEw|8+}M_JnQ@FEjD_~xP}R*5ngKNCm-hQEE)3eY&Lb4H#q2BllS8bT#Qj};#t7V!e*94+YDnMWjL2eD$=FK~ zb+LX9pQPM)IgQ4@H1(#)sm@B6MH_NqtLK^>$DSpWd9xAx8Z*V^uh%RV9I}|+lRm9T zc=33=C5R*E^sKjrmnT)d$bXP%Ix6u;9LKnqtcWi2E_~mya0#~X*_Nz1BsSxmniT(S zNL{15M;kyH*nB=Nw{T2uZ9=`XnZ|jq;4IV1HuX+5yXa2N3vohF-s0GxASop=P!k%o zGRMMh9zUpJl*BkxUQZ&FY|QOzZy#t}`pmjS)=QpPiT;d}Z|Fk*x1|z(QOzEoxHu&Y<_qO6V~oz3bPTM$-PgixHR7I4rjO&ml|KEEBW7P1 zo~m(FlvKo&U0-V$y2LRcZ-)>hIPC{A)DdUh(tDjgCs89jOv9FrbwVC7S;PstQKh zej?wp`A3?yFywF;*Tc7`F#X+aDAqhy;2YP{oK*8wk(7E>G>6|5 zDx7vd2F)tF-c(!sGLPlyN1TI|xIv$Gmf&45R1C=DB}qS7!KX>ma?#UtEc)e1IXvTz z7ra55w6*e|0;fz$b_YgvOKu&NW0l&LR9)Fk`qy)=y7sDtoS=Te^N{i_LIWA0@~zSV zQuErUcysgS>~cIif69m^4|i-yEOy_JaPphEqo_rwR105{jqQ5d=n-fGenHkYZ7ruuXygvdnxh0qu1EN6cY z@-XJNo4omJ4(-Xy0U9W1+)t$=vU=%#9H42=JvR~1{l`XE$nfibxgH&m__f*yhFtJ- z=!T&63zOYmZyIcDT;d;I^Zp)hi?>;A7^6f}l9>PPPO5z5fB(cl0;ILyQW#b08Si*^ zVWxk&kje_@6zv! zrs)`fR#rI^IIEP|wwfq>8#LpVYjZ0QZhHgENB|jq6dxUOx-ZUV5<<3VlJnRqLM) zUqS>{G`OIfYYs@l>{-;A(X1f5!NSQ#r}AVk~?Pc4Lh6o#w-G(=)1vrs1cOtA@ zD-3)c&@dAPWsD96Dk>macLZ|w1E4y<3?RGkclui`+Qdl0DS3)3$Dnx%od_dFS_5n@ zRd}n4W4AIOKnto{WB?jTO-f@G?$8hUewpNDzm5C)7Z<_F60z%Kp7^WjNGB<5=Q#%)#s4<;zEBTw#jCyYlmn zdh`fL8?_X)m^LI>AhamULFyBuAab!wn&hnX2;oYl6j+--nZqp<#U_cUR#3{V>>XL z_Ivc>g1*9Uv_9O*t64Cs5 zP9gF&8e1@i^{t}I+Ix!&m92?704=)$D7ZyX3{McBga;@$yfa|^RRh0P{*`YlAW_P5 zphjFjEQIjOs~69B{XUfh)B6O#YX4}6U1bshC`uU!^#SN8hN{}@*#qHV2pKWfmgX;0 z>Pj~C%G&{WfN#OK=yT5>X>I`!kcSii9upj6=%Sd4=#J(@PxzQiLer@4MZtfWN=K!%EZ6vL=p6?-L3P=vA-*yPTvyN8+ zA*T>ot1j*6Xi#C`{vp&9r8fW*3`fd;c!(out?yJij@}|Zs->63%sQ){GA&SB`zHTu z)aYaYvLso0`^SU(*F#C#;-P0E+ds}}Z|*_osS==K;r*t+5&oy`npTe~hL`?D{ZvfH z{EEd0H6@~-!|tGISMI3F$5tTZ>8sS1EzQleuk&Bxe(n^u7}(GAS$vHX0we>= zIE6ajH_)OE82-+%x9kaJ zJdFWOHiTZReh_6@l!a4N{6V{UT7?hdX|U~mIVKg1GwtE5N3!N_N7`q1S&YVZ9Ykv% z5qh&g&STN={{lDQUR;yzF`5EBV#9K{#6tDzmob0d1D=SAI8nS)^FtP2%N;6M6_0f! zdl0D6KBA4tyqo~b1G4PP2Fxx8pmhMRgUb2Q^}0awaIeGN!>KAZx2;SpCC1gWhf!3= zUo~xa-jPH9-2$APB%rEjf%T_OI~!@J0ucO(DSBc@2i9I zdbb(ZvFqafTOdo!HP})(qJfY!6xVU&tDQmP1ZC8dW6sdV;kpIYA{3-r{=f4uIJHGNw*#AT&Jf=zhN%Omc#Dg7eGI^J zXm<G zWJwz}@wY`)qXe}q#*zQgS9E}+{O?aXrfz7hMJ6X3X^#AV%Nq~? z@>GG>y9iX{Gfj~Vl2Phos;rBt{?D+C#s_zc>loe$SLOhc2fkPsH+8gXk?{+aLq}pz z-wE&yAg>M$NA%Tb*ik%0k~@BeW6nj8u*bov6|cJ{NxwcR(jSX)#Ha;5FV z`bX2BStEEYemB-iwa6okDwneKb+W2?Sp~prC;q;U384h`4bK0Nl@3gH+XseU@JMii zY`m^xL`it0vXZH`53I5@E)lLITGy&uF2$Dy1YL1OAWp@gBobhOgyi)mg7j8o2{-SDk?dEKE6{)>=UcJ`_5jmOVE?Oq5Ls$|^S;4h&W^tj- zCxYH)bKBehVvp^Aze;)g+i~9RN4<+2M+Fe&^o&ihlA$embcanE8E7JJh^rihRHJ`7 zj`;(4ZJc`Y&0D7W!^issk;i%GnI@U;RV-pZ;=939IM_)D6qNQ()2o$yYubzd{=uh+s4|N^Wnh`VgPC z65lL!H($u;QMvKX&Yw}!; z1=Apc_aU1LGA~v$JQnSCZfKvMq zw?*r*SK6}OmEwADsU)|4>MbsaxPHigIU<9WIMRps1GO;IgzINbR0 zZ}^FKDKDxFsSBLsi#%GEzi+iUJI!cUZ5=uR77M8(gO=4v_1D29e^Ov5D8b1HqW&Wz z$mg5ttlyDaW)HboX&L~$bpmHY8xb0A%1M-IH)b}C7ds}xSjH(6w6o5Y_TTbf=uXmi zci0?~UM>~ZjqXBWiW`Bj4&@p>CU;NbOf2knIs;jO-a=G$@skQu`y8&0f_a;!xFl65AWwn)gO@LJDC%4(;?5`C zoEk@`RR9h+8R{a5Uy)p6L*dDsN<9{ZG1dPli(#hrX_p7avnAQA29tUH(9kvBqF;7$ zId*Fclp`<8^QEVVjuRU`Pd>0ea;r>&N{_c7n?!wvXlS=o*>Y6b!>Zt_H|vOOb6I`L z3Vjv#6p0V{rM-qZMZ=-6Cls1V9OnuRZv&>1iqeiA% zKcogfqD3k**>>zuo8#bIdWIox?y5)uWafc;^Q-I%@i+5LQG4CbKdD`T;&|;0vs!dG z%?$fiPEv}mv)++mI@YSvZg+sbIBRw7uBpMZ8<-SRrETb z+{phdeM;gkD6`Qsj!VZuHO^+=!fK_va1#bXbG>iU23}8gyA7 zRPEaxay~LcJPx!Hw32rhh5;Is=w@pYGc|Sgl!`V|Oa>ZCuy;Fgs?zy0Kk+y_+noYH zI8!wpmVG?4|K-zd?PKG-a;6qipD|_H*}4UcYXGTTAwur|^(;{2%E;i;K7@6bNihi> zDA4g#8&LF1db9O{T6GCSFYw@dp__1OzGUU>gDU+eHwOK_s;4EwgZeCEC#fA8(#Sgf zhbH4FUa2=T6NihgQ_5ETDHoV4HblE`V~r6i>D2@E=g0wCP^jZfjCHZ1_OR;hTEE_D zZ-Nh`a%)nQxp=a~jeA=MHS@NRIf;LoG+yPP$jabLm{C9SZAag3lZIv-2Lu2`^{nrt zMh>B&W99;l)fkskF~;Ia(kiSwQNX8X8`#Ag1mtPQfEh-)hGNhUb>#P9gDO&r+P~kd zN$p~csV^)<>&H@Xvg08BjPZmCP0Ms__qjJ}zkp~Ub^U6J|Z7aMvtwZxA5Y8v`MeUR(5bmqEH|z-W!P`-t82KmXZ)J;To%r6 ze_N)z&yiK*a9hj#hmaZrCXqXh;VWp(J5cWc1Da{j6a9uawqZ}(Exp#wT;knOG*XHL z%?a`Pe|!v~$8oSdf`6&oq19HL|AjupoE;g5nY*NJH<6;(ElNc25$wyjgijTYhQn|@~`ow zXaXGgJn$7%;9=gMew)(ib!0H3E8b;l`Y_JLv`^*=yl83@j-@kB5ZR6dy$?B{1WD{O zJ9aAk8P)^o+51BQpTN^o2uS^d5*6Qei|_@2n|{kZuM<`==2<@}3d(WJGopk{v;9M)|5e+MUDh9T%=4|hN;{<-t=DuKeV)VW{VNr zr)e1a=9sl%Ov-VQdgb@IRPSzEF6)pfj)PTlJ$H0#4s(}Ibg{j!J23BU+!fqZN^I7! zpb_tBxozq|U@%(6L5t*|v@4gPnx-y406^WyunTp_;#N2TR1_;X{xA=PNP#f?w1<@ij5c*WEhb?-o{0Y<(EH z6Y^!)EvjySuOkj3v068)Wp!R1phVt%@ff;Zq4_q$imqg+|7+!;4k^RgUa9etJPFJb zT^*-l+LiL<<1urQl93P(UZ(YXdXFu66;1&#ZIB7zP?CVG853|Q_t9+5btzZ6q^#va z4-RnIql&7Ei*#up^zwas+&!Sog~I&10OdQfkd<`9aqZ!j&5(L@-%BJViowtVjLWzv>Ru$Oms z)vhO&FMUopURsGLs}4q#SiUs{xT2~=qu_PWFRCydeDxp4plBks*T+4>#bC6{4Jayu z!^Yb9-KEFzEPz(gQ6m|h9MU(^unF%{^IJEgpMhHz>A4PGB17306OEH5wX$O%&if^W zT@N!5yMC2O*%{GwgVY|0EkUAII zH=$4mlr(N``a@RQBipG(TuqglX58l-Vp&E&DwF=!OUP6@n*B!jf)BWZTH~Iw+A1Bv z@AhS>o>zV>9yf~H`$O5>0%sK97mfYYHk^{c-V|5Fun$BPk;9=n^WWEiZwlaI+vB(8U@C zS^|OOej39MK`r?1)~5nWR&4a}oyR>jv~Sebqg7Vh;u(TWA*EvU@Uo!a+{o}~g4mPJ z$u_8m(W?3ZXj{@-uR-`CgR_ZQ%jkjDPzk~_n2|uNQ>FF0gkmjw+9kuDa0wHiTg{`9 zilOI6P)Rwm^z`@drnrB_Vex-kn09R+d0ID2z88*XFO2`+T7a5*5Fs~2Y@Vhuw0-VH z4oVBpj9SalVwt&@_Kx$V^~moPJ%*&%?mGHLcyX9(njuY#D98RkXA`7S?R3F;ewd;*h(qs$_H@ zJJi{|pESWy17SNe4sAe;z$vQpJV5702#xpnfNB1KUWL;` zW*R&XR_WmUqNhv7u25=|O2A$OZvtbdF=`Ch5X9WZ&%imSh8=Toj>bu)C0ZC4&8n8{6Syg; z`L+o#vYH&_F%ipttviQWT!Pv@|Omno=$-8v5|FHfG0C=Z#~X&#b_7BNrzL4irqW zS{y9~D)i|Xa|5V<=$F3uZ0b|Z6dvDnuByY!re+3pa?P~JuXg$D-LlGUF8=ZMv2u3Q zIHa^t#b1L1sI;oqIqcQsag_?)b=$|Y#;J{hCqE{_Yv9>?U2Mr`fimCJ?!|^Q;1L(* zDklksfq_A~2uN}vYN+}1}g}tMQ4XJjtS?Xl`?CC|(o%s=< zicS`FAtO4yZ)CkqkqouY*=dRda9dpDKp7#RgvasB7Xb+z)G_su_A$#WyL5i66{0yf zT2nbWCJz#A4}B+OM*){x78Qxlb;6qOnU#xr2IL-0BzZ8sFY6&8nrwhSbyQHp9m{bvAn20SHncaY)x3IOB!cf+&z2D_ZHIEJ2?l?U~oGsef8-ykO_y#pMmP``2_ zkR#;LKL09pO)86cx?J<;C#JnoaY~HaPmF_;`rQ2gxE+ zhDwN_q`3cUQ=IyjGGCvDKQUPSLk0Q17lDCK{-n}3{dtD7p4cB{sXEFOs!q!1?t3mL zsb|S@Ixx2-2e*fzYwvO#BdDfRQ=R*41ca+lj|Jo0b}@ zsUKB0I59%kH-6_hEkYpy5Ram0(bniN)k66ZjQSo1Gl;AGSsRv{+ZV zO-b^EZm0aL=HeIQTE^OPvm?rC@r*~7SiviPcQgAcyXD+I9`0%yd~y8%~vwP@B6?DpBM1%>Iu(~!km+@TQkUUWR6oOfqP zO!`B%laB3%oGaE85oiWZ=?^7Eh{!PRrSap8uqGstwR#TXr&x(^Ppuc&~gL!ezlxqkbI(>f{+5wN@Vw zqehdzj?aWN_KNf*jT6C)rE?tAXiP$HMVvB=W&r_bfP$yCkLn~UQ@qO*CA0-^-!fRIfd zQjPt#&%d)?&6H0sMJTvc3_BW}`E|vm&}U_Yx6ECO9=@!eq=>=0v9LG`lW1zK+8=S3 zC3fs?&c3roV}QAig)UBN;JVvV_B<7$(sj=QxlUfIvAe{Tk#H-4`|{p3l|Lo3RX$oh zKdx&YPjjpMc&xjeNQk7$u}i#4=Y~T+-NSq*F@OEszC9zTIqpcKbF%!?R(NRa@`tQy zAp#gqSVB|^D#1Ft@1nhW{Kv$?&UuD#_YCzLZnd&`9+4NC2L=LvQAKL}%NeIhVP-7S zo|@`5?efZ_V!F9=-}psaVsRjgNVM?h?~)T@*ZqsH#4-6Z?q!i=STuzl%-xRKJ8hq@ zO80-Q$&$8eC-3qbMl)F!*l+p#t3ce`m3AoFQ06@@&UPezeIzNzoBgh=CgecKA&;g?CVL^ z@TYbW+u#E#3uw}+v5>>|rSrjV%Wi+R&3lLHxRMAMPBw`@yNXGRT1t7a_H!tL6LU?y zruun_f?1VZ4e3=)saubKmg%pWvw&GzX%|&Sot~YiI{s)P3s3WKgy=O=9Sw?GR4Q8? z5?VI1StCzYk%+qPe~dT_g>8wjN9#)FSUrdS*?w7nUXTX8&2oHdcx7bYpio)&Q^#hj zc_>+Da;nSQ6qLkdF=AhWyx@&`H45WEp0x4zzP?CqFZp`Xx*ly(d z4>I;82h4m+FvxILJnBVw7l&d0lMbz0pX>#Dbt@B@YNtQ zj|OhA&P7v8ztz=p`R78}S#qj`s=)lAnvycr{t41Rf(6=I8FH%51_Z4{xwOC>H$qwvNnmT1;Pz9pO^U*3y`1DM>lAF?Dj#w3JOvx}ZER^Oaj2Nx|q`!%? z^ZPsukx~v*4u70@h^Ojb=)d_g#i!+{PVg!hjdNkAR5*EN`)Of~z43d?0@l=xV($fx z3)nXx;7!D~&Qx<4kIdNwvDXtyGMT7ExYNEi^-i)sx;qEri$=ZhU37JS78E4NS`|(0 zJ%1@eG&)ImaB+t+7Q$`J*eWnqx&UF+G zeXnH|Ys**{%nC!*s@r>-$}`-!qi?a=kejt{Y=ra{5x+Q!_A2O$?INgEAH98SI#z)O zk1~heo|-s){57HGsVo-7QW9#z>C`rIX7Y3ps3rck;11K!)Ul{TKU&VtZ{m1GVp?o_ zPwRn>JoBht_|Z6YA6AoG?7?krqq!c>YDKR2-TfBrky)J_En7}x%P7s_BkjRZ8f*(l zgWVk3DO~4QhUk^tcM$sLNekmK>;V}*$|xHn$hZGse0YPX1Zu%=n{geF)6+`P)-T*R z%AUqXElR7G-^iCfESb)ICdm-T8@ZW5O_&wN)z1o?^4Yd|7HN9B=v1pPpZ08G&pf<6 zr@omL1~x`hHRo0i=hgw??&SdYA@AivwzQitZzh^+n1jJdW-%)=EY-q#QW*EFt$aV; zY4Z_7OHk$bDFt1)w`KL*_4u0g7M6TNiba~N(q#@>z~mZ+O9!S`umzuej0NAWDALV_ zAjctT0~xRS)7aJ6IRT0n;9vfn^2l2 zJA1&kIoHq2`KB?G%pQhayYgKzi_!3$T>K?H5*ka%q(aAP9zu}eO(dB?_@YAcrl$Ep zozv4WRq?7b&Gqr68^J6q%#75Zv;6Kk$Pyz>2R2M={?9&0&V_r50FhW#t(*q+;Xf4I^G$Q4oJ3mpyVCTKpvXUekf5lc?$DKs2E#dS$I#M#h4}6M~?Is$44XWgw#Np%JR6+UUf^g;6dSe zN4Ik|-9hf262x8Jx^ZpSbgR9e+DC7gDY4;2zWQJBr~2KQ7N-x2kX#ESFcx8C2HzJY zLHPg@x7`k99uK$Cc_JpuaKML+rHRyJM%97yWyvUHzFPMPr}EBauG=%Bn~$i19K+iR zAKCa^w9rgM2lYP=HtF{$v-6dB&C%y(40#obKqj^k9>{y}Upt|)aNd2PE^0fN-S$z$ z@`ZGL6Q{OM8D?ZAua)H)^3UoKS5oM+_qM&kIPp4{b|`p=O00ET>C(P`p$;XfU1!3K z=#+0T%Pme}PH|IW`%Au49mqe_&D`3$ECFpzn=+*rJpWc9WKe) z`3RgrbA~?d3o9IZCvC~jo!unA9z(J6w|<-*XnGi!H=T&aF?<9v=E!b_|3%7G4931< z;;~u%jD5Np&z37@#5+Rwg~B6jJq6vJ!_^SnT<7b_d>Q&X?8`$&>y)CQs+Qu|*x?_4 zi)wd>fgY4ybTmMm5qM7U%u}OAUYMFDC2w?ifn@0dHi`U}{?_19z$yt@B06R8w6#yn z8sUtHuIwy0i6$9a#%ot8CnH=L-}hIi0%%flPMhmT-imzhTpwY^l*hKiP7!&JE3DS& z_BVISXR=@nti9uyx)X{z{(2^~vf^8wvE4cT@jf%CRYxpIY$#Fc zlS{P{(T+p3^Uxm+bR~GkI(Ec2T$REy0T#++&Z$Z8 z*_P6$QRDaOUO7igK2rW>p9|FIOSi~n_tq(stV(~yZ{7hzv$r6e6a|txO4zx3)X#tv zwL{76y+d~x_GItb5BXbT4FTI2Ftm(X>*hlomLs?C1|K|8AMdxuWD#*PRrBjwTbwFt zcuctB$qO&~%zm^S?FBxxFeprIVfuyVu70zdG;|aG(p?EbHqOaFW5-c4H(Lr8%<6`1 z;S`IPcMZh5`uV)oB)hUohdCGx2f8SS-YPdOc}*k`ny38goHjy(Sb&c1+5$Jwa8m6W z1ws=k)FC%{zmGFW$d_a%{_cC|s%+gaNag{@d3 zaH5$ZhbOv0FlZ^MI7>IQ#^-Eiy+iKF!t@tniM-Xx-kUqqDkuBVZo5^*OV{#(Y^~=> zd?qhNApH_i$Kewz3A;;aj#ow$N-k^tXOC>Ff?3)RH@bB8?}eTW>s$0wI({2SmuY1u z6m=vq)bTxXX7`$W6<&y!wD zq($uwF~^ehs~UU7plJ(<1tCYhJ(K zyH=eQmt662J9{`;K}rT3Abbnu~w0^AE4CZ&b5b&9>r9-*SMv#QF&3AL&96!M=axRGs9ZxY;ed z;=|=QvM+)xyAVF2$x`UVVz*~F@o95}n=1qY1afwA9D1+l7qBcq07GpP(h5{Z05p*a z{{)4NA`%)iGjtMHV?4~2y%#snEP>K z`jS*J?|NL*N7T@aPFF;+)D!Kvz_@m&r1aWdA8b?_S0Lt#s^MH=2DCq}ZrgcpRHj|5 zI!MvKP#dD|k0oiWb2PI{<**9{&70EWZ+u=roeiPZ|YDY~B5wl7!) z>iECqKqru_y36Wh(o~f09%tko$~F8L(C&~kw-WfayIh@MY|J&>drj6x@5!xG?sDx8 zVa;I53TRJ?f!HEOyT@-yQc=wXB%txH4L=#5BOcDZ5Eo15whNa0CT_)5EtWANICe3@ z>hEcJGuqYBKPFE;fX%S?^zqyF)9A*O>(Q<{%u{^^?8`mgEXGK&8aX-P$Q15aH5>HI#_FA3_ zz|NK>3&_=#nach$mvR#Uvr@@x&k*PEc05m_@GE~U7!TH62Is|j`#~cRykdW4_{s1% zP2Q&(2u!`T9#j_Q6vueH zLNxPtif6tX-%KZL#^&?0Yvo8jRlPhcp_g%{lI{QvJC%vFfE7{3dpFt_<22D8F8#_> z>5Aaw=i|3m#wVXI+``)*H?Ohv9ZN_~_wBdx&En)coWP!KnJU}$EP)wj1mkx{$)Nj@ zDSiOmJ0~~TH&pBTuy*r;?VNgKIQI@S;6rS2CRj*d>#TXAvNVv9dMq$zFVGYM-L%qx zYt0rktj)y;%ouk1SJ&h{*fMkE3>d9MV{X|%Z=~|$pFdISiu=wvoL3ofkV-%N&u5km zGopwn0QwJGYgypc1pV+P8(*4mcsM|$ui&lQ?X4%kc>4+`d!+(KLBkVrP|diJNl}$Z z2azb+DD9qE480$6MDbMgm)Wt+2b#)Y_0JNMHy>b|E?zCQ9xs3I6G=2nwXs_3FBmKD zt9_NV`tZ6NcZ!7nhNuMauQ~6>2TW>n6_=|n8SnX8;Kx8o{bas1;LT}jSGlj|sh)pW z+kGlK@!B|PO~W=l{Ug_suuOE`YUbUE;G5AK1%fz&Ha$A(Btwl( zdV9^`_rX7LF>F^-^tCZJUBE@Tx8OOqa^Ug{)XS52G{T6;?I+ z!^3`kF#}CiS8;6Cfise-j=p;l#?AF$+_p^o&kb@Y`spBvP!59o3gm8-G=QM9O2B(9 zUqV8|`a>PuOug}oDki)iqf27Ox-~FJVCZX7Xa*`$IQbA5GT-Ou@zg{N1C3|Zh+^{f zT6%CnOSn39DnU9QL&59Sd@}2QiP!e5vVuLn{joV8S7txJYjlx|Z)^f_A)ss$Y$qqG z*1<&n|b8J zQ7o5NTxPSPNc>@LYhn0oDBmWf2{}>C5sh{s$P%B4+R=AGX<-t=Fk=7aAbyI2 z@{pp~=N~<(WRn|s1`v#o zr7XTAc%J)k`i(n0v+#16i z9fc1F>s`BORR$x~K*VvaepnkTLi{OF`Yl2J!O!BbsWb);zkze{yq#2basMZAH}3>_ctEek1NG(6V2$N97BJL>mp!=vflx`(_?Vk74u4z9j55^u4i4) z<7Y9TwRI21Zb!cvRf*rXAhBOdC@D}nF0Og7`Pjo5o***DJXwF zvi_rAG#6K8y%OZ;A209UdWH4UzG-bysFezs{Hym-z{(Z!*Z_6vSR#hp=?Er$aY#y(M=`SNJVo5aqDomLT(G+s$Ed~j&v}ZV%msTm7)e|;WQ@{ehV7rB_ zntT+2B#T7#CU$+ZbYBbRy{q^Pnvme2`+TW7x1idES(<(FvpDl?EP^=!rruef$xE=xbG5#Ckkka3F%W>rwNE_%t=|RA(FR2hmLc^XY-q z6oCQOZXjvAh5{kb110GwtoY#vY^~fTZzEqP;RYk%{Lx4f%W+uSzJA2VIeavmZ_F|% z{c`*ucvdIl>iV7o9nH{5()f}i;j_;Sf}adhW^?P3rtv{tA@_gdgW$G9s9UsvAGXD$ zZ1f=g#?Hft-y{r#)lwHl(0gSf$zq>0A2F2t4F@(p2~i+e+X!l*Vavrx_-FES|1jKk zU(C`ch(E1%7n~3O_GsHEH{&bmcLFx17c=v9DBq zGO-`E&bVT`LCMwTD`Nx%uMzDT(sF6kXVWyHc93WVX?@6XX3y|b9<#k zg_J_hgN%E5G(dOqsAlPJORa9isDcfhowU0=E1si3UJj#4Gk>r+6Q3k}J3|4!kz2jZ z8h6q6G5i`wk?q4OGdDD)LpyWSGFAw6mv-E^4tJ9T(z*kW= zwtWu$dFEHaefP!2a6Rn9GXy=0WH0pnxR({2Jn~jEwVEtb{uIY}LR9aY)A7AS+Q6%m z$(Wb&Iv+>AU_mlNOP?TzCaHaYcy0Kl3^d{rIo+Yb03H@#1fu>`svlvy=zN8&Xkmg; zQf<3v`35WJKuDa!TR}H3m8m4UWfPG<^#(d>^A8H-g&Hv+*XK%ENqGMyk!wAlI4=!BN>cSn#QY~dpkeemx+@5^T7$f|NsB4C# z^tNXXtzVQ5vR!hRIg^7g)`&$(2{IGK7P9ChO9^FCgGtgw-jD0}Xzolc0(mABCG`hP zVDsk{OwjkM$cw&-;d0y5`qo%-=#O-z!Zq@L`Bi5lrW*@p_QU@3{q3zIldEkC>_jJ z>Ao0VW%Jo3j+`PR^Z<(m));{Q z-S_}#Ni(~@dXp%SdoWY>ATLEi^x|#Chpcys;FZ>;x723ovr^&HY4`OU5FJ7J!F)qr zgP9WGZr$bW-+F&j!An`$hXV2XO6=|S$Ak$Ozfp+bUPCZm_@VGS-M%V!(BCFp8h|)` zGO>5>LU!4|hq9EF8twDS0s-v2v46qJb840LrCDPI7bODxOT(8KKHYkOj*(wf`>b4; zt#(be4;U?nC-=&waYvx&BBK_+&wnP*!#oIig5$(kF`YyjL#OnkVbmQMdH8eE~jM_4xJKZ4F? zb9AtA3Z5b$sjB0>H|;AFD49?Sl0L1FH$1GV-UO70>n$Pc;qFX@3jm;B0iT z+27lnm6$i0tD3EblhWbzuGHNYyDQHzs{BfHFJSOU`jv5k6ygAad)I!P1d+$bNK{B} z@?Q`NGXJQLqx7){%xZpycG2HI6YT>5!Kz8~9btdb30XrWF!DZ^rCs%?bH|daHU=Bc zHirD3`JNPw-|z{E09b?7O}(RByZQGu2jXD=DM`(1LvuK2{JNlCNk8%kLNW>sqsqa8 zoBtur%ZYj=?n3c`6`{cIqK_sCzGR~DZ=weJ5DEA)7M3(O+oFGiO@JQs;aNJWX=!+c zBSXXFx&i6`y#&NGi(0-Z0E@>rYDAj=a6dDMK<*Xu$tw3;T0ipK#psJuz78g6(0GCp zXbsCNf5Dzfqj5XmPY|;M{e%cDk!C)E`{jh{{`;-H~|jPZY$G0K z{8=mjs=u*7oO5ooc(_FRBdED$R2zBlT^^I;-O26soqw%TY4(iwq@$BI&U{$G8==3e zSlvg`hVL<0aT|-jW*NUTr+bPnRvHV`@|xXlmccQeSt&Xe1MC9LPMPY8ENd1Y)TJ4; zoHAlYJk3x@9O-(ZN9B_YOC!EX`;PwAl0TNCT9t&ok@cUzo3;-;l&odS&}IJt3+dAT zA{c}Qo#lXy!Vq65v3CjPk>;|X>cw>?fF-M772dVU>Xy+ADXQRHljpb;+115$jM|xL zm{}ja-$rXaX!}g26ac+*Vs4`7$^677uhFNSV#gn8_;No^4+>_!^bvec6hv5skfFpD z`%VEPgnn4uCpjOonzws~Kyk$@<1)Mj&9TXj+K+dE$Uzr z18;CYaga_X&1_f+-%bxEFxLYU6LQnuSn)mIk9&~%rL9eK1z&fot8RyYXBpw-;>Yc&ritdkefO*EFA?%VKS+0i(I=6=0kDGa*V_8DQ&!{SuMA#xQa;q$uF+_X$c+<&LYiC$4S z2LT&Jeri5>{sNiA(V(=2vB4uDkRxp;;^Dezz&GZnuy$%8<=jEtEO58H)AkJ;CvCn& zHqLu9BcL1KGEX(s?BGFt!u=N1FE+!j<))E**&Ji_JAxw|G;GxHtys-Fy$_QI46Fkh zo;EvfezqPPpwA0=vYe6<$w%B7`^GYA=2()mcmp9o2(L;##qId}rNlRJ`ff9Ho+$UH zX|(ADRJ(BwIdwlsAF$6qAT$}-{nhvJD~W!BKngMdkK^@bAi!C2o`tWAUJ!kV*7R2a2bB<}^qEzxy}0Gms&53rLK z%2=}Oy+oZ$ylV0fC(OkcD`*B5YzI92z_$_8liX{Zp^uGf;F*z~F9l9a?^bSAsHI=Z zqp%<-w4`tKAb@`;SVBnP$Cv9l0sPO+=Y)nqPD&p75b(#V3SEDhy``olfAIBI1cbX& zkP|a|P!4lX8Qw{z-nDXs*lBNDg_aAu3l?A&B zeo(-)d-TX9@Ut|DV-$hizZvW4&U?Q98cFvAG13>CYAD_nK66~%9=6!va>47_oD{r) z%2%FIAZ@+Es|G)oCGNf3qgxYKPxl;pPnCktX9hnS_v7X)JpJKj*+2Y$CNLs6s(^uW z9eLL{gnYiO`mU#p?im;!y1lQQ%pfohL`wO82SP_*-Vdu7XvX=4s~FAlz$;+j4cc+z zY7wqyX+g;-kYV+_v!p2CsFD!yACM;Ui?p--Wcu@1tnV&uE|(?28DCE`=^5Y%wDI@F zp+Yi6xgSdC|2I5jq_cr+*1cLn0u6C!kW78*T_bS)t4uwt%SdN(GmbAkbOeUKy%t|u zk2j6|Z!pLRQCW~nTX?1$65ZooLPkgG{eUh+@Fi2C?W`+6CQwCVHArAQ`rm{9=27K* zBLDl^(Agr{JDO*Ei$j7I7d)X%bfK4O{!}4bIGm#A>@9q>S1ByA@ScKmy5F2}f%oWh z6nKA6-ZM_{aV2F0O=usgmhuEVrquEDe&6RxxvDa+0GLe*9-AVm?(dQUKBdFYGAp66 zuB^n347w}?ltTOl5UO}{rSk03N5bICk48iZ`Sj=$huy-Mb*mJ$$^%!_3JH<_6o|3= zz!muYhQNV6kY;u^R#(y!q;J73>v`utJLdBU#uj?8U?q3E(mp5<+B|aK2Pa4FTA<*Z zc}VXA=dRb+tf$a?9OqQ|%{C9gZN556uwnQ4m6G#&i3Si4Usk71``Y{T0aO>f{NllL zZxPn&b$#%7I{9~NKAD-{WY-4tUXUxO)dKP@Tj)77+-xQ?TL3gfrh|P8Mi=2jFd6*k z50M`__(5<$f$toI0rDRB&;Nh&|LY*24e_2jj&^K+A~N)ToIiAP2E&f9zF9q`Eq#+k zsv70S+pD_hvUJaD03TQTv4w?{D+$cKot>ReH(i7r*6V8USpYK9=hkqP^wzVf`d=WW zPP1MIQYs7lj(W+@unOuP-n8{XQjdS1|922N*WhH4WFOBbMD;mkKvAB*ixs{a$sC6G zZ!K3zXU4{2nR@OvkC%?Z;oa%c3|-K%&|DybcBb^xTp@!)QPobZnh9sr;xq42A$)v% zA%5XST8%-}FTpuMVe(qqxe(S^4O(N za-ZuH`UVT!gkY$5zB?i1(}zZPc1URG{qwBR=X%+nR}X$JDMu`3uEj-Tl(f?1*hoGq zf1=k?>SUo%rTBl%4zn@F@IHEGUf-2?9~(^zK6dCTeHXd>Z$%D%DwnLt&dtrOC!^q4 za>SB{ZzA6yGZf=cYaskHz zWHzq_{4CP%o13sPMn8taxR!reOT|Xz@$tCD14LAOw_ z!UCoo?Iawi>*`~+S>$)PEs1Y!}j!%EUM?zM78?=pZ!|3HRYP%zua5zZGS(OFaQ7cnDpHiPT`>c zz~dc(_5Q^Trz1Dp-G8y&|J}=%l{Rn9m&Q#j-22riILq5%WyZ{xFBaR&sG5P4mgU~r zaj~}U+L|<{GtZ?s4cA>%cwBYZ=apaDqC|^XZz>er~KD7CBGW~$En6aRk0VZPGvxXPu!pQzhky;2C$b>coSrQUryJ@%T1 zWBuM`PCciUPVBg6uz2CjcC%l`ein&cv+FrD>bJ^>!Yq z{jxay(nC;+)R^$<#??95S679ey>j46aO~eHZrs0rPtKgsxpm8ynCEkTdxhEi>(2gP z_v`-d$9>lG0zei#ad?>e_i_L3tEIuENCHdnE!A(g zUXLj+-(LM`yZ^5H_TPWIseM?!aj95>(aQFh{_7mou3fsc=+pw&o&S}9dKglpgKv9% ztC@E^&|^a3Ufo&iPcIS#i8H)^vX3ix{lk<0GFR>ZmRadtQR^(98?BZBHA4b+y}nwp zV}-!uu9%58pNqf0mseJI?JQWEh}+RW_fJ$yN7j3B8?7sUcV_2ShvJM(c91rO-b+kA zYpy74zTWsI?|O}%sR>Z9VS0$%qP5BQwT%xP*~4kHG3s>M+6y&3p`gNXK}dAg#1#YxBxM=Ht|1A;ss!}%P)zw#-B00;h{PSG|ZpU6Q zIa^z~=iB=_`E9+biE1Z!mMmTBx=@YJvMA!MJjmX=yRsZzMM4(UhdG_Ln^XK>{<+4w nlPk7off}oPsS%!OzP=1vKsKoT2m+UaCxa+YS3j3^P6= 0) { - myself.update({ 'system.combat': combat } ) + myself.update({ 'system.combat': combat }) let chatData = { user: game.user.id, rollMode: game.settings.get("core", "rollMode"), @@ -959,7 +959,7 @@ export class PegasusActor extends Actor { async equipGear(equipmentId) { let item = this.items.find(item => item.id == equipmentId); if (item && item.system) { - let update = { _id: item.id, "data.equipped": !item.system.equipped }; + let update = { _id: item.id, "system.equipped": !item.system.equipped }; await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity } } @@ -1154,7 +1154,7 @@ export class PegasusActor extends Actor { async updatePerkUsed(itemId, index, checked) { let item = this.items.get(itemId) if (item && index) { - let key = "data.used" + index + let key = "system.used" + index await this.updateEmbeddedDocuments('Item', [{ _id: itemId, [`${key}`]: checked }]) item = this.items.get(itemId) // Refresh if (item.system.nbuse == "next1action" && item.system.used1) { @@ -1346,10 +1346,10 @@ export class PegasusActor extends Actor { getTraumaState() { this.traumaState = "none" if (this.type == "character") { - if ( this.system.secondary.delirium.status == "trauma") { + if (this.system.secondary.delirium.status == "trauma") { this.traumaState = "trauma" } - if ( this.system.secondary.delirium.status == "severetrauma") { + if (this.system.secondary.delirium.status == "severetrauma" || this.system.secondary.delirium.status == "defeated") { this.traumaState = "severetrauma" } } @@ -1540,7 +1540,7 @@ export class PegasusActor extends Actor { if (this.system.secondary.health.status == "wounded") { hindrance += 1 } - if (this.system.secondary.health.status == "severelywounded") { + if (this.system.secondary.health.status == "severlywounded" || this.system.secondary.health.status == "defeated") { hindrance += 3 } } @@ -1555,7 +1555,7 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ getArmorResistanceBonus() { - let bonus = 0 + let bonus = 0 for (let a of armors) { bonus += Number(a.system.resistance) } @@ -1567,43 +1567,52 @@ export class PegasusActor extends Actor { return } let updates = [] - + let role = this.getRole() // Get the role for optionnal bonuses + let roleBonus = 0 + /* Get MDL bonus */ let meleeBonus = 0 let effects = this.items.filter(effect => effect.type == "effect" && effect.system.affectstatus && effect.system.affectstatus == "mdl" && (Number(effect.system.effectlevel) > 0)) - for(let e of effects) { + for (let e of effects) { meleeBonus += Number(e.system.effectlevel) } - let weaponsMelee = this.items.filter( it => it.type == "weapon" && it.system.damagestatistic.toLowerCase() == "str") + let weaponsMelee = this.items.filter(it => it.type == "weapon" && it.system.damagestatistic.toLowerCase() == "str") for (let w of weaponsMelee) { let damage = Number(w.system.damage) + this.system.biodata.sizenum + this.system.biodata.sizebonus + this.system.statistics.str.value + this.system.statistics.str.bonuseffect + meleeBonus - if (damage != w.system.mdl ) { + if (damage != w.system.mdl) { updates.push({ _id: w.id, "system.mdl": damage }) } } let rangedBonus = 0 effects = this.items.filter(effect => effect.type == "effect" && effect.system.affectstatus && effect.system.affectstatus == "rdl" && (Number(effect.system.effectlevel) > 0)) - for(let e of effects) { + for (let e of effects) { rangedBonus += Number(e.system.effectlevel) } - let weaponsRanged = this.items.filter( it => it.type == "weapon" && it.system.statistic.toLowerCase() == "agi") + if (role?.name?.toLowerCase() == "ranged") { // Add ranged bonus to ADRL + roleBonus = this.getRoleLevel() + } + let weaponsRanged = this.items.filter(it => it.type == "weapon" && it.system.damagestatistic.toLowerCase() == "pre") for (let w of weaponsRanged) { - let damage = Number(w.system.damage) + rangedBonus - if (damage != w.system.rdl ) { + let damage = roleBonus + Number(w.system.damage) + rangedBonus + if (damage != w.system.rdl) { updates.push({ _id: w.id, "system.rdl": damage }) } } let armorBonus = 0 effects = this.items.filter(effect => effect.type == "effect" && effect.system.affectstatus && effect.system.affectstatus == " adrl" && (Number(effect.system.effectlevel) > 0)) - for(let e of effects) { + for (let e of effects) { armorBonus += Number(e.system.effectlevel) } - let armors = this.items.filter( it => it.type == "armor") + roleBonus = 0 + if (role?.name?.toLowerCase() == "defender") { // Add defender bonus to ADRL + roleBonus = this.getRoleLevel() + } + let armors = this.items.filter(it => it.type == "armor") for (let a of armors) { - let adrl = this.system.statistics.phy.value + this.system.statistics.phy.bonuseffect + this.system.biodata.sizenum + this.system.biodata.sizebonus + a.system.resistance + armorBonus - if (adrl != a.system.adrl ) { + let adrl = roleBonus + this.system.statistics.phy.value + this.system.statistics.phy.bonuseffect + this.system.biodata.sizenum + this.system.biodata.sizebonus + a.system.resistance + armorBonus + if (adrl != a.system.adrl) { updates.push({ _id: a.id, "system.adrl": adrl }) } } @@ -1693,7 +1702,7 @@ export class PegasusActor extends Actor { async modStat(key, inc = 1) { let stat = duplicate(this.system.statistics[key]) stat.mod += parseInt(inc) - await this.update({ [`data.statistics.${key}`]: stat }) + await this.update({ [`system.statistics.${key}`]: stat }) } /* -------------------------------------------- */ @@ -1701,7 +1710,7 @@ export class PegasusActor extends Actor { key = key.toLowerCase() let stat = duplicate(this.system.statistics[key]) stat.value += parseInt(inc) - await this.update({ [`data.statistics.${key}`]: stat }) + await this.update({ [`system.statistics.${key}`]: stat }) } /* -------------------------------------------- */ @@ -1709,11 +1718,11 @@ export class PegasusActor extends Actor { if (key == "nrg") { let nrg = duplicate(this.system.nrg) nrg.mod += parseInt(inc) - await this.update({ [`data.nrg`]: nrg }) + await this.update({ [`system.nrg`]: nrg }) } else { let status = duplicate(this.system.secondary[key]) status.bonus += parseInt(inc) - await this.update({ [`data.secondary.${key}`]: status }) + await this.update({ [`system.secondary.${key}`]: status }) } } @@ -1752,7 +1761,7 @@ export class PegasusActor extends Actor { if (objetQ) { let newQ = objetQ.system.quantity + incDec if (newQ >= 0) { - const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity + await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity } } } @@ -1774,14 +1783,14 @@ export class PegasusActor extends Actor { ability.system = ability.data } if (ability.system.affectedstat != "notapplicable") { - if ( ability.system.affectedstat == "mr") { + if (ability.system.affectedstat == "mr") { let stat = duplicate(this.system.mr) stat.mod += Number(ability.system.statmodifier) - updates[`system.mr`] = stat + updates[`system.mr`] = stat } else { let stat = duplicate(this.system.statistics[ability.system.affectedstat]) stat.mod += Number(ability.system.statmodifier) - updates[`system.statistics.${ability.system.affectedstat}`] = stat + updates[`system.statistics.${ability.system.affectedstat}`] = stat } } // manage status bonus @@ -1881,7 +1890,7 @@ export class PegasusActor extends Actor { getIncreaseStatValue(updates, statKey) { let stat = duplicate(this.system.statistics[statKey]) stat.value += 1; - updates[`data.statistics.${statKey}`] = stat + updates[`system.statistics.${statKey}`] = stat } /* -------------------------------------------- */ @@ -1906,6 +1915,48 @@ export class PegasusActor extends Actor { } + /* -------------------------------------------- */ + computeCurrentHindrances() { + let hindrancesDices = 0 + if (this.type == "character") { + + if (this.system.combat.stunlevel > 0) { + hindrancesDices += 2 + } + hindrancesDices += this.system.combat.hindrancedice + let overCapacity = Math.floor(this.encCurrent / this.getEncumbranceCapacity()) + if (overCapacity > 0) { + hindrancesDices += overCapacity + } + let effects = this.items.filter(item => item.type == 'effect') + for (let effect of effects) { + if (effect.system.hindrance) { + hindrancesDices += effect.system.effectlevel + } + } + } + if (this.type == "vehicle") { + if (this.system.stun.value > 0) { + hindrancesDices += 2 + } + if (this.isVehicleCrawling()) { + hindrancesDices += 3 + } + if (this.isVehicleSlow()) { + hindrancesDices += 1 + } + if (this.isVehicleAverage()) { + hindrancesDices += 1 + } + if (this.isVehicleFast()) { + hindrancesDices += 3 + } + if (this.isVehicleExFast()) { + hindrancesDices += 5 + } + } + return hindrancesDices + } /* -------------------------------------------- */ addHindrancesList(effectsList) { @@ -1957,7 +2008,7 @@ export class PegasusActor extends Actor { /* ROLL SECTION /* -------------------------------------------- */ pushEffect(rollData, effect) { - if ( (this.getTraumaState() == "none" && !this.checkNoBonusDice()) || !effect.system.bonusdice) { + if ((this.getTraumaState() == "none" && !this.checkNoBonusDice()) || !effect.system.bonusdice) { rollData.effectsList.push({ label: effect.name, type: "effect", applied: false, effect: effect, value: effect.system.effectlevel }) } } @@ -1993,7 +2044,7 @@ export class PegasusActor extends Actor { rollData.effectsList.push({ label: "Ranged Role Bonus", type: "effect", applied: true, isdynamic: true, value: this.getRoleLevel() }) rollData.dicePool = rollData.dicePool.concat(PegasusUtility.buildDicePool("effect-bonus-dice", this.getRoleLevel(), 0, "Ranged Role Bonus")) } - if (role && role.name.toLowerCase() == "defender" && subKey == "defence") { + if (role && role.name.toLowerCase() == "defender" && (subKey == "defence" || subKey == "dmg-res")) { rollData.effectsList.push({ label: "Defender Role Bonus", type: "effect", applied: true, isdynamic: true, value: this.getRoleLevel() }) rollData.dicePool = rollData.dicePool.concat(PegasusUtility.buildDicePool("effect-bonus-dice", this.getRoleLevel(), 0, "Defender Role Bonus")) } @@ -2177,7 +2228,9 @@ export class PegasusActor extends Actor { }) } } - } + } + + rollData.hindranceDices = this.computeCurrentHindrances() this.processSizeBonus(rollData) this.addEffects(rollData, isInit, isPower, subKey == "power-dmg") diff --git a/modules/pegasus-utility.js b/modules/pegasus-utility.js index 81b964e..04923d8 100644 --- a/modules/pegasus-utility.js +++ b/modules/pegasus-utility.js @@ -72,9 +72,22 @@ export class PegasusUtility { }) Handlebars.registerHelper('getStatusConfig', function (a) { let key = a + "Status" - console.log("TABE", key, game.system.pegasus.config[key] ) + //console.log("TABE", key, game.system.pegasus.config[key] ) return game.system.pegasus.config[key] }) + Handlebars.registerHelper('valueAtIndex', function (arr, idx) { + return arr[idx]; + }) + Handlebars.registerHelper('for', function (from, to, incr, block) { + let accum = ''; + for (let i = from; i <= to; i += incr) + accum += block.fn(i); + return accum; + }) + Handlebars.registerHelper('isGM', function () { + return game.user.isGM + }) + } @@ -136,10 +149,10 @@ export class PegasusUtility { let diceKey = PegasusUtility.getDiceFromLevel(level) let diceList = diceKey.split(" ") for (let myDice of diceList) { - myDice = myDice.trim() + let myDiceTrim = myDice.trim() let newDice = { - name: name, key: myDice, level: PegasusUtility.getLevelFromDice(myDice), mod: mod, effect: effectName, - img: `systems/fvtt-pegasus-rpg/images/dice/${myDice}.webp` + name: name, key: myDiceTrim, level: PegasusUtility.getLevelFromDice(myDiceTrim), mod: mod, effect: effectName, + img: `systems/fvtt-pegasus-rpg/images/dice/${myDiceTrim}.webp` } dicePool.push(newDice) mod = 0 // Only first dice has modifier @@ -151,10 +164,10 @@ export class PegasusUtility { static updateEffectsBonusDice(rollData) { let newDicePool = rollData.dicePool.filter(dice => dice.name != "effect-bonus-dice") for (let effect of rollData.effectsList) { - if (effect && effect.applied && effect.type == "effect" && !effect.effect?.system?.hindrance && effect.effect && effect.effect.system.bonusdice) { + if (effect?.applied && effect.type == "effect" && !effect.effect?.system?.hindrance && effect.effect && effect.effect.system.bonusdice) { newDicePool = newDicePool.concat(this.buildDicePool("effect-bonus-dice", effect.effect.system.effectlevel, 0, effect.effect.name)) } - if (effect && effect.applied && effect.type == "effect" && effect.value && effect.isdynamic && !effect.effect?.system?.hindrance) { + if (effect?.applied && effect.type == "effect" && effect.value && effect.isdynamic && !effect.effect?.system?.hindrance) { newDicePool = newDicePool.concat(this.buildDicePool("effect-bonus-dice", effect.value, 0, effect.name)) } } @@ -165,7 +178,7 @@ export class PegasusUtility { static updateHindranceBonusDice(rollData) { let newDicePool = rollData.dicePool.filter(dice => dice.name != "effect-hindrance") for (let hindrance of rollData.effectsList) { - if (hindrance && hindrance.applied && (hindrance.type == "hindrance" || (hindrance.type == "effect" && hindrance.effect?.system?.hindrance))) { + if (hindrance?.applied && (hindrance.type == "hindrance" || (hindrance.type == "effect" && hindrance.effect?.system?.hindrance))) { console.log("Adding Hindrance 1", hindrance, newDicePool) newDicePool = newDicePool.concat(this.buildDicePool("effect-hindrance", (hindrance.value) ? hindrance.value : hindrance.effect.system.effectlevel, 0, hindrance.name)) console.log("Adding Hindrance 2", newDicePool) @@ -826,9 +839,19 @@ export class PegasusUtility { let myRoll = rollData.roll if (!myRoll || rollData.rerollHero || rollData.rerollMomentum) { // New rolls only of no rerolls myRoll = new Roll(diceFormula).roll({ async: false }) - await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) rollData.roll = myRoll } + if ( rollData.hindranceDices > 0) { + rollData.hindranceRoll = new Roll(rollData.hindranceDices + "d6").roll({ async: false }) + this.showDiceSoNice(rollData.hindranceRoll, game.settings.get("core", "rollMode")) + for (let res of rollData.hindranceRoll.terms[0].results) { + if (res.result == 6) { + rollData.hindranceFailure = true + } + } + } + await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) + // Final score and keep data rollData.finalScore = myRoll.total @@ -1048,7 +1071,7 @@ export class PegasusUtility { } //rollData.attackerId = this.id console.log("Target/DEFENDER", defenderActor) - defenderActor.addHindrancesList(rollData.effectsList) + //defenderActor.addHindrancesList(rollData.effectsList) /* No more used */ } } diff --git a/system.json b/system.json index 0e1fcaa..835cfe5 100644 --- a/system.json +++ b/system.json @@ -252,7 +252,7 @@ ], "title": "Pegasus RPG", "url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg", - "version": "11.0.3", - "download": "https://www.uberwald.me/gitea/uberwald/fvtt-pegasus-rpg/archive/fvtt-pegasus-rpg-v11.0.3.zip", + "version": "11.0.4", + "download": "https://www.uberwald.me/gitea/uberwald/fvtt-pegasus-rpg/archive/fvtt-pegasus-rpg-v11.0.4.zip", "background": "systems/fvtt-pegasus-rpg/images/ui/pegasus_welcome_page.webp" } \ No newline at end of file diff --git a/templates/chat-generic-result.html b/templates/chat-generic-result.html index 8f9c1d0..f26db6b 100644 --- a/templates/chat-generic-result.html +++ b/templates/chat-generic-result.html @@ -56,13 +56,13 @@
  • Power Damage type : {{power.system.powerdamagetype}} {{power.system.powerdamagetypelevel}}
  • {{/if}} - {{#if isResistance}} -
  • Defense Result : {{finalScore}} + {{#if hindranceFailure}} +
  • Failed due to Hindrance Dice(s) !! {{else}} - {{#if isDamage}} -
  • Damages : {{finalScore}} + {{#if isResistance}} +
  • Defense Result : {{finalScore}} {{else}} -
  • Final Result : {{finalScore}} +
  • Final Result : {{finalScore}} {{/if}} {{/if}} diff --git a/templates/item-armor-sheet.html b/templates/item-armor-sheet.html index e9dfa3d..997577f 100644 --- a/templates/item-armor-sheet.html +++ b/templates/item-armor-sheet.html @@ -26,7 +26,7 @@
  • -
  • +