From daf129ab92d1e88254eb46e23a42dddc9f5289c9 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 5 May 2023 17:55:47 -0400 Subject: [PATCH] v2.1.0: combo strike now has a visible buff icon --- core/src/main/assets/interfaces/buffs.png | Bin 1636 -> 1639 bytes .../main/assets/interfaces/large_buffs.png | Bin 3586 -> 3607 bytes .../assets/messages/items/items.properties | 2 + .../actors/hero/Hero.java | 4 +- .../items/weapon/melee/Sai.java | 94 ++++++++++++++++-- .../ui/BuffIndicator.java | 1 + 6 files changed, 93 insertions(+), 8 deletions(-) diff --git a/core/src/main/assets/interfaces/buffs.png b/core/src/main/assets/interfaces/buffs.png index 624d56214aa4bcc72ef600b988e60e26c4e95730..3c9b045025bf4c1001688b1a7c35be4906ca7f6d 100644 GIT binary patch delta 1295 zcmV+q1@QXh4Cf56Y5{-fNklV3GsMSY-&F~*`e z;z=NpIPykLpJ3{AI+F{zk{fa4P9Eg>RO*#w*-Hc-&OsnINuVeS2$Z0@E}lf%#Kl5rI_%wte5X9|C``Oubb0(i)5D2XYGm z2IWuQql6kS*CD1RIy{EL@R3hLFME;x3(WJJ1das)Yf5-u^0z>yQr3qNt& zghmK4H6n0&=d3K4+eo4yTy=T}FC`uBp^RHG3fD4i%%XrG%<%tz#&u77M~+nveY2x* z`cuyv>6akjjs}0Kh_A*YScAYCk6;NK`2Yedw^w)stE;F0@Be4)U!3bo0~Gk>Qed48 zB%f%&u$k|8QM}6+1pqZL6IfZfjTUZbAkF|MVAeq5Q26u=I6(sozThCig1{OU1z16O z1Nj>esDPVhVD1)_N}K`C)Ysht=0gAr0wNCKCvSm^O|gF^wna_UMOidNQ@DEzyDc)Y zBRb*-VZe9I#Y|wKN)`~lM}d8^wS927eRu$YJkKF;C(rLdU_Y$JEkc2#AaL9|hQJB# z&q)+GB@{TL!1=|+#rY4r&Uh0LfQ1CY6kQiMB-^#TYu&t7&+B~3TU-zb3;9Pd@Z;Ux z-D7Wm*M@&VyVobZ9dNo+2%KLG27`-pM=S+~L&qxwu&y?+N9F_|3xWDwG!O;U0P<*yc~IH3UFKX%ao4LAeLj}7qsQ-E*=ZedGc)&M4e z4P?EH4KQBrk*p9%1xzyb@10x-}JB0tUmhai8)5HcSEEI>yvHv>JMK%9XyQp^Cd z!x#jZ4!-slNZ?yJ@Z%m|IR3y#*x}nx0^=ZH4)g=^Erq~j zI+=ew3<5?R$KAzoua&AlR7-0q3{U~Y41&xyEdJ7LBYY(k0?LN~4bZ@Y(E~QXUsRa? z=rIIjuY1V+JgrrpJbm&+0v1-Si-GUfO4TZ#boJgn7!(aS4Z?=Q#y@1kj)>_xM}g7k z*=XdKzdGu4kl%6B-D8cRfi4?({`|%BqJe*8t^o*u)G4m|iz!I_dIPQ*KxQR2pfBK~ zqeq$n2*e{mem6AmNi0m@ecd6MCZyMM(dKTW|z|fG|Gux1cLtiUr}St1Mh(AK@bV1PkI%k%?bFMgrqk5O{z6 z`ZWZ`1OjjD4FvSrqcKL-&*C{3_wE7GTgq1L5pHB{0?zAiogM*qQPnV7t4>G6c>9 zbfnBwu4R&u4h@k09u6qr0|hLsc>#Y>G(dxe*uWO@A+U=@0aMM)*AbX2KUUAPP<~<= z`bRzm+&)pz&qDYdms;W`|x%UjHGX*qF!+;h*8)DZF zeHUruXC$8k$Q3Y644CId<~O_;u&%2Bwrx|u{tY+;a0=kM@B4rH11PJcOsXxdMPs&dPGRjU@`gRafW2Ntu3x6@#{7#x-xu0y8te|6|;==qft2h zsppIq4V267<@|pLx*^cbBj~_JK7c^i?=BuerGg6Z`CG7CJ*=Vu3bdvIJ#66f3k?`H z^Br%Bcln|Kpau$ouCCu`;pqm78Q=sI4SaSeygUO=(7-SM<=`_G1iG;(zzUjrk>3k} zX7Jn$Jh}y?5@&!j^}bucdw}C10NC2`B7+OOEg@77BJ`6@j zC$UCTfqESC#e8h!FTnu$4g*64KA8(Rp#VQWcGdt5I0MYj8{p@s0O1UL!j?eM049J9 z#I=|WFkb?B1N!`42(+dGzgR#n00Rvn^79$s5F~#XLgqt&1?UJK%|MMOkk7yp$z}lA zVGIIH2k*TF6!`EhKzxW6kFMdMa1ljO1>1!Q7rnwnt7sN3nnfz$q6mtxn?(@7gAc!- z3|6td8(&1-5Ll1EXCr*~I|3W{LfoLhoCG+~{JO^j$2WZoJ3Rd)upI;pJN*Iq7C~TV zcV~ZRF9;ZM9CsDR-CZjGQ!aH!FhB(mGYB%w}<6BS_XX2Mg>uM4%;(NG=U*MPcBHErr0^8>hxVV3~ zfWS6^z@=S6K;JzYV`QzG;r}&40b5N4EM6t1pA$0*Tp@lG0%rcA!1;Fdp#ajck>AvG z-Q9HZh3IRB+27y&N9`!3kIWTAe{Y60^2$QLyBlKQCn-+8BvH(thUJWI22N$QX-jJ zMOvp#QeuV_S~;|YV$E(=6gB8D@|bzO@AZEFxWCu+z3xBm>%KnMH&y?#evJB|0tRpOG(~Ckgkojhg^$5aIce6)2bsIQvVxW zRpXB7l*oRv%4x9{k^z`xoN&9AR0o=dV=kuzag;(mIy>8ql6Z%WZQ0YY1jhTOAEo z_3Y|)Y*#AH)$rcZ_C=4{tE0O~?2>vu(YA=%g+@U~$);#k%V70Al`boxTFVqvV~Sab z*1z41pwvmaK85i~F~P7O6wbv!|8j1m!m(=oJ>%7G=?_Q?qd%v4#nIwt7=f*S6U%)T zgB@V9Y`7UBb_|LP(kBX&U%`*{B*SZ0I+2aLSZyDp8RuQ=w(%(YQvPYkccNto4bhX2 zmFuB+T#Yiv3iS*wPL>#(p-86KS&c(oPqw4JKk7s+0#Tp_a@D|GxY$;d>|G2Jm?XHs zX7jvUS!=WTHpqy^8eistlGpm!F)55^2r}+$(&-uuhPN+m3j9&yW*7SaM{@AS#d{v+ z@3Z_iYTS%6Js=jxu)T+Opt55L33BJgEWa-rH>cNnJ9^O-n4@q-0b%0*EpjHy(SCL_ zHEEJS?t5o8WM6G+tU&US;H&2 z-&$2BFC{)SqOeYANPVIH!B?pqBntcU&*I`gec<$FRGT6q9w(eT=U(g?p=d?+?id1* zs&HUXPy}ThHE8<{Y3PgWg}sWwfbvWItHFGbk-^MGRYmYzjQVzL+-TRV2xTs$(R!!Y zy>adsPX!JXuc+dKD<#X9Bt%+_ynjas{KCNQ3twnIm85vnx3KaK)?WX9% zVz!z;+))DSCx`hHIyf?Dyk}!3P@^EZk2u7P(dv?k51gb1<$=88S~i#+ejdnGj)WcN za}~^?+u^k7UCnBkW9e6AJ8Y8d2Jn-Q7Q)n8C{Q}={4`rI@MhKv;LnZa)0&fY3-=N> zO3W4dsq!MwSpp(=yBaEVQRnnpD=rp`(&Jt}LXyWB+x-{*Xe6<_Lz+^>PQ)}loL~TM z7^T-C^|ufab}exo@3tbb@r%=Jum*wTd|0Ln^Vn8YVPnootEO~|MHhS->GRW>pJ((h49xEIhP9k{0^S( zEIzOC^Q-7TeSFLMo0?wzAs(X+gb9u6cyHdt94{D_&)?ec>*|oj{|M!_1M^5>?!)+uXz@B!dW*iyFVP{XAtS^(DLnzsD`A? zMiFvJz1^;6Mt{l&Ch0=$52wL4ti%&1^B%&h#l#^1Uv!}ig)q|vqX@wbdx}{FH=0+J zLJSJGUpm2m9z&2BHP&G-RUQ5vERBXXtZ3C<=k*N6j#^4^vIM|gF@*J1;)=SIzK-g5 z#~}+qX{hls*XR8A%?PbO#nl@kiBImtlpdmYZeYVr;HyP0`F@f*w7V+@&{;w>@50J+ z22h^T5{idt+W5{zz&UdJ7;>#V^S8IyXS-9;UT5ytyEbTpv$Vj@9bSSwDfvxC_)Y z6I&U$q%4A6`im>-Sg3>gu}@#;f#UKv1;YwhzE?T zt_uEPNELth{w!4dX5xocR`;)=$;Y20zj=E0$JP^x>I1G`ojqYk#97zwj|r-`o$W*g zg(=QnLKL6LadWT)rHA)FUi^5D$v{Mj~{Uz+lP_J#x z*jwihu+(DdyD~+2ZN+fI1!7bTUs9ZKe$o4}cqMT}n-V*$C6l_DtD%M-(4#{#nK{Lb z?>xb#^19WfCk{!CP7T2qYq7+yA6$-`K(a8x)!H>uSJHC%EyCe=zjSc;JE5XX8UsJm zhbj#;q5M!Tn*u+o{5=otWwE}6OPy$#0DfjyOSozU2s?p+v}#>$$y#v4Xrz#?;RO?Es%eWRF*l*27NfOEcLGxRxHSgmzcyk{oFME) zey>uiy=|FvF1An6434HIYlYKTE};PWj+|))VvRPXvG5(mHVBh~Vy`DHVvQbMw<37X zuZ6ssvLFGs0D0$!y@d?ax&5?jAILI>5EA*1M=&7S%8lk4k|Z-jJ(h^SnY~}zHdj9H zPKLY%7(uxJ>z?olR|YfA_yp4>C0g!etYlK7YftudYE5%$im>#2FYGP-NMr2;A;R%7 z4@qSe_=-Zbnv_AOM2MJ)>gXD02Y(-dIWXk;^1@XCPj#VC6YNxp1~G6iRme2aqYB|k znvhP1ZAGA8?c(TjhWPM~7(rUf^ZLisHB#pN$M1b}#XUCi;+>m(Wk$Y#8@(NO+u!HK z;gw4&X?ysOA{QU88#>k>rKr?gy)N&LkOSpOaVc*2Gg|t39`pJ)DBu~8{&8Y(lU{! z{qv7bnp@xMhr7o3Kea5klEetvMJ)eJzg}<}%oio~hID<@Fl?j&98@^ux> zG_I{-+(5P`7+;)>gE_GF(yrB9(#1~elmCp_-f8NMnHhAW003Ggib{lUc2xZfU$3ht i*MPK~{hxG}=LaGP_%WB>c}DwxqitJucvQIyQ~w7dzLr%0 delta 3218 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 R=YN5ho3AVUA7@_be*y77$esWI diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 13ba744ea..88769e045 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1680,6 +1680,8 @@ items.weapon.melee.sai.stats_desc=This is a very fast weapon. items.weapon.melee.sai.ability_name=combo strike items.weapon.melee.sai.ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and deals +35% damage for each time the Duelist has already successfully attacked with melee or thrown weapons in the last 5 turns. items.weapon.melee.sai.desc=Two thin blades meant to be wielded in one hand each. Excellent for tearing down enemies with a flurry of cuts. +items.weapon.melee.sai$combostriketracker.name=combo strike +items.weapon.melee.sai$combostriketracker.desc=The duelist is building combo that can be used to increase the damage of the combo strike ability. Each strike made with a melee or thrown weapon in the last 5 turns will count.\n\nRecent hits: %d. items.weapon.melee.scimitar.name=scimitar items.weapon.melee.scimitar.stats_desc=This is a rather fast weapon. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 2d62bb820..cd906fb6c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -458,7 +458,7 @@ public class Hero extends Char { } if (hit && heroClass == HeroClass.DUELIST && wasEnemy){ - Buff.append( this, Sai.ComboStrikeTracker.class, Sai.ComboStrikeTracker.DURATION); + Buff.append( this, Sai.ComboStrikeTracker.class).addHit(); } return hit; @@ -2023,7 +2023,7 @@ public class Hero extends Char { } if (hit && heroClass == HeroClass.DUELIST && wasEnemy){ - Buff.append( this, Sai.ComboStrikeTracker.class, Sai.ComboStrikeTracker.DURATION); + Buff.affect( this, Sai.ComboStrikeTracker.class).addHit(); } RingOfForce.BrawlersStance brawlStance = buff(RingOfForce.BrawlersStance.class); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java index df2d51dab..13a443714 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Sai.java @@ -32,8 +32,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Bundle; import com.watabou.utils.Callback; import java.util.HashSet; @@ -90,10 +92,11 @@ public class Sai extends MeleeWeapon { wep.beforeAbilityUsed(hero); AttackIndicator.target(enemy); - HashSet buffs = hero.buffs(ComboStrikeTracker.class); - int recentHits = buffs.size(); - for (Buff b : buffs){ - b.detach(); + int recentHits = 0; + ComboStrikeTracker buff = hero.buff(ComboStrikeTracker.class); + if (buff != null){ + recentHits = buff.totalHits(); + buff.detach(); } boolean hit = hero.attack(enemy, 1f + boostPerHit*recentHits, 0, Char.INFINITE_ACCURACY); @@ -112,10 +115,89 @@ public class Sai extends MeleeWeapon { }); } - public static class ComboStrikeTracker extends FlavourBuff{ + public static class ComboStrikeTracker extends Buff { - public static float DURATION = 5f; + { + type = buffType.POSITIVE; + } + public static int DURATION = 6; //to account for the turn the attack is made in + public int[] hits = new int[DURATION]; + + @Override + public int icon() { + //pre-v2.1 saves + if (totalHits() == 0) return BuffIndicator.NONE; + + if (Dungeon.hero.belongings.weapon() instanceof Gloves + || Dungeon.hero.belongings.weapon() instanceof Sai + || Dungeon.hero.belongings.weapon() instanceof Gauntlet + || Dungeon.hero.belongings.secondWep() instanceof Gloves + || Dungeon.hero.belongings.secondWep() instanceof Sai + || Dungeon.hero.belongings.secondWep() instanceof Gauntlet) { + return BuffIndicator.DUEL_COMBO; + } else { + return BuffIndicator.NONE; + } + } + + @Override + public boolean act() { + + //shuffle all hits down one turn + for (int i = 0; i < DURATION; i++){ + if (i == DURATION-1){ + hits[i] = 0; + } else { + hits[i] = hits[i+1]; + } + } + + if (totalHits() == 0){ + detach(); + } + + spend(TICK); + return true; + } + + public void addHit(){ + hits[DURATION-1]++; + } + + public int totalHits(){ + int sum = 0; + for (int i = 0; i < DURATION; i++){ + sum += hits[i]; + } + return sum; + } + + @Override + public String iconTextDisplay() { + return Integer.toString(totalHits()); + } + + @Override + public String desc() { + return Messages.get(this, "desc", totalHits()); + } + + public static String RECENT_HITS = "recent_hits"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put(RECENT_HITS, hits); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + if (bundle.contains(RECENT_HITS)) { + hits = bundle.getIntArray(RECENT_HITS); + } + } } } 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 aa9cc550d..3e2bb4664 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -120,6 +120,7 @@ public class BuffIndicator extends Component { public static final int DUEL_XBOW = 66; public static final int CHALLENGE = 67; public static final int MONK_ENERGY = 68; + public static final int DUEL_COMBO = 69; public static final int SIZE_SMALL = 7; public static final int SIZE_LARGE = 16;