From 4a302a6079b7450171e40b68bf9caeea61d9ed9a Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 4 Jun 2020 16:59:32 -0400 Subject: [PATCH] v0.8.1: added a new ability to the wand of magic missile --- core/src/main/assets/interfaces/buffs.png | Bin 1240 -> 1242 bytes .../main/assets/interfaces/large_buffs.png | Bin 2535 -> 2533 bytes .../assets/messages/items/items.properties | 6 +- core/src/main/assets/sprites/item_icons.png | Bin 1581 -> 1575 bytes .../actors/buffs/Recharging.java | 5 ++ .../items/wands/Wand.java | 19 +++++- .../items/wands/WandOfMagicMissile.java | 60 ++++++++++++++++++ .../shatteredpixeldungeon/ui/ItemSlot.java | 2 +- 8 files changed, 88 insertions(+), 4 deletions(-) diff --git a/core/src/main/assets/interfaces/buffs.png b/core/src/main/assets/interfaces/buffs.png index df34f6eb31edc3574e7a73e3739fb872cc4a4a3f..abe8292e0769d57a23f56069a6f898a3171bf8ad 100644 GIT binary patch delta 967 zcmV;&133KH3EByeBmwi0CFK^GnVGC{W1+>7UK)UtD9O7s{|giKlan0*A%BEPL_t(| z0eq8%qQWo?Md#ZK&fIdDPaLDOx(JttMVHhUb5^TW{T)`9m1iFHc6U~IV zun?AlC9H(Cu-RzZ*7yA_3j~%0fzVI_Q4~QSCZgDOk~B*b$IWqwkZ~FG%CW#;IDef^hXcb{3e0APb0Ux= zP$OpqAPa%)90{ZXN}x^hg+diuArhFBO58Oc0{uP=FyCO{5P?+_0T}2O@cMDY3DAHY z;QS;3UOxp0JMa{T1kwc1047ixmzV(OOCU)=*KcP9elmbW00t@{<|iFs2|P;3`4C_L zx&>!CzhAyVPao6@k+c9 zCSHiw*8u`}@j<|6MmTH-5276iyxRaD9O2oH2`unHTu`7b0fx!PJzhArv=t7%{jM+I z2omt9TW06}kB2|*?`*&T5kL%MA)rV7hY-eocqOC)oPQ4i8X$q?YRLrf#q|ZkmKmY& zqs;vuKe%uFd-o0oaRNqzaKK^z3)y#V;$9iHRA9AQuU4k7uAjh%GYLQdY;dqC{~sRA4)B$iCIEqJC&0`6aJmCZKtIzX?4k}R0p0bq1Jt>G39+471^@p2OIJZq_&-|Z p0>J?WqaY3#b-<_tMjbHf008n|V?(zezqkMZ002ovPDHLkV1jAAr6&LY delta 965 zcmV;$13LWL3D^mcBmwY|CFK*WabuyykzN{rlPJl%Gylv;>t~Z70U>{dNkljEvY744d>`#9vP+zHQ3mOeZ!22KL z8b_!k0SQe15m-|K(GLj}xzr#0@b++D20%Q4M4(<@VG7?R5YNCm14t5xK!u-Y0D=jW zQ3i=v6j)_RU|0eh?7u;QQS#jkd^!c$Y&HxbYw%Ox1`-IBoPyf#rvT2Tv*m0%JI<~% z;_Ny54uAu$L+5|UId)E*yki8X1}70HmqeM(&m?dzwze-Ww=XX!&~CRW&}p|j6gUsH zHzXv`4FbJ`9tEy=ey;ig*Fpj}61cs)ySvSwLhbE7Kml5~K$xPB0+(WYr+sht?Va8B zuC9?S6$L`Ef0qX6ot~cdaF{uy!QsQBcsM54$Face-P3>5)7>r1Ac0N?xWA7Dk_67g zCjm2~!0s~>NCZ5AuGl{~IAtCD5qLa0(&haraC1Wg_6H5@6wDwI7>93x?w>18Kn9ut z_3tO3`jroX$F5Dv;+MaxDoLTu)W40o&gH{|5G4=zdr@1Faqb(G2C(BG@H!^7aVioY&hnO zJEIPqQD6JTv+9UXq5ufO%j>VCoBQk00000NkvXXu0mjfJc6mK diff --git a/core/src/main/assets/interfaces/large_buffs.png b/core/src/main/assets/interfaces/large_buffs.png index d52d6374a0adbdb2d8833637df4ad2f1afbcf502..74d8333798691b88cb7780c541b85f0ff504e644 100644 GIT binary patch delta 2260 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 delta 1233 zcmV;?1TOoh46O{1Bmo7HB`yQEkw=kMP6Ggu0Fk7J2>7-oqyPW_R+BRUEt6jXEq~lP zF8Tlf1c6CJK~#7F?3RUcBRdd9kK>U^arDN_5a#^<-@S&au6ekV-GZglZYg|k?zGB6 z=wMt(LDxX35Rw)2j6SwF1A-xy0gMzrL+)gROUBZ4udcuxBl_Q1cB581Z#dDJg|6^fUt8g2~TJAEu^n4r;!B1_GY}A%%V)-w6Yz zKf{?$acVwE^At3x_+JJSPk`V2<~P6j@tGr30>(lLmdmAe*T7h<5jF~22Y*s3D7)Pb zWxwAe?Iu7a|i?R?zmow{K^biZ>6v<=3uYrzLPTTY~4m*KyU*K4*P?w zEYS`FD_H%_z*d@+AgOScYV7%#vvfQC)9D1$>C_`s{+WP8AQ|WbIO7HcTN5SeukAd0 z4+6468^i#@^qOV@OT4;<4S#@za6X^S#1_vW6$-*mgm-uZ7%la~fDtng1S=l{!A!&q zkT7;qwrAh-QL3GRlP3VgDF_0Qr^(hK2zD4Yg!~wcP%7)V8QBC1Lj#Z*M7g=q7u??6 z-Q8lOf?c0c?jIf=?tw>zHux>R@`}4*7wl{_C`sf~W9T2e zAK%{I-`*Zu=?f7-+>V#Z{}>ScEDlJJ%s`R?JM zK#^+lq0k0-0yKzIAb%CaDF}i;+p(A3H1Z${<3Fhv8L6M4y`3%Q9x$f4#y~o@VZ!@A z$`r|zWTaWNva{4*{nxHfhtpnE{2%V<=;-+L`~~!S;IZHDKY{@;BpH!+LgVom@K9BN z38vF2@HM6ddGAYs$G%5lFrZ?<3^1RMAn%0Zr>Cd!$Nh`N1b?PC;923h-Tr{yFX-p1 z1~D)j!e}%KgS-=_0II5bz+^HB1Ezn+;H&52xlIOn?@NJ9z##tefZ=TRpTT@SH-aw^ z2D!filf`0Tk_k{0RZ(a|2w=JF^_I)*fK0$mpoT~wUfu~afee61AYOK$eF7qa_aF>b99U5wkH;FP(;C=rZBdrrLDT$z6!7ZJ zE5-Z!d(m=#Knhg(4yzbu$73iAt=H=?V6)wX0lV|L+<#$zxiovEz>C+nS1;`adciXK zm-qfm!0K=~tng2LtbbyCI-RUx3(jR(I&*27#>MqpaK+mV6fFZF1d#Xs>_8?UB8UKp z1mfA;B7pC^^1Lhgv2QN>hA_DLg9K6_@BK-3Kt%A9-v%daGlDQEAq*P0UisL8))B-n v;D1>GGbTegxu*m)+>>8H%x9pZqod lvl){ + return buff.level(); + } + } + return lvl; + } + public void updateLevel() { maxCharges = Math.min( initialCharges() + level(), 10 ); curCharges = Math.min( curCharges, maxCharges ); @@ -318,6 +330,11 @@ public abstract class Wand extends Item { } curCharges -= cursed ? 1 : chargesPerCast(); + + WandOfMagicMissile.MagicCharge buff = curUser.buff(WandOfMagicMissile.MagicCharge.class); + if (buff != null && buff.level() > super.buffedLvl()){ + buff.detach(); + } if (curUser.heroClass == HeroClass.MAGE) levelKnown = true; updateQuickslot(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java index 59634b4ed..ce2993d2b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging; import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; @@ -56,6 +57,14 @@ public class WandOfMagicMissile extends DamageWand { ch.sprite.burst(0xFFFFFFFF, buffedLvl() / 2 + 2); + //apply the magic charge buff if we have another wand in inventory of a lower level, or already have the buff + for (Wand.Charger wandCharger : curUser.buffs(Wand.Charger.class)){ + if (wandCharger.wand().buffedLvl() < buffedLvl() || curUser.buff(MagicCharge.class) != null){ + Buff.prolong(curUser, MagicCharge.class, MagicCharge.DURATION).setLevel(buffedLvl()); + break; + } + } + } else { Dungeon.level.pressCell(bolt.collisionPos); } @@ -72,4 +81,55 @@ public class WandOfMagicMissile extends DamageWand { return 3; } + public static class MagicCharge extends FlavourBuff { + + { + type = buffType.POSITIVE; + announced = true; + } + + public static float DURATION = 4f; + + private int level = 0; + + public void setLevel(int level){ + this.level = Math.max(level, this.level); + } + + @Override + public void detach() { + super.detach(); + QuickSlotButton.refresh(); + } + + public int level(){ + return this.level; + } + + @Override + public int icon() { + return BuffIndicator.RECHARGING; + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(0.2f, 0.6f, 1f); + } + + @Override + public float iconFadePercent() { + return Math.max(0, (DURATION - visualcooldown()) / DURATION); + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", level(), dispTurns()); + } + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java index 705d8a12e..18d9dc7bf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java @@ -225,7 +225,7 @@ public class ItemSlot extends Button { int trueLvl = item.visiblyUpgraded(); int buffedLvl = item.buffedVisiblyUpgraded(); - if (trueLvl != 0 && buffedLvl != 0) { + if (trueLvl != 0 || buffedLvl != 0) { level.text( Messages.format( TXT_LEVEL, buffedLvl ) ); level.measure(); if (trueLvl == buffedLvl || buffedLvl <= 0) {