v0.3.0: reworked scroll of recharging & battlemage charging mechanics
This commit is contained in:
parent
ff804668a4
commit
348f16c19b
BIN
assets/buffs.png
BIN
assets/buffs.png
Binary file not shown.
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
@ -86,6 +86,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
|
@ -102,7 +103,6 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect;
|
||||
|
@ -872,18 +872,10 @@ public class Hero extends Char {
|
|||
}
|
||||
break;
|
||||
case BATTLEMAGE:
|
||||
if (wep instanceof Wand) {
|
||||
Wand wand = (Wand)wep;
|
||||
if (wand.curCharges < wand.maxCharges && damage > 0) {
|
||||
|
||||
wand.curCharges++;
|
||||
if (Dungeon.quickslot.contains(wand)) {
|
||||
QuickSlotButton.refresh();
|
||||
}
|
||||
|
||||
ScrollOfRecharging.charge( this );
|
||||
}
|
||||
damage += wand.curCharges;
|
||||
if (wep instanceof Wand || wep instanceof MagesStaff) {
|
||||
//gives wands 50% charge
|
||||
Buff.affect( this, ScrollOfRecharging.Recharging.class, 2f);
|
||||
ScrollOfRecharging.charge( this );
|
||||
}
|
||||
break;
|
||||
case SNIPER:
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
*/
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.scrolls;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
|
@ -27,6 +30,8 @@ import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|||
|
||||
public class ScrollOfRecharging extends Scroll {
|
||||
|
||||
public static final float BUFF_DURATION = 30f;
|
||||
|
||||
{
|
||||
name = "Scroll of Recharging";
|
||||
initials = "Re";
|
||||
|
@ -34,19 +39,15 @@ public class ScrollOfRecharging extends Scroll {
|
|||
|
||||
@Override
|
||||
protected void doRead() {
|
||||
|
||||
int count = curUser.belongings.charge( true );
|
||||
charge( curUser );
|
||||
|
||||
Buff.affect(curUser, Recharging.class, BUFF_DURATION);
|
||||
charge(curUser);
|
||||
|
||||
Sample.INSTANCE.play( Assets.SND_READ );
|
||||
Invisibility.dispel();
|
||||
|
||||
if (count > 0) {
|
||||
GLog.i( "a surge of energy courses through your pack, recharging your wand" + (count > 1 ? "s" : "") );
|
||||
SpellSprite.show( curUser, SpellSprite.CHARGE );
|
||||
} else {
|
||||
GLog.i( "a surge of energy courses through your pack, but nothing happens" );
|
||||
}
|
||||
|
||||
GLog.i( "a surge of energy courses through your body, invigorating your wands.");
|
||||
SpellSprite.show( curUser, SpellSprite.CHARGE );
|
||||
setKnown();
|
||||
|
||||
curUser.spendAndNext( TIME_TO_READ );
|
||||
|
@ -56,7 +57,7 @@ public class ScrollOfRecharging extends Scroll {
|
|||
public String desc() {
|
||||
return
|
||||
"The raw magical power bound up in this parchment will, when released, " +
|
||||
"recharge all of the reader's wands to full power.";
|
||||
"charge up all the users wands over time.";
|
||||
}
|
||||
|
||||
public static void charge( Hero hero ) {
|
||||
|
@ -67,4 +68,28 @@ public class ScrollOfRecharging extends Scroll {
|
|||
public int price() {
|
||||
return isKnown() ? 40 * quantity : super.price();
|
||||
}
|
||||
|
||||
|
||||
public static class Recharging extends FlavourBuff {
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.CHARGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Recharging";
|
||||
}
|
||||
|
||||
//want to process partial turns for this buff, and not count it when it's expiring.
|
||||
//firstly, if this buff has half a turn left, should give out half the benefit.
|
||||
//secondly, recall that buffs execute in random order, so this can cause a problem where we can't simply check
|
||||
//if this buff is still attached, must instead directly check its remaining time, and act accordingly.
|
||||
//otherwise this causes inconsistent behaviour where this may detach before, or after, a wand charger acts.
|
||||
public float remainder() {
|
||||
return Math.min( 1f, this.cooldown());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.wands;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
|
@ -61,7 +62,7 @@ public abstract class Wand extends KindOfWeapon {
|
|||
|
||||
public int maxCharges = initialCharges();
|
||||
public int curCharges = maxCharges;
|
||||
private float partialCharge = 0f;
|
||||
protected float partialCharge = 0f;
|
||||
|
||||
protected Charger charger;
|
||||
|
||||
|
@ -123,7 +124,7 @@ public abstract class Wand extends KindOfWeapon {
|
|||
}
|
||||
|
||||
protected abstract void onZap( Ballistica attack );
|
||||
|
||||
|
||||
@Override
|
||||
public boolean collect( Bag container ) {
|
||||
if (super.collect( container )) {
|
||||
|
@ -395,6 +396,8 @@ public abstract class Wand extends KindOfWeapon {
|
|||
private static final float SCALING_CHARGE_ADDITION = 40f;
|
||||
private static final float NORMAL_SCALE_FACTOR = 0.85f;
|
||||
|
||||
private static final float CHARGE_BUFF_BONUS = 0.25f;
|
||||
|
||||
float scalingFactor = NORMAL_SCALE_FACTOR;
|
||||
|
||||
@Override
|
||||
|
@ -427,6 +430,11 @@ public abstract class Wand extends KindOfWeapon {
|
|||
+ (SCALING_CHARGE_ADDITION * Math.pow(scalingFactor, missingCharges)));
|
||||
|
||||
partialCharge += 1f/turnsToCharge;
|
||||
|
||||
ScrollOfRecharging.Recharging bonus = target.buff(ScrollOfRecharging.Recharging.class);
|
||||
if (bonus != null && bonus.remainder() > 0f){
|
||||
partialCharge += CHARGE_BUFF_BONUS * bonus.remainder();
|
||||
}
|
||||
}
|
||||
|
||||
private void setScaleFactor(float value){
|
||||
|
|
|
@ -67,6 +67,7 @@ public class BuffIndicator extends Component {
|
|||
public static final int THORNS = 31;
|
||||
public static final int FORESIGHT = 32;
|
||||
public static final int VERTIGO = 33;
|
||||
public static final int CHARGE = 34;
|
||||
|
||||
public static final int SIZE = 7;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user