From e1d677845f582a44b24c09dc28610a75be6f78be Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 3 Apr 2025 12:52:04 -0400 Subject: [PATCH] v3.1.0: reworked Warrior's shielding ability, no longer purely passive --- core/src/main/assets/interfaces/buffs.png | Bin 7846 -> 1865 bytes .../main/assets/interfaces/large_buffs.png | Bin 13152 -> 4244 bytes .../assets/messages/items/items.properties | 7 +- .../shatteredpixeldungeon/actors/Char.java | 12 ++ .../items/BrokenSeal.java | 125 ++++++++++++++++-- .../ui/BuffIndicator.java | 1 + 6 files changed, 132 insertions(+), 13 deletions(-) diff --git a/core/src/main/assets/interfaces/buffs.png b/core/src/main/assets/interfaces/buffs.png index f1e5d34c36c8747b33ef6b11459feaa3c3099ac3..8772efc8efd14037fcba221f2b98c2113d09cd0f 100644 GIT binary patch literal 1865 zcmY+EdpOhy7st=+5g`6^E~IA=Q-#6^Zh>0Io}C3`k5Hf zi~zud@9!o&PT z0AUwli=$kg>G$>dhK2@RbF8qFxHmu$5?n_D_kEe<{p)89)#ZKSXoy@(&}g`c39)}c zR!uhyfD4VgIkkE5GF%_lq$F+oHpYl}6byBy_6=frzUa;T)xd}-c9RcuiGo+y5?rpQ zPjH;Agl)oJ;YwGjRC2;S*poe;e4J1{SM`|R_})(iAQTFvo-2~qiE_TuzZqp6xr|N_ zpiHm&_xYys?k>4pUYoR|ewZk4|2~F>7dmwiIuY(W52Yo!(A;z4*>YRkb&G>Dl6SUn ziMb}Uefy$9Lqko{*TVN+A0|aar^3bU912z_-5ZgAS9P0M;Odk=l=9m~FMb~Dfwd_m z5o6LgeUy(V{L$V-Tlp$MDYXiDH5pKF%PCicm4b1R+$bzuZ~AObyzSZR-<&f$;C1L; zVNR(Fhr;5VEPNdyVsW|}$gBqy=-XnYBicf?9^AjE6?<>jQD_$u3Li;TI}oa-<3Oo8 zIeB44DcO+ubi8>t?K^T5q4zi~Jo`hQUiy;G;#qSi>WHPI=Jx^<-e&L8#i<)|GQBmj zrh4_>t%fp1>ZfhfA)C7UEi3B-*`JEGN+by{2%FIpm-@VixBoEdkz^NlN7eZ(#uPp> zv(b0P+YLQH-R7|C*MF_U@W)e|+3TYh+9`=EcWX0F)?;J=fvG#Nn8S|9-3zU+><`R$ zL-8V>VOe9Njq^dfY&Ei?tVkJX@XO#DjU{#0gzvE!F_e*HaH8y@@$6Qp{?@BE`}eJa z@b)>1&==Q@H6cI&f0zE^^z6Xr!u*G>KEfZvn3I8|f)-Qp9R5{zR-QlMuRl}W9ER>< z3Gz6$Oy#OaJ!_Wsu33%X_I%JX_+AjZcHtK{Cp0JydSpFN(l#qMga%9G4VlxbP;iK@ z>YhG(z&AkTaTmm~rq7ALB)H%R_O0F4?A}^8Fm;x#joQXdd1eL6L(5+bT^a%DisE?5Gl7eR_1b zfX`0jJ3b0*EC_7u&Ux+7QJoX%8V6Es|G0g?(%Yn!6?33=Zh5iq-|yn!Z4={Xi`W2Q zxhH;*YNn4SiX|cIkUeqm=2VO((FgX7?MWPyfbZ%v3)7B!Ts9&sFMH(Dc^Gh^`%jK^ z_v6!^)MS_;;h2Byjue@p_6S5D_ylIRrx;%f#bF2bN%zs=fp1ZTc6V5~lh)~aU0pUk zM9DuD%t^gnb#qVdvb}?#Xx@LVc{n5@l*!cECiV2~I1!0DTdeZ(T0IYJTr6~_o_fS} z_LiR8?PW-WfhKYxRZWt{$A{PeZwoqoDH1g>IEG4h^QzzBRCPw~XsC?B{l#XE%;k{$5=QV7GESvdgRY;UmrHD?TIgn z;a~NRzL(mM(rAy5*IlE+Xo>bpO><4sU8~8bn(Yq2sRIy|)I07-pDc*Tqg#2Sz0U@rj*P?3 zCpSvar`=TLIs?H-&@3qa*d$#*34|!&OwSW>8~GTvua!hXn-=47q#NX~l~}@8sK6h` z@)+5Rrb)4uGPqbWe8quNoRw4h4TC72$IP0xP%g2@v%1VWI};KUA0ZeWC}+%O%SoOq zT^NTSpLcX^Q-weL>nX>6CNu!I;XxeKw)HMgn_8TXBy3XmE}!D*#|kHw2h?c2M9qF| zp8~$gHU=^+1EIBZ{*c3Hx|{43vors5ltn~lWy7U;qYWQBV}vhI&AiV8^59x(xm%}J~)*9v^Lw?*Y?cJ zPG>>Y95vyJ3~iJ1hH%A0WdGn}fjkS$PG@V*1&|MoIOYUUkB(0;TVOo@KScTkRLOh_-D@d+35ZAhS($j1zm?41ONa4 literal 7846 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 XHUpod55EKtoPddexqiN`%jy3Dcsk#^ diff --git a/core/src/main/assets/interfaces/large_buffs.png b/core/src/main/assets/interfaces/large_buffs.png index 244aa5769702272af4467a62fec581ed6a8d52f2..520b4b6ec97a8642c0ac446f3de05931f12c1960 100644 GIT binary patch literal 4244 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 literal 13152 zcmeHtcT`i)_U{P<>0JSp5<>G!3%v=1DqV^Q*yy216+#IuG^Ht3P(+HTpokzvnjlRC zL6GO8Ckmk_=!oV*z+WlfJI%fgWjAz!!I&ne!% z-yH2U5FvTyV*N55kzV4fP!PwpvBNihbuB_;NK>?&9FP19&=%Hyfa{u?e;OHrZO+=wv@Exe5_z*nP2nm zgnnqwZX?pbqBoCeBk7%G$!V@%$9{b*c^Wt&#!{8}gsqU%oCmEvZBWrC-Fib>O>*O7 zdWO*_&VrTVWweSdj(7Qr<8I$L4bGZmI9BAgyi zcT(}LWz0>wm#6*^wW<}^++aO>DBS28klo%>6)kRUm?}VGjSBJNDiIxjqQ$fjRkfOC zS>(>`G2}xej@0FeMN>{TeEEKOo%%jmxMgCf!$6CoN3Fw*Ri z1u%hI$O~wjk{YO=-x>Pey-1z@s3ONNI!@QI+;DW6e|>FrWpz^iKYYj zbitmWaoL%fs=4_2NISXuIisXQef*DX5Ku>k`a8LJq0lgAl)I;|27LWZD;(zOssXoE zG?Ov&*F|}F8ioa+E`*)8b_w%xQFVnQH5t@H)j$9r6xsf`Mjs1~XL|Bb5#-X9es z;IQ8!XfF-8otXtp*DnACQ;=4WmXXpA^$eDSYcjyp16U)T|* zle1qCS_2LT>tX*GpO3$p*+1cZ1OH+HEr*q6-f5KNuoX7{zcZmjqRxBw>p0x2-y6exc?^o58ZzYgHmQ@YI=SyK}W+g z($jz+^{?jY=i=$A_WM>&Sx!mD8RaIWq$q=uQgBgGm2y^=myvRkb9Qz@xhS|PJE{H+ z%E&hm?d0o%I)Vbhr9D9$c{c@BR|O?`DOE)`Whn(ESy?G(H+eTHXJGbq*az`QjecgXo91*UjZDFJVmy?$HSBZtU6WR@I0Q!KZud823 z;J>P@J$+CY&`w8u$|}pNDk#gz%c_7K$|}qKOUMQl5D41h5vr_=w7kminxlzP1Jwbk zbvm+C5a4$?sEwL#0LlsN7hvt@=dA%h8WilPp-~{HjGUsHjGUUR zytS;nnu4O5tcsKjSn@Y{KUYsT%>POH$bDeye@?ogXCT-==6BJbK6L?g+f-bSbtWzcsTjGqrmv_m%;v{-1C1h1{G&F6(v zmk;qk9nAwsnUsv2)ZZwBBmPnraTGEBp{+XNf8#^_x4_>*4A}0^GB9+3kr46EQ1};L zM?vTR;peY;_stq{v&?>OV@wt`i~g+kA(kgUH_%)KVslN68^7s{a>St;a|xV z$`^bB3IS84Am-B#!8Gfbvx$KoKsovrwUlOoCG`G=mjVHRk@M(+01qDWfQ7VZBQt&4 zMJi?vDUL>{@)`iZ03$tZ>(KA3*TU1SzvWWazLK0oSm;k>s=%l_g?M6CMzS7R&7Fm< zsdf6Y@kqdbu{Uu_7;8z6lz$obV6wJ`hTIv~L;va(@|KeCC4A?(E1q+sqJ}Y(jh8LB z(~;lU)llg*W$W;Bq;FyP8YTk&Fg)A>SGhEVo(%8bS{>WnCGz9X;==&o?Ai}YD(W8% zKhLoOu>A9PGhC*?(u?R5t}O5=}SRrVnLRha!TmL$y)zn}wv?D=9X&OGGOHuAEH z`!}SbipRIfzL4+NT7S4Do-QWlE?it7){jNzVB1Z8kVhM{8i|`%CK%SA;d+sdiW#GJIzB^H-Hh;hvj`@Fgm}Jp@dfq&6(7J zhR!SiIs&A)!@p9s8p6)H1(ueK}QpZgJ*#1M$t9H`|DXpXd=r zSVvnGOYMm#yK@1JiQAlwnd$_W)JWlWA*?U|B+HP6g%&cuvbRr1=g47ArKt$7A;E!Q(cD4)wU{AL7_FlrERUg6x z_PGL1eh?JXLcgrbl^>brQy(&U*b_Y6N}(kO`4C;yA>n?G1$%7SD-w!Iw3G!sVSvACzW9-*<=KmTZTCOl z>j1BFtj#gR^Tmhv$E1Q&a>pdMsY1C5Mb+6MeC(yI3C7JAbE5*9w+B3r?{jv!7(mwY zc&Z7_Y|&g0COxCJmv7SAhsL{$1+}zhlV6y36J4Rv{fzNF<}vp+28~IdbKWjpuvThR zN%TeAu*pOc%#%62t6c>4MAHPdd_>7|O za6ArnV#x0(H$ud-k%tr@O>w zWfspXHbX8JcJ%d^fm0b3Zx1Y{XS+|ja7MqIGobHC;dBY21PPjK_3FW_Y1>kF2Txbt zk$jJHm2;aFo1vs<@N%B1hmDFEvwYBt7T)g>6=_YSGyLwD__FNSJ8$RRsG1DJ*<-ZS z#e)^de1WzG%GR!9R>R1M!#Ok`yQ5JW1FIeT02__{m$a2`y3QY`-_!Tvk^#@t?0}9x zsLMw}eSN)dNJzcvuedi!qL>nK=#>Z*NBZjx^gPe9U=LlYI89CxpaXM-a`VY2ZD;j7 z<19|8J~X-#b>U0O5A0)xHf}K+<&)3$CKYDPb??rB4yIuY#P98orpA~bQ!gf!< zC@TAAw@t<)ufr31t>=VByM+!!dR!eOFVxmujdCC3G>SQ!C2Q3 z$=Ruk-8Ivj12R955-Q}Q^H^3&sIhyc)HQnC^gv6c=wJ-027-%QY}*C^uch;so+n^ck9bCT4jMLSt1pa5V_x%hdFihtky#aijX{ORq} zqXeD(Lr*WcrO9uB8~{M_1uD-PA6kji_@8Rq?d%?@vyI%S{)}(6-+$vzc|CnjIVJ67 z)hvgLn+Ae0|%J{?*;M-jYIQcT}$g)Ua;OEL6RnDM)gkP z+-|)9Qwzmu*V>b~=0p3szbbO)t6rt{`p!nE&$47tEWQsRiC?3Tabr{OZjCDLuexdM z#cu8GB+PdvKq~VY@HG|uqq0x%^5o0D)h=T7fEaNO_?ndt+5A4HK1^ZEoQ0qO6hIv=^$OcW_}HPSnx@I}MkJ9$T` zNH835NWYS8^*QhO>?%ckUnq*>iD>v#tK!3Dnr2yS_E$1RMzBwK2i*eX-51b}8e-fV zVyGc~7?h~*;@?~rg)Hk0Jxni*{Im%@AQGK^O?SNt{WTpuH4<4Y1FLNi)(sv{|2e~; zhJbOo@-^Nl->%hkGaDw7=l70#UEf)Sc zRXG{Qt-N|7Gp}x^KG>d`*`Z-Xd_GNr-cHPTp{43|8u7ug#j_w0b~SFy<(Fzi{a34q zh7pLAO$;&X19eYkL>aV5vb}V$WN5bA4s$ysTClF%%to#Rp|-Xk^{Ps?bwOjin=5_< z1m^KwZ59=#YaUkEmlcdYGv6%?k?oGvfsMc87sOt@simekgT7)Z$fh)3${6DjTk{xF z?9!|Qvn)dL6-5F!fU7e(MS^IHI6nTa230%#KjJc_$Zd)i!CFCn} zk?si?5)x;r7Ia{yv8*t4UPErG=LDd6<_TM(UBnP)QM(ZG52)Oo{ZSp*wXaq2LxR{J zjx$kVoO9IEP&4lb8*)x<9M`%D_mb9bD(OU>pxZa&jIO>6c;^FY3(b)?;`pXr0)b{F zxnh^A*aESQmnUi(^F9)~Pi)o<*$0&uh}3=HG^~bOa4ipu(++5cU)Ks9nj3z8cs6p7 z)W+GC*%~y&9K#KRtCzsjxu`F*=?L=6DJ)C`TfAAyuw}DOp@Ql7XNVQSDc^+7QWdAr zAx?{ghRrFVtSshs#Bw)uMIiL;Ue_2_n3;;oAYPU{VTC z)7!&0T{)>?xXluj2b^hA=tDe|5iS;fW-Nm|R(E=Nf5hrdR zV2Q1AKlWFI*?Slqg=sBvaZzQsm4iFpe>k+J)`>noyrv=cbeGjx3GC7T+ijM|IBaCd zJzC(^t6p!7+uLG&%TA^~_pg7YOigKnNyaKc_8d8!rEtUf(m-rIOuNc%R+{;o@^+a? ziyeKN1!KBYj1RIE(=^H)8euM*gR8esf46fGa&l)q5l`}2M~=~Gdsh^?8%M?7GB9_M zzH16CzbY_>>hT^HimuA<$PIfsGe>i_dA@(((1IAEbSW}obF0>oBChh*y>UZBgvzGS z@6GYt?Kn+I+eZ?w$MReIsr@FRh^qrcdQQ={wzjAjIGihg49y)?Fdb1zXXFbH_yV3E zH{g3}2cnuahJ35^j=pE zPC)0dD}_5@r}9$GF)&m;g%>qxUlJ5@l;16e7A&cx?X5&*vneQ-c5t;~q}zT;o%!;D z%S@zub6?$-sXxIWWN;SGH^?5-(3a_-?>&yEX6r)`prJX1Md$SnPZtvJ4Ty5kJz#2f zA8>gox-+`NBhiuRP>cJT-BtTE;g?=Ygkdjb{QX7=8{N_&$L_SEwKE1pxSewyn%g25k0wFU0qjwaJ-l4O0!~6qst*U?8>IGvl*cpDF`F zI=4w|VNwLB2LaJg)vUAeo)1YA>I_UJ#SpvzJO3Fo5B8!gtRO;*jb$J8O5_e7Vt^h?<;#6l39NROv&iEYTu|3XNXvXp(03wVOf(wx+zLIUXg$mof z#6FxI=+)#hdu;G+Wx`3GBsyEFA04HWE-t23O_mgmtiFo7F>9_7LpRXjkIV4w0j> z(&LmyvINUU?_MP_Q^bU-I4^V38ft3k(6EL8{fY|IQL6T$q`Io-M0yvIa>#h3^k{bL z8p7X4bg92)G+^SBMW3Kz{w!DIW0#lw8vOz+kg~}Pm65eCg76>gm-|BfmWIu-U2Q#EpMuMOz|)tW~*D zoP_0MK%?J00WdhUe)%I}W~G$|6FWdQV2IIs1Tg22fNwf5{?Q<4bdYvch4?i(y&T>P z7@92$$5;F@C0z{tPTr+*tS~qdfZo(9wt(H8b?R}b+wpv~-MZ@cVS5WlDZgrhB{c}p zQyU7h?Hp`23w;YJW{#~0$JOizqLVno(aZp&9Pb%%XvYvFT?aOJzfc;=!TvDvvJ6=> z3!|4y%a(yOr1}!S2GX_CK=#VGb=H@1Ii6JVC}!bYiVNLZG0#(%acz+eNx($KbXB3LR|*J!c$qaWpcAB*&^X_hr$J?-9gN9bgLO2M`hL zEi6vnU&&%rZ8=ndj4}7E94`hJieR4{Z?K~Gn1Y%0H=xqXb2o+j7I(egx5BI!mb zP>%1tg|lPT>gJrn0N#&SuP}U+fR=HyU#&mhU~xuEG%JZT@YKravM8_EtEX?p8FAr~ zuRmHjiIWy)s&~G9Y<;+=!#hc30p?o~?E9D;yA!w<)xYfe3Xk8~HaniWIb6(;-asz4 zawr#TOOF0PNVys@#OOFS>>|~|u!vTJse18!Swt7VrrdzDgec^syB1&^tVp`*kQ4i# zf7NMQv1aL+=|F*^hl|RlJBveygEa0pc;J_z(`7{bggfx-JneiV8lJLVLj7j3t?DXP znQvt8;2Sm2to|9jT^K;pMiw@Mi(ZBeuAB%_uUVr_dTz&iAxzh4tHJyiec%dpP8%xb ziYCj)C@p6`W^Bs`+$7=o?niYR=Y8hkE5a|7do!D!sZh9dhe_Fw!Q9I*txCdh?2zw` zYHzdYTNW;*T+HyYIahnubJq7X7`Jhg1y*(cJ*cS*v>3lZ|5PH^<5P4rsXLfk=a$=# z+X}W&J3{N$o*)419c2EI5eaP-P-jl5R<`aCnoTozpjzV2lgGRHZelj~WZ%ty`Z?Qi z_u89s=|XRM<*)1RhKExS(Mn$ZgwxHNG9uz<5Ztt*k%+q*WJ-&F-)vT z7OHwoLo=_PE-dy)LKy734ZB=?U0vm*L0YJ+pQ0jfe9UIRfjE*e%3Nahi)-#D#yYn_JS&ZR(LF_YgUVGa8 z^Y@{WJ8#(8pV?+0S=eE-4w1Xo(Jk(;dn$#fZs4R~@yNO>6<=5-BU$*Pwt~SoqxL?J zIqe=iGkLo^d`+hKQPnhr30ir>TmCFIXF<*>kyF)8IHnmlxA}gybXe%>R|T%2f{29h zv;m>>Pp#-9CRv9{7FJhZp9&M5tztfD3cX{SQ<0JpqHyeD;q2M3zfL(baG(cG)qZ@^4z`iVo8u>)eKk6=rB{t9a3@KR+`Bh>5M9MZ|DxMbXxwxuE5iWaWos#M9k*=w|??HyECSAMJ7>$GU+>93)5n1 ze;DX#xoac}_xerK^z;bO0VWF#deNekx)%4Jxr`bv1n!isf%l>$i-}t2o2SC|(%1?_ zT0IhFg4q*$x80L)oOEM(igpcgRp-lT&(;6LxGT+?KehUS5h^AZ6XV3FR>IhHo%R=J zM)Zo3NkFnCFuvbo&Zh|pvAwl#N4SELP9X^MB8Ywmx;GOjALI|ph-IBIax3H@?zV%} zXp%gaJyZC-%U7ezHGk57_Uzy^hxxK6QrG27?vf2zVA;kub{RE}mvLnBi(eVJ%c3XP zd)?xr$BCf>mm^)g<`(^r_QVR*BB*vOWRbT>)%atMKi-7aP`-)%DiJMw-Ylvc+d22d zePaC@!=ukJuQ8pnyAMz9->G%;x46GD!+heF4f_W-U0+Qhi`r>P@ zYbuB4oy}c=6290!=xED`dwb3<;v);YXm+-+AB7Dh5&7Xs;fYcsoRC_JxzZ_^3E??M z^nLGE@q*!AzULg^(}~S}9#`VPI!3Qsm`8sWe4n=w|e|&j?vB+!x%9ShayOGup&C8L?C!Tb>#;+-w z*t5sz!yQecrVm~)-Iw0~Oywv}W$tN1$<gl@h5KZ6n6%4C zVPT>vT2U)dJpHoQ$mZNJVB>*b20!bNuKIv;=v?XtN-IM)&cR_f=G(ga81@WqQr?nv z)XtrEAU9Q&K)$EznnO=j|A~)uV`1g{MEdrJ@jeI3-LI`BZ~Rp}do zCog7Z%)S2OsnyiJCb$o_tFO*@Ph#9A-O3wCe{Zjh1C?(2}9 z+|-fK2O+u@cKh@IVAnW}^N1NZky=xUJl+m*0wcNhtRF2e@V=ru8GMwWISSF3=M=QT; zsvJv*9Cz|EH?H0dBBmQ>@46rUqk&zq#Acnf6q|+v4g&+CQAYrm7ocOn|Ry znMF;2TW7+aU9!-$I8rsGd)c=8GIpXQ;L}Cl=89qerO}u~u~=1B=TZ94fpKx{gp_im z*S>9~J>S9UR5Dqwr}fNP`4QJ?3zHF+QbG^zGB$_Asxb_au!*7qbKfaMivwD|uP4oC zMlr-#SyEP?jMiYjQf2WdRfOMfP(&7SdmtZamI73EBxwjZuU=xG$`Hs>xLW6ZX~FM{ zBmS}@-v0Po%J_iSL1frGD!l-cyP-lpHFJ<9jf__5D&7T2LUu_M_&| z_mm-*C)ym*#HL6?+}ko^3w=!>50NfH)_aE^ceEpff6D)8_CXA}>^wN7LDlTJ^-NF@ z2>@iC+vroU3m7-A#!sS#rP>er3_l22q*C=bW5ypLbsV$a!A+vWojwGX{`pcq?;gj(`wV{6hJh*dsu7Ua%x>DV_4QhC02nd{Vy<;U<8~ zcTXUPK5_4g6|JRQwl@4CkBIyFP2Q!RB*)&CS$MOD?9iw)>BBF7V8sJo{TYSy^ulVk z1^0BD?^SnA9uI|dIe%j;lK9Tpr%XefsXJ`aP0A343AU_CiYh(lxi?nHAQU?5elyzO zkW_3V&30(t`0pnOHgH!q+QhvpGoTGf zq?Zw}|T!9FUXy7&wfBjemdf z2Q5Zw3=OViQ9*L`g}eND!0a8-o@PjXeBm>Obns~FCnQgR4Fdt@oM8u*JqKbmN~(rR z6F2f>VfI%}_nC8Qvari+12XWU>q2m`_t!TMoDa+I)OP^@HPz9(010I~(G?lh6_puSCZy9;n??`G@lvgkK!Q{lH1D=te96R)dar}S2U}$B1|){H#IDLqzhgD zh&+XtK-0i7TLGSf{ee2N555M!W|q6{fbR}C+zO*=-m`c86}Qb3tnRn9|5ACv=2BXb zYXg6b*j01L%@1J=6_kN(B=W5m6=Rr3)Z4huZjJ(3%vK`TxB-`TXm_=6fOqL?qbj@q z-bir)_t}y6g6f1_{xVJL$3Y)*2~ji{S##q@pWj4s*Y-EHH{Ai-p9j!}FD1BI5^m{& z2Mo!j>)Pv&exleDPrj`2rDK0+HmyQ9t6~TRbbU8(dn6r%XEZ5pS{Rjcvx#D#6TVYd zHV$S?wrh(3a+zM{PE1|9_EV6af-3jqiPbk$kfL65y@W(yyuZDj9{BQUxQ=AKA`sP6 z@|}#oWBj}scrY**OP|I8L8xF2B4`uDm#o*`X7u3%vCDVm+m8V|qv1EjEHwQPdQkx% z+uOB&LU?qwq9hklihqbBqRj|Z(_NzUe7p~7{rNK{xp?~bZU z1Dh6{>fPlsI{D){g>~~Qjn2EODiIF_^O@pP?~T%HsLh6C#qjdpvH(5^2MosW@&5n* csO({piDjR>baI`*mt_DW{quSiI*zgb3%6GlT>t<8 diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 0a1e050c7..9beb9f2c7 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -92,7 +92,7 @@ items.armor.armor.cursed_worn=Because this armor is cursed, you are powerless to items.armor.armor.cursed=You can feel a malevolent magic lurking within this armor. items.armor.armor.weak_cursed=Despite the curse, you are able to unequip this armor. items.armor.armor.not_cursed=This armor is free of malevolent magic. -items.armor.armor.seal_attached=The Warrior's broken seal is attached to this armor, it is providing him up to _%d shielding_. +items.armor.armor.seal_attached=The Warrior's broken seal is attached to this armor. When he about to be injured below half health, it will grant him _%d shielding_. items.armor.armor$glyph.glyph=glyph items.armor.armor$glyph.killed=%s killed you... items.armor.armor$glyph.rankings_desc=Killed by a glyph @@ -2260,11 +2260,14 @@ items.brokenseal.prompt=Select an armor items.brokenseal.unknown_armor=You must identify that armor first. items.brokenseal.cursed_armor=The seal won't apply to cursed armor. items.brokenseal.affix=You affix the seal to your armor! -items.brokenseal.desc=A wax seal, affixed to armor as a symbol of valor. All the markings on the seal have worn off with age and it is broken in half down the middle.\n\nA memento from his home, the seal helps the warrior persevere. While wearing the seal the warrior will slowly generate shielding on top of his health based on the quality of his armor.\n\nThe seal can be _affixed to armor,_ and moved between armors. It can carry a single upgrade with it, so long as that upgrade was applied to the armor while the seal was attached to it. +items.brokenseal.desc=A wax seal, affixed to armor as a symbol of valor. All the markings on the seal have worn off with age and it is broken in half down the middle.\n\nA memento from his home, the seal helps the warrior persevere. While wearing the seal the warrior will instantly gain shielding when he is about to be damaged to half health or lower.\n\nThe seal can be _affixed to armor,_ and moved between armors. It can carry a single upgrade with it, so long as that upgrade was applied to the armor while the seal was attached to it. items.brokenseal.inscribed=The seal is inscribed with a _%s._ items.brokenseal.choose_title=Choose a Glyph items.brokenseal.choose_desc=Both this armor and the broken seal are carrying a glyph. Pick which glyph should be kept.\n\nNote that if you pick the glyph that is currently on the armor, the seal will not be able to transfer it later. items.brokenseal.discover_hint=One of the heroes starts with this item. +items.brokenseal$warriorshield.name=Warrior Shield +items.brokenseal$warriorshield.desc_active=The Warrior's broken seal is currently helping him persevere, granting him shielding on top of his health. There is a 100 turn cooldown after the shielding initially triggers before it can be used again.\n\nThis shield does not decay over time, but will end if no enemies are nearby for a few turns. When it ends, any unused shielding will reduce the cooldown, up to a max of 50%%.\n\nShield remaining: %1$d.\n\nCurrent Cooldown: %2$d. +items.brokenseal$warriorshield.desc_cooldown=The Warrior has recently gained shielding from his broken seal, and must wait until he can benefit from its shielding effect again.\n\nTurns Remaining: %d. items.dewdrop.name=dewdrop items.dewdrop.already_full=You already have full health. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java index 47281ec43..79e60eb00 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/Char.java @@ -99,6 +99,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.PrismaticImage; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; +import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Bulk; @@ -903,6 +904,17 @@ public abstract class Char extends Actor { buff( Paralysis.class ).processDamage(dmg); } + BrokenSeal.WarriorShield shield = buff(BrokenSeal.WarriorShield.class); + if (!(src instanceof Hunger) + && dmg > 0 + //either HP is already half or below (ignoring shield) + // or the hit will reduce it to half or below + && (HP <= HT/2 || HP + shielding() - dmg <= HT/2) + && shield != null && !shield.coolingDown()){ + sprite.showStatusWithIcon(CharSprite.POSITIVE, Integer.toString(buff(BrokenSeal.WarriorShield.class).maxShield()), FloatingText.SHIELDING); + shield.activate(); + } + int shielded = dmg; dmg = ShieldBuff.processDamage(this, dmg, src); shielded -= dmg; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java index b1431c4c8..39435f6b2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java @@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.items; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Regeneration; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ShieldBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Belongings; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; @@ -35,12 +34,15 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; import com.shatteredpixel.shatteredpixeldungeon.windows.WndUseItem; +import com.watabou.noosa.Image; import com.watabou.noosa.audio.Sample; import com.watabou.utils.Bundle; +import com.watabou.utils.GameMath; import java.util.ArrayList; import java.util.Arrays; @@ -88,7 +90,8 @@ public class BrokenSeal extends Item { } public int maxShield( int armTier, int armLvl ){ - return armTier + armLvl + Dungeon.hero.pointsInTalent(Talent.IRON_WILL); + // 5-15, based on equip tier and iron will + return 3 + 2*armTier + Dungeon.hero.pointsInTalent(Talent.IRON_WILL); } @Override @@ -213,35 +216,112 @@ public class BrokenSeal extends Item { public static class WarriorShield extends ShieldBuff { { + type = buffType.POSITIVE; + detachesAtZero = false; + shieldUsePriority = 2; } private Armor armor; - private float partialShield; + + private int cooldown = 0; + private int turnsSinceEnemies = 0; + + private static int COOLDOWN_START = 100; + + @Override + public int icon() { + if (coolingDown() || shielding() > 0){ + return BuffIndicator.SEAL_SHIELD; + } else { + return BuffIndicator.NONE; + } + } + + @Override + public void tintIcon(Image icon) { + if (coolingDown() && shielding() == 0){ + icon.brightness(0.3f); + } else { + icon.resetColor(); + } + } + + @Override + public float iconFadePercent() { + if (shielding() > 0){ + return GameMath.gate(0, 1f - shielding()/(float)maxShield(), 1); + } else if (coolingDown()){ + return GameMath.gate(0, cooldown / (float)COOLDOWN_START, 1); + } else { + return 0; + } + } + + @Override + public String iconTextDisplay() { + if (shielding() > 0){ + return Integer.toString(shielding()); + } else if (coolingDown()){ + return Integer.toString(cooldown); + } else { + return ""; + } + } + + @Override + public String desc() { + if (shielding() > 0){ + return Messages.get(this, "desc_active", shielding(), cooldown); + } else { + return Messages.get(this, "desc_cooldown", cooldown); + } + } @Override public synchronized boolean act() { - if (Regeneration.regenOn() && shielding() < maxShield()) { - partialShield += 1/30f; + if (cooldown > 0){ + cooldown--; + } + + if (shielding() > 0){ + if (Dungeon.hero.visibleEnemies() == 0){ + turnsSinceEnemies++; + //TODO + if (turnsSinceEnemies >= 5){ + float percentLeft = shielding() / (float)maxShield(); + cooldown -= COOLDOWN_START*(percentLeft/2f); //max of 50% cooldown refund + decShield(shielding()); + } + } else { + turnsSinceEnemies = 0; + } } - while (partialShield >= 1){ - incShield(); - partialShield--; - } - - if (shielding() <= 0 && maxShield() <= 0){ + if (shielding() <= 0 && maxShield() <= 0 && cooldown == 0){ detach(); } spend(TICK); return true; } + + public synchronized void activate() { + setShield(maxShield()); + cooldown = COOLDOWN_START; + turnsSinceEnemies = 0; + } + + public boolean coolingDown(){ + return cooldown > 0; + } public synchronized void supercharge(int maxShield){ if (maxShield > shielding()){ setShield(maxShield); } + cooldown = COOLDOWN_START; + turnsSinceEnemies = 0; } public synchronized void setArmor(Armor arm){ @@ -260,5 +340,28 @@ public class BrokenSeal extends Item { return 0; } } + + public static final String COOLDOWN = "cooldown"; + public static final String TURNS_SINCE_ENEMIES = "turns_since_enemies"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put(COOLDOWN, cooldown); + bundle.put(TURNS_SINCE_ENEMIES, turnsSinceEnemies); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + if (bundle.contains(COOLDOWN)) { + cooldown = bundle.getInt(COOLDOWN); + turnsSinceEnemies = bundle.getInt(TURNS_SINCE_ENEMIES); + } else { + //TODO what about berserker runs in progress? + // we could potentially screw someone who had a big shield prior to v3.1 + setShield(0); //clears old pre-v3.1 shield + } + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java index 27f3839ed..b82afea9b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -133,6 +133,7 @@ public class BuffIndicator extends Component { public static final int ILLUMINATED = 81; public static final int TRINITY_FORM= 82; public static final int MANY_POWER = 83; + public static final int SEAL_SHIELD = 84; public static final int SIZE_SMALL = 7; public static final int SIZE_LARGE = 16;