From 30ef811bbfe31cf748cbd49a229abb7b7d73e05f Mon Sep 17 00:00:00 2001 From: sladecraven Date: Sun, 14 Aug 2022 15:27:54 +0200 Subject: [PATCH] Various changes + updates --- images/icons/icon_vice.webp | Bin 0 -> 31380 bytes images/icons/icon_virtue.webp | Bin 0 -> 31156 bytes lang/en.json | 24 +++++- modules/pegasus-actor-sheet.js | 13 +-- modules/pegasus-actor.js | 127 +++++++++++++++++++++++++--- modules/pegasus-item.js | 2 + modules/pegasus-roll-dialog.js | 5 +- modules/pegasus-utility.js | 61 +++++++++++-- styles/simple.css | 8 +- system.json | 4 +- template.json | 10 +++ templates/actor-sheet.html | 22 +++-- templates/chat-generic-result.html | 10 ++- templates/chat-perk-activated.html | 5 ++ templates/chat-perk-ready.html | 5 ++ templates/chat-roll-button.html | 5 ++ templates/item-effect-sheet.html | 24 ++++++ templates/item-perk-sheet.html | 7 ++ templates/partial-actor-status.html | 4 +- templates/roll-dialog-generic.html | 23 +++-- 20 files changed, 302 insertions(+), 57 deletions(-) create mode 100644 images/icons/icon_vice.webp create mode 100644 images/icons/icon_virtue.webp create mode 100644 templates/chat-roll-button.html diff --git a/images/icons/icon_vice.webp b/images/icons/icon_vice.webp new file mode 100644 index 0000000000000000000000000000000000000000..c16b213eb778cdcbff60826cae85806e256a87f7 GIT binary patch literal 31380 zcmV)DK*7IKNk&GDdH?`dMM6+kP&il$0000K0000h0st!l06|PpNahXz00A5YZQDp` z__N;bKL8Oi0RWL|KI=w4?#}FVzL;C3I+bQf2l>A_k@pILh+w&w<^Kqn+CAfdr65*Q zie;({%m`K@*jmo+npCrgSnj0=q6|VBVJ{)Lr&CR)6`6y*H~3cXn>TX=^8Ft~#01z{ z{{N98>sQrSI%Uz+l{A}^xS<<12ff_9tIP)Pd(&}~8yrL;$A;4bvcWf?x3fXqWSGzw z4I56{APN%%X&M<}Q-MX(2sK6Xdja(izwcc{On?+;``pI+Wx)1g9^~9$i~nVtkFXW@ z1H=m6g1S+dB}ZmCMI^I8(=p#z+7`6E5B6`Q%=~^RA|`5lA| zj^jA<{r$P)IL=FZ)a^XjZq|)bK~q!ls4l7I^@jCiGC!uL`glHhVm0)@L^Ls_Y)w6S;d)c6ti+-f>3X%lq!;+IU%f6xBa&7dexV`o%dn!KE?|c%n772Mj1GE z%S&FBQNAXgwHiIhl!0cipOC2PX6n|zR{kdp= zUGoWxX)@nsdH3$HsP5crbKU<+Sy%Kwxbr%1+Z%qEb8G!%x4au)F1na&L`E>?i-8Ud_i($Cs8IQNlKwS3>C%4K_T+JDc zv&>*zc1-3YhT}&DGtGdUHkLOTl5ZNy3mr^!UNDluV+Q5%pn(iT49jT1I0{V$X0u=z z!8Sv4J1~me27_}WXA(;c&n1HxV}Ons!{aGJ(#H+q&Lf8C(Va#R?lDOBLIZF&8K#@A z{;CYrs`f@1s-v1Kwz1MKYAwIdVBODa%=wDp`jw-v2?p$hwuVx~q(hqOJ7mZn_G!tf zF=%U!j;0v4QyO|G#ZCHUo<L&X{OBJEoAkQnWm>?-BD$f0xq5QL} zws8jYxYDj`p{aG9%GMapYYH1?Ko2Xc_W)4`y{cMdNG~d?KfzSeucosM>a$83VOWnS zsHcIeMvr=C8Q8PRDYTK*E~sXOp}nG*QU_a|l3HpE?wV4bVR%2I5ceX!F1qR{Gr-Hr z@R|r~da8JjA^x5sg5NRrd!U9n2Kk&4!Wd<7sDcW^yrO_G##tO@ufjmDWG;-67Kd3| zV5l!-EQqic1=(sSVsB_Q)T6fEkWPDw-1jsRlHR1yXH^mWsyuTdElJ|6J(_CAV z>L<;8R`oblM1QKqXrJo(qdFWYvOmxvqq|H4PZ7R{FQL2yo%2e0uMW0Ak$!+p(w;=N zpoo6~S4@2|s+?Vu3SQLLLwz5d{w@ z1P)&@K_5rN1tJvUh6~&X3~Lky*G|J-9JqT5Vh1>I5DV@W1;SgwHIbkh+(#t%7}y^a z3jYXd6ALzj+Qow1fRaD4;Ab+Jbqa>-!R(;HPB1PSxPd4X4wWD_@L(f|9v<`pkWTR6 zL=vY_K-9$55TPb+hzLVr(icSdB8j?AA@RDXDkfA#^)aC@D7M6eWlW4hK~WJ?MuoB% z3l%IeQ&gA=NqDH>B}8N?EM`S);lh@PHZHV9%y3~QK=yFKll^5VFlPMe$e{Z(k-_w5 zBZKX4feZ^@mnbw|@{_}coF4-l3_m6|n106CF!tkOgX=?HVZ%!1OH*)6^A*vd$X7v! z3SSEyT6_a^81TJAhj)BO=y1f9r0|&JQSm|L$>T$wN5==9r-2U*9t$5Vo+tS5glB>e z6P`If%z2LS;g};%0W!`?Aw-I$B81A)5JF=W5Td{;Aw-E~AcVoHBSf9mM2IG98zHt? z4-n!3tAh|7Ru>_9|5CiIEmDkfA# zUB`s$qNFc~@I?|uhKMjE!fS|76Q?19CQdrRgA+*{>ES_-1h|0*8$l>|pael&G;m3v zEpE^%XOkOjmNWUm3qB^xfetU|K*@DpP%o>-3u)V zxE#R611bHbfOwn!wlR%8Qs3hkCWxso2Gk4Gw}1;I?MXl$&|ZMed8NEp2OA`mmjHT? z@;rQy(Om`_9?;$ESs3k8U34M~a7uNjDU;Ptn!9#=HlR&&XDFi{%{`PA=u+IjDYL5- zcQQLd(%WS>JFrJ@uTqAGdenB+%MvuG?G$BtqK~yG$QGPnZGkfG#7K+7tU(2770P@V z<17xdM-`k^NP%IDvN%)$&7o|LloW{)blqy+jv-`>%y9`HOJtC_4RmbeOoD=KY-|T)mW3uV zngue=fe07T0Ga3DF)EG+$wXi1V50K^ndzIDc#}+Z8WGcEt{>syBQjWL84b&h$xv<; z3#&OYTW=i+>mHe|cNPa{Ju+Xvj)J;RChXTSQ1{7<{eL6i-#(eLUzfkSPv-2`rLXRj zN&9DI@2pQ|?X64Rx<{t%t;*f1N9LVdmb&E}nYiv*rMqe_>n7whLr~!G?@&1Z0P~B?()~ku{E`(v^;pO+J1k zTSt$RUEaATS$lVqZHAk2wHcCqx>c#Fx@4uJZHa1+lC2i^`bK+lukKh$qzN;r|}TkbN(~w`7BRXU2aKEt4y|i z%lC5g{VinQ?qnh}$)rnGUfPwI-4fY)cQuukwAxJ;fA5a0?A%Ls-!-4eNiyF>)?fTt zN`5Yq1iIrb32BYHB!t(k$;aAtB#6TYvT-m>ve>(r$VIZ)OXApnRw~Z+lSqy!N8sU`=t5((%t7iHk$GbE#KxoLmRvP)v>z4yD_{r;Xu zq8iM__7=|tB(7m4wzIerlE{XY*uLUQNMaixpFY`S}x4{rIP3-)~`EC#V6oB>NO{OBfJ-9)|sn=jVx z9)zXq=CT0$AG_837=Gl%zY37yADg>B!^=mfUIS`OuJ5>E#BFU(0#Pa(y^}C;(%Vo7 zZAw~g_$3T{8P+t3M55C5YJYi=E&J8$5{Xn}O4*uv7mqi!%1Vqxvx)3hd*)pf-mJZq zO^~Qp&giDSINuhwsb^#oAz#WF=Ga}GH!F8+8o5g(qL$OeN^9`$=!A3qK~Iktxz)R&Fu%B?#O=WIF7TozrW`=j`PwUbvqBX zn{}g9(9~3%{O?*;P&gpKGXMba1p%D_Dl7sl0zQdEol2!6qM@R3dQhMd2~FRL!T-S! zqa6$4^*}yW@z4%yU$vi`{@eRm`~T(Pdb@x1|JfhzAF&@lHSg-bgTEzyUw^ys2ef?Z zJfrmw_dnx*$$rHA@c!rjFW6`4@A==K|3F`+Kj;6se|-Ir`osSl)K~7Gs6Xnz;(zo1 zX8r&9od0$IBmKv{zw!U=zgU06e1Lyh|2hBb*I(Gb{I~wkU|;8-;lJs6<$lNi*!evE znf|Nxzu;&2_xOMQ-@5+*AN)N)KkfQ}dbj$I`Csw>iJzfANdBMGJFtfBe%aG|xf3O#|W9_nMV)@Ttii>;27D4W!;%IPK5e{M3L85LVz5rY7FuL@*M zt*}w-4Y$)wFlj-O(z*ZM`Oqv1aeoa6ahT=;m6a(G4mPZN8loHb%Ly zScbwvzw47CT?Pt0dRrb`74+w)UHkq9+fLc_A!$y9KF2wen9f}jQq6+9Db4m;d~Ddb zJ^vQWfOiK^2hG_q#2*Or27xGxl#0M=SJQr~n^@;jc<0fl2raNt>#<#sG{Vt#ya6k3 zr%n}E)vD#*aa5gnDi41q_-WKm$M43Y({Z_~_0I zv5PWy1=>uP#sI%Yir9$yq;L-w-i<&$neXZsFKo_#8}U<@DS`^=)xwu0-xV=6Z2fKo zvW6$d$>kUI%;s`h^}RQ%U;m4>Uz&;kq8)SUfBWY{eASp-KGYOj<7jo^{q2$wMnyP) zD9UhKEUn(RL*;u>tOP#pDU<)Z+}H>ARvD4EC_S0_H!h=;9 zwWNrh3Vo3bETu_$UNFPM_&f8tKsW80`bbW4<}G}Pr~MT1_DU#9FXYR(#dzXIc2Gqk z)a+8;_a@}n66Sw!gUHEp^JxTC3sCA72P@oYKU7EI@xj6kV76KgYC)zq#ynTw-dDA} z{JfRLstum0K*sRceN1NmoBtiXGo_UdQ#U)3^gxj%NG4X6xZPTx3p)2qcBrB0SqPFD zyb7vrjkxJG=?mAl(KvSzN1Yi#t}+8D)h)hgB|6$3OQr9{1~BgbYxakTF@m~j86~=) zlv9$|?*0MHRh3zEE@i|ITf3tr+d`y#N|0lXW{Se37WU|>9b4yU%1fGSUMjp&2h_tT zTClh4$;kHAg#vqcp`mts=EnLx_)nWSlu*}wsBkf>bVbF)?d3~11qAQeGVFLt}LhrsTSLCbIT{JXrT=7xNg zvs###N!E0xr$~sBBF!q=-j{L;IyhK&YExb`AW)M!%lg3(CvPuB!K>UA6>VTNWWxn& zi@?jWZvFUt$1ZQ?U)=VF*FXaNvzs*WYD_#Z{lR`*C~8!aU}>)691{zN?M=WZN0pu| z9j9Hjt=G)kLMagsPvcAK!3(l&GBkpqg+|pS01PL3#ciJ^lGrh2dj#>^KcAdW{v*;& z5lGuNs-u~cr^WAn!UrKn=n;X%dWqh~_{CrT;;;1h{-*c7brS*hw?9(oId8`RTYiH_E41P~LP^Z7kKGf>+Z_IJ($$cZt)se8Cb#T-5% zjX9Ewv%yJS^mpf2dp_f|z z0?234W&mu$?@j;*o~+0+LDz3Pa&A8$o<~YN-~dh0nxx9PSFP4?moF;@qU^^lMA@6f zJt4Pt2VITQu)ka@2a$>lte}q9dF59mbUO>&FFfPZMF$RH8?W*&aTR4L1VE3bJEn&) z95jDAIIgCSvjg5%`12h%WJKz6(gcPs05fc)x<07GD~FQO%~#*cs#LG41&F=M4D*&; zf9G#57^EiRdGbAJw}ux^mGLVgq|o1RU6lJA>V#RS@^FAC>g%zo1xRCCCI4VYsK5u8 z#lMegm@09ZclO@~INqA_^*{gFl;|$#LRmL|7jPe!3L8&V;^O{99&AU(l}G29z4f(` zwk~6I;W&sLM%dHST`+I7N}axP{z-o2t8ODLHLy0{PMrNv57*P`Fy>v+tgc%SGB!qG z3nrl|7U`}2_hYNVgr8k{O_lCr)a6O*Y!rI~ZTf$T>+Fmggl$}d+^yEcX=#6Hj2DHI zXSLQeo2nvRYSGfECsZcp0PeU@+S>&l!1H*;Lf@4>irf$GhrE|W3^yauaAgp6GdY*alOrJPjP)05)skaR+PQXGNTVJpM{`W`%dx(;M z|Mu&!jK$5Q)uJz$1`e#O1eE*xz?!dT|18s9L30a0HJJ;g#RrvIA zZLlqbE*nCA@51x_?0v3^;v~bs)0?Hhb+O}+SIyzH{YPecP;1+E?k(99etr%HSiU)M za~R0&W=O*`HNm<{-3wMaMF0a)@u=`kG{|)Z=?8ECqo8=%F9AP;e$H=8ui#8&f&m_v zD*T!kOtvwFQa2i0FFP^b;NGE1Skk}&JI1#9Nrgj|vn7W&wC5k@r#u)wuFgrgGUhB? zy^QBrrsAEEZ-_GRy^pmM5}z5rlKbE=mmz|rGjK0fwR~PR8-;UTj}CRMA@)5-SUJTF z#_`kZoE$FKv(|4$33!uo^oGxl@(6)xeB?Qjs8EN%@grl4doXO$4eP_3N3GYI^CA+> zJfr;4E8q+e-grwo_Gu^zYyGjo!Ex-u=C|&gBOn{0d52YUKVa;2PeuyYp7K+3d?qZ3 zv*VZ~$zB9O0v3bofE#~HK8uad9_uzK^bLkp6>inMNJKyG6zar5D;r3RMU>RpjQ&Rk zP`qY~Oa9!1zff(PaeXo)p`@pS2eo)}RP{=n)hz&fg|B?>zyKEobd|H5j~$!t5jDQ3 zvm}T~*ErXU0qX!^E(b1=1aYZSDPb43YUlN5)@8!^rYMo^0JvR+o^bO^!q!*C{Io2% znMjbg`!4aGyDlK*S2G+wmq~_|Ct}`sO9%2Z>8ss7nS>DHrvR<|O|&wWZ}$CyWz46V z3h=BwTi0^qEre2bbaow$vRGbRGh-|jx&|bt7h^n|roI$jM@!PDTx}E$616i|5sG5H zCy2aeb$a0ut3~MvDU|9Q7j{7z#xZP3H2Fn;B-1;|S!&dA1nJ~GLHbpzC(8>hT~XU+ z7mCeZo|zA2vO|r3eP!=;GNy1O^YTmHeDk6%wew;|mV?q;KtMFz+Oa_lG@RASmCPQb zO7&o=uxapI-t;UY%+mcYj=mGX8i_N{opEnrsGvHEX?P@L92YvkqID}yY22p5UZZf7 z1NkB@C@$M!S2b9NO5j!VVgcsIWNiRk4DeHKq284uK7QUcPaL^&j1l}I8NygKvBa8* z#mnjfjvKZ~1gnFZ9E+&!#*E3S{5lB~N87y!5%LEvzfP({LFS2*4T)pK z)b_B#f|YY-*P1%2t^(D6E$T=~b6w0W(vb`8+7v>+Y^7B&LQPmRf3Z*ehiLnac z#Uf0KAE1?zv<30j+hMxG5wZ z8DsY1s^r|1EyxoWMG!GU)LQO$j34$GK@w5IM9PHgj+wzy<6)()0Vf0b)~{(tdaS}K z9wBkQzGX3%=_6AqnMfC*qqi{V|2XSz20PAWQOmyFC_~1MZV07ca`LfhPmrG`?S|m< z{F6+z2Hu){i979)$PdeT;R|RL%?WN?|TjiYWGEa^rhJ+EOHxJs?-+1Dn zbw}H4aaJuT_t~*UEd!9tK-eZ`G8(Dl^PHPeGRK7X;J3W@knixFs+>;Se&tPw-sSKG zL<~wNqiBYG?Y9kA0ZFh>xFC0d?cJ-E1-e1kR$Vsf*jDRFpY(f(;@D$O*U0iztB>wj z(mdAupXFq-2(T-BVW-!W#Ef@B7DHAP4mTKBIr-XXi9e@u7iU?r7gR2XUNBtLbu!0W z(MX(L)WHD z8n!Da)IB+U(tb!S4W-LQgr=%Uzj5`JFDIvaFnU;reOCN3kxz_mt}{z+L{*7#pnR^r zDM(}lQ|j%?KB|Aw`W&R9r=FRu0~Z?=Z!gA;09~ zvu63~cfDbXq9*7_uU1hGdfK2x?xW5I1QMQWJ zg5FDRz>Z$8tNz4w$@C#oc+eo_1n!kToQZYL!WMf8uOimF99twwEXUGxBu6scDRX#k z1zWxuy`TP3=tbXz({bC0Qbf?p>K96h0;nKkz%_MVfB{%kxKE%2{9-V337B@o2AUWF z$kN5f_Lu1#O9S%faM>0TG?3A6scoFriVy|$hmyXN!5byK>k3F*jBo6Y&EW$J)R%x- zw8BcF9F12~+EIsaRnPxUW zW?5JFD+0|@vl4IV!WViQV}n$e3t}SRhCH?LFu-?QPXmz$obms$Y?YMGv$^62k9ch6 z#1Q*G1)4-D{mF`1elRm$GfwtLhl5<6(d^ zhl9R!hn8bcA�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 O_#Q&kufaF)hWsB47Nsiy literal 0 HcmV?d00001 diff --git a/images/icons/icon_virtue.webp b/images/icons/icon_virtue.webp new file mode 100644 index 0000000000000000000000000000000000000000..9e0b006e09152af949c6f473f11afd7cbe340410 GIT binary patch literal 31156 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 Q^F=l|svq@f@HMsn16wa>F8}}l literal 0 HcmV?d00001 diff --git a/lang/en.json b/lang/en.json index 077404a..fdf14cd 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,3 +1,25 @@ { - + "ITEM": { + "TypeRace": "Race", + "TypeRole": "Role", + "TypeAbility": "Ability", + "TypeSpecialisation": "Specialisation", + "TypePerk": "Perk", + "TypePower": "Power", + "TypeArmor": "Armor", + "TypeShield": "Shield", + "TypeEquipment": "Equipment", + "TypeWeapon": "Weapon", + "TypeEffect": "Effect", + "TypeMoney": "Money", + "TypeVirtue": "Virtue", + "TypeVice": "Vice", + "TypeVehiclehull": "Vehicule Hull", + "TypePowercoremodule": "Power Core Module", + "TypeMobilitymodule": "Mobility Module", + "TypeCombatmodule": "Combat Module", + "TypeVehiclemodule": "Vehicle Module", + "TypeVehicleweaponmodule" : "Vehicle Weapon Module", + "TypePropulsionmodule": "Propulsion module" + } } \ No newline at end of file diff --git a/modules/pegasus-actor-sheet.js b/modules/pegasus-actor-sheet.js index 2c9e865..f1e6b44 100644 --- a/modules/pegasus-actor-sheet.js +++ b/modules/pegasus-actor-sheet.js @@ -3,8 +3,8 @@ * @extends {ActorSheet} */ -import { PegasusUtility } from "./pegasus-utility.js"; -import { PegasusRollDialog } from "./pegasus-roll-dialog.js"; +import { PegasusUtility } from "./pegasus-utility.js" +import { PegasusRollDialog } from "./pegasus-roll-dialog.js" /* -------------------------------------------- */ export class PegasusActorSheet extends ActorSheet { @@ -78,15 +78,8 @@ export class PegasusActorSheet extends ActorSheet { /* -------------------------------------------- */ async openGenericRoll() { - let rollData = PegasusUtility.getBasicRollData() - rollData.alias = "Dice Pool Roll", - rollData.mode = "generic" - rollData.title = `Dice Pool Roll` - rollData.img = "icons/dice/d12black.svg" - rollData.isGeneric = true + let rollData = PegasusUtility.initGenericRoll() rollData.traumaState = this.actor.getTraumaState() - rollData.diceList = PegasusUtility.getDiceList() - rollData.dicePool = [] let rollDialog = await PegasusRollDialog.create( this.actor, rollData); rollDialog.render( true ); diff --git a/modules/pegasus-actor.js b/modules/pegasus-actor.js index 8345301..7d3698f 100644 --- a/modules/pegasus-actor.js +++ b/modules/pegasus-actor.js @@ -464,6 +464,9 @@ export class PegasusActor extends Actor { ui.notifications.warn("Stun level cannot go below 0") } let stunAbove = combat.stunlevel - combat.stunthreshold + if (stunAbove > 0) { + ChatMessage.create( { content: `${this.name} Stun threshold has been exceeded.`}) + } if (incDec > 0 && stunAbove > 0) { let delirium = duplicate(this.data.data.secondary.delirium) delirium.value -= incDec @@ -561,6 +564,27 @@ export class PegasusActor extends Actor { /* -------------------------------------------- */ async preprocessItem(event, item, onDrop = false) { + + // Pre-filter effects + if (item.data.type == 'effect' ) { + if ( this.checkMentalDisruption() && item.data.data.type == "mental" && item.data.data.genre == "positive") { + ChatMessage.create( { content: "Effects of this type cannot be applied while Disruption is applied, Use a Soft Action to remove Disruption"}) + return + } + if ( this.checkPhysicalDisruption() && item.data.data.type == "physical" && item.data.data.genre == "positive") { + ChatMessage.create( { content: "Effects of this type cannot be applied while Disruption is applied, Use a Soft Action to remove Disruption"}) + return + } + if ( this.checkMentalImmunity() && item.data.data.type == "mental" && item.data.data.genre == "negative") { + ChatMessage.create( { content: "Effects of this type cannot be applied while Immunity is applied"}) + return + } + if ( this.checkPhysicalImmunity() && item.data.data.type == "physical" && item.data.data.genre == "negative") { + ChatMessage.create( { content: "Effects of this type cannot be applied while Immunity is applied"}) + return + } + } + if (item.data.type == 'race') { this.applyRace(item.data) } else if (item.data.type == 'role') { @@ -833,6 +857,10 @@ export class PegasusActor extends Actor { if (item) { if (item.data.data.status == status) return;// Ensure we are really changing the status + if (this.checkNoPerksAllowed() ) { + ChatMessage( {content: "No perks activation allowed due to effect !"}) + return + } // Severe Trauma management if (this.getTraumaState() == "severetrauma") { @@ -977,7 +1005,79 @@ export class PegasusActor extends Actor { ChatMessage.create({ content: `${this.name} has used a Hero Level to reroll !` }) return biodata.currentlevelremaining } - + + /* -------------------------------------------- */ + checkIgnoreHealth() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.ignorehealthpenalty) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkMentalDisruption() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.mentaldisruption) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkPhysicalDisruption() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.physicaldisruption) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkMentalImmunity() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.mentalimmunity) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkPhysicalImmunity() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.physicalimmunity) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkNoBonusDice() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.nobonusdice) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkNoPerksAllowed() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.noperksallowed) { + return true + } + } + return false + } + /* -------------------------------------------- */ + checkIfPossible() { + for (let effect of this.data.items) { + if (effect.type == "effect" && effect.data.data.isthispossible.length > 0) { + ChatMessage.create( { content: effect.data.data.isthispossible} ) + } + } + } + /* -------------------------------------------- */ async computeNRGHealth() { if (this.isOwner || game.user.isGM) { @@ -1021,9 +1121,10 @@ export class PegasusActor extends Actor { updates['data.nrg.value'] = nrgValue } - nrgValue = PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + this.data.data.statistics.mnd.mod; - if (nrgValue != this.data.data.combat.stunthreshold) { - updates['data.combat.stunthreshold'] = nrgValue + let stunth = PegasusUtility.getDiceValue(this.data.data.statistics.phy.value) + PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + PegasusUtility.getDiceValue(this.data.data.statistics.foc.value) + + this.data.data.statistics.mnd.mod + this.data.data.statistics.phy.mod + this.data.data.statistics.foc.mod + if (stunth != this.data.data.combat.stunthreshold) { + updates['data.combat.stunthreshold'] = stunth } let momentum = this.data.data.statistics.foc.value + this.data.data.statistics.foc.mod @@ -1038,7 +1139,6 @@ export class PegasusActor extends Actor { updates['data.mr.value'] = mrLevel } - let moralitythreshold = - (Number(PegasusUtility.getDiceValue(this.data.data.statistics.foc.value)) + Number(this.data.data.statistics.foc.mod)) if (moralitythreshold != this.data.data.biodata.moralitythreshold) { updates['data.biodata.moralitythreshold'] = moralitythreshold @@ -1063,20 +1163,20 @@ export class PegasusActor extends Actor { } if (Object.entries(updates).length > 0) { await this.update(updates) - this.computeThreatLevel() } - + this.computeThreatLevel() } if (this.isOwner || game.user.isGM) { // Update current hindrance level let hindrance = this.data.data.combat.hindrancedice - if (this.data.data.secondary.health.value < 0) { - if (this.data.data.secondary.health.value < -Math.floor((this.data.data.secondary.health.max + 1) / 2)) { // Severe wounded - hindrance += 3 - } else { - hindrance += 1 - + if ( !this.checkIgnoreHealth() ) { + if (this.data.data.secondary.health.value < 0) { + if (this.data.data.secondary.health.value < -Math.floor((this.data.data.secondary.health.max + 1) / 2)) { // Severe wounded + hindrance += 3 + } else { + hindrance += 1 + } } } this.data.data.combat.hindrancedice = hindrance @@ -1347,6 +1447,7 @@ export class PegasusActor extends Actor { rollData.levelRemaining = this.getLevelRemaining() rollData.activePerks = duplicate(this.getActivePerks()) rollData.diceList = PegasusUtility.getDiceList() + rollData.noBonusDice = this.checkNoBonusDice() rollData.dicePool = [] if (statKey) { diff --git a/modules/pegasus-item.js b/modules/pegasus-item.js index c6e6b98..c1a16bc 100644 --- a/modules/pegasus-item.js +++ b/modules/pegasus-item.js @@ -15,6 +15,8 @@ export const defaultItemImg = { weapon: "systems/fvtt-pegasus-rpg/images/icons/icon_meleeweapon.webp", shield: "systems/fvtt-pegasus-rpg/images/icons/icon_shield.webp", money: "systems/fvtt-pegasus-rpg/images/icons/icon_money.webp", + vice: "systems/fvtt-pegasus-rpg/images/icons/icon_vice.webp", + virtue: "systems/fvtt-pegasus-rpg/images/icons/icon_virtue.webp", } /** diff --git a/modules/pegasus-roll-dialog.js b/modules/pegasus-roll-dialog.js index f7a5b12..a609326 100644 --- a/modules/pegasus-roll-dialog.js +++ b/modules/pegasus-roll-dialog.js @@ -33,8 +33,8 @@ export class PegasusRollDialog extends Dialog { super(conf, options); - this.actor = actor; - this.rollData = rollData; + this.actor = actor + this.rollData = rollData } /* -------------------------------------------- */ @@ -106,6 +106,7 @@ export class PegasusRollDialog extends Dialog { manageWeapons(weaponIdx, toggled) { let weapon = this.rollData.weaponsList[weaponIdx] if (weapon) { + this.rollData.weapon = duplicate(weapon) if (toggled) { this.rollData.weaponName = weapon.weapon.name } else { diff --git a/modules/pegasus-utility.js b/modules/pegasus-utility.js index 63eab47..a898609 100644 --- a/modules/pegasus-utility.js +++ b/modules/pegasus-utility.js @@ -2,6 +2,7 @@ import { PegasusCombat } from "./pegasus-combat.js"; import { PegasusCommands } from "./pegasus-commands.js"; import { PegasusActorCreate } from "./pegasus-create-char.js"; +import { PegasusRollDialog } from "./pegasus-roll-dialog.js"; /* -------------------------------------------- */ const __level2Dice = ["d0", "d4", "d6", "d8", "d10", "d12"] @@ -14,7 +15,10 @@ export class PegasusUtility { /* -------------------------------------------- */ static async init() { - Hooks.on('renderChatLog', (log, html, data) => PegasusUtility.chatListeners(html)); + Hooks.on('renderChatLog', (log, html, data) => PegasusUtility.chatListeners(html)) + Hooks.on('targetToken', (user, token, flag) => PegasusUtility.targetToken(user, token, flag)) + Hooks.on('renderSidebarTab', (app, html, data) => PegasusUtility.addDiceRollButton(app, html, data)) + Hooks.on("getCombatTrackerEntryContext", (html, options) => { PegasusUtility.pushInitiativeOptions(html, options); }); @@ -54,6 +58,41 @@ export class PegasusUtility { }) } + /* -------------------------------------------- */ + static initGenericRoll() { + let rollData = PegasusUtility.getBasicRollData() + rollData.alias = "Dice Pool Roll", + rollData.mode = "generic" + rollData.title = `Dice Pool Roll` + rollData.img = "icons/dice/d12black.svg" + rollData.isGeneric = true + rollData.diceList = PegasusUtility.getDiceList() + rollData.dicePool = [] + rollData.traumaState = "none" + return rollData + } + + /* -------------------------------------------- */ + static async addDiceRollButton(app, html, data) { + if (app.tabName !== 'chat') return + let $chat_form = html.find('#chat-form') + const template = 'systems/fvtt-pegasus-rpg/templates/chat-roll-button.html' + renderTemplate(template, {}).then(c => { + if (c.length > 0) { + let $content = $(c) + $chat_form.before($content) + $content.find('#pegasus-chat-roll-button').on('click', async event => { + event.preventDefault() + let rollData = PegasusUtility.initGenericRoll() + rollData.isChatRoll = true + let rollDialog = await PegasusRollDialog.create( undefined, rollData) + rollDialog.render( true ) + }) + + } + }) + } + /* -------------------------------------------- */ static pushInitiativeOptions(html, options) { options.push({ name: "Apply -10", condition: true, icon: '', callback: target => { PegasusCombat.decInitBy10(target.data('combatant-id'), -10); } }) @@ -345,6 +384,7 @@ export class PegasusUtility { ui.notifications.warn(`No character linked to the player : reroll not allowed.`) return } + console.log("Going to reroll", character, rollId) let rollData = this.getRollData(rollId) if (character.getLevelRemaining() > 0) { rollData.rerollHero = true @@ -361,6 +401,13 @@ export class PegasusUtility { game.socket.emit("system.fvtt-pegasus-rpg", { name: "msg_reroll_hero", data: { userId: userId, rollId: rollId } }) } + /* -------------------------------------------- */ + static targetToken( user, token, flag) { + if (flag) { + token.actor.checkIfPossible() + } + } + /* -------------------------------------------- */ static async chatListeners(html) { @@ -509,7 +556,7 @@ export class PegasusUtility { /* -------------------------------------------- */ static getTarget() { - if (game.user.targets && game.user.targets.size == 1) { + if (game.user.targets) { for (let target of game.user.targets) { return target } @@ -546,11 +593,12 @@ export class PegasusUtility { let id = rollData.rollId let oldRollData = this.rollDataStore[id] || {} let newRollData = mergeObject(oldRollData, rollData) + console.log("Rolldata saved", id) this.rollDataStore[id] = newRollData } /* -------------------------------------------- */ static saveRollData(rollData) { - game.socket.emit("system.pegasus-rpg", { + game.socket.emit("system.fvtt-pegasus-rpg", { name: "msg_update_roll", data: rollData }); // Notify all other clients of the roll this.updateRollData(rollData) @@ -581,6 +629,7 @@ export class PegasusUtility { this.addItemDropToActor(actor, item) } if (msg.name == "msg_reroll_hero") { + console.log("Reroll requested") this.rerollHeroRemaining(msg.data.userId, msg.data.rollId) } if (msg.name == "msg_gm_remove_effect") { @@ -681,7 +730,7 @@ export class PegasusUtility { if (game.user.isGM) { this.removeForeignEffect(effect) } else { - game.socket.emit("system.fvtt-pegasus-rgp", { msg: "msg_gm_remove_effect", data: effect }) + game.socket.emit("system.fvtt-pegasus-rpg", { msg: "msg_gm_remove_effect", data: effect }) } } else { toRem.push(effect.effect._id) @@ -863,7 +912,7 @@ export class PegasusUtility { chatGM.whisper = this.getUsers(user => user.isGM); chatGM.content = "Blinde message of " + game.user.name + "
" + chatOptions.content; console.log("blindMessageToGM", chatGM); - game.socket.emit("system.fvtt-pegasus-rgp", { msg: "msg_gm_chat_message", data: chatGM }); + game.socket.emit("system.fvtt-pegasus-rpg", { msg: "msg_gm_chat_message", data: chatGM }); } @@ -950,7 +999,7 @@ export class PegasusUtility { console.log("TARGET ", target) let defenderActor = target.actor rollData.defenderTokenId = target.id - rollData.attackerId = this.id + //rollData.attackerId = this.id console.log("DEFENDER", defenderActor) defenderActor.addHindrancesList(rollData.effectsList) } diff --git a/styles/simple.css b/styles/simple.css index f23384b..9221f64 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -1159,6 +1159,10 @@ ul, li { position:relative; top:1px; } +.pegasus-chat-roll-button { + height: 38px; + max-height: 38px; +} .plus-minus-button { box-shadow: inset 0px 1px 0px 0px #a6827e; @@ -1282,7 +1286,7 @@ Focus FOC: #ff0084 background: black; } .color-class-agi, -.color-class-range { +.color-class-ranged-attack { background-color: #02a41d; background: #02a41d; } @@ -1318,7 +1322,7 @@ Focus FOC: #ff0084 background-color: #505050; } .color-class-per, -.color-class-ranged { +.color-class-ranged-damage { background-color: #f9c801; } .color-class-foc { diff --git a/system.json b/system.json index e401dc1..5160da4 100644 --- a/system.json +++ b/system.json @@ -180,9 +180,9 @@ "styles": [ "styles/simple.css" ], - "templateVersion": 99, + "templateVersion": 100, "title": "Pegasus RPG", "url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg", - "version": "0.6.8", + "version": "0.6.10", "background" : "./images/ui/pegasus_welcome_page.webp" } diff --git a/template.json b/template.json index 86ecf23..d32d063 100644 --- a/template.json +++ b/template.json @@ -361,6 +361,14 @@ "effectstatlevel": false, "effectstat": "", "oneuse": false, + "ignorehealthpenalty": false, + "isthispossible": "", + "mentaldisruption": false, + "physicaldisruption": false, + "mentalimmunity": false, + "physicalimmunity": false, + "nobonusdice": false, + "noperksallowed": false, "description": "" }, "race": { @@ -443,6 +451,8 @@ "effectsgained": [], "category": "general", "upgradable": false, + "activatedtext": "", + "deactivatedtext": "", "features": { "nrgcost": { "label": "NRG cost to use", diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index c94f6cd..385c3b1 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -110,16 +110,16 @@
    -
  • +
  • - + Ranged Attack
  • -
  • +
  • - + Ranged Damage @@ -186,8 +186,8 @@ - - + + @@ -593,12 +593,9 @@ - + - - - @@ -611,6 +608,7 @@ +
     
    @@ -623,8 +621,7 @@ - - + {{#if (gt weapon.data.ammomax 0)}} +
     
    {{#if weapon.data.equipped}}{{else}}{{/if}} diff --git a/templates/chat-generic-result.html b/templates/chat-generic-result.html index 655f2d1..fe9cfc4 100644 --- a/templates/chat-generic-result.html +++ b/templates/chat-generic-result.html @@ -36,6 +36,10 @@ {{#if weaponName}}
  • Weapon : {{weaponName}}
  • + Damage Type: Piercing 1 + {{/if}} + {{#if weapon}} +
  • Damage type : {{weapon.data.damagetype}} {{weapon.data.damagetypelevel}}
  • {{/if}} {{#if isResistance}} @@ -48,8 +52,12 @@ {{/if}} {{/if}} - + {{#if isChatRoll}} + {{else}} + + {{/if}} +
diff --git a/templates/chat-perk-activated.html b/templates/chat-perk-activated.html index 765275d..d9dca5d 100644 --- a/templates/chat-perk-activated.html +++ b/templates/chat-perk-activated.html @@ -4,4 +4,9 @@ {{/if}}
{{name}} has just activated the Perk: {{perk.name}}.
+ + {{#if (count perk.data.activatedtext)}} +
{{perk.data.activatedtext}}
+ {{/if}} + diff --git a/templates/chat-perk-ready.html b/templates/chat-perk-ready.html index 432481f..5e44619 100644 --- a/templates/chat-perk-ready.html +++ b/templates/chat-perk-ready.html @@ -4,4 +4,9 @@ {{/if}}
{{name}} has just deactivated the Perk: {{perk.name}}, make sure to manually delete all Effects provided by this Perk from Targets.
+ + {{#if (count perk.data.deactivatedtext)}} +
{{perk.data.deactivatedtext}}
+ {{/if}} + diff --git a/templates/chat-roll-button.html b/templates/chat-roll-button.html new file mode 100644 index 0000000..06a405c --- /dev/null +++ b/templates/chat-roll-button.html @@ -0,0 +1,5 @@ +
+
+ +
+
diff --git a/templates/item-effect-sheet.html b/templates/item-effect-sheet.html index 186a2ae..6c232f9 100644 --- a/templates/item-effect-sheet.html +++ b/templates/item-effect-sheet.html @@ -37,6 +37,30 @@
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • diff --git a/templates/item-perk-sheet.html b/templates/item-perk-sheet.html index 1c4f585..9ffd5ab 100644 --- a/templates/item-perk-sheet.html +++ b/templates/item-perk-sheet.html @@ -77,6 +77,13 @@
  • +
  • + +
  • +
  • + +
  • + {{#each data.features as |feature key|}} {{#if feature.isvalid}}
  • diff --git a/templates/partial-actor-status.html b/templates/partial-actor-status.html index f587a2c..171c3ed 100644 --- a/templates/partial-actor-status.html +++ b/templates/partial-actor-status.html @@ -39,8 +39,8 @@ - + -  - + + +  -