v0.4.3a: reworked glyph of brimstone
This commit is contained in:
parent
a5d835f2f4
commit
0ca487094d
|
@ -87,12 +87,7 @@ public class Burning extends Buff implements Hero.Doom {
|
||||||
|
|
||||||
if (hero.belongings.armor != null && hero.belongings.armor.hasGlyph(Brimstone.class)){
|
if (hero.belongings.armor != null && hero.belongings.armor.hasGlyph(Brimstone.class)){
|
||||||
|
|
||||||
float heal = hero.belongings.armor.level()/5f;
|
Buff.affect(target, Brimstone.BrimstoneShield.class);
|
||||||
if (Random.Float() < heal % 1) heal++;
|
|
||||||
if (heal >= 1 && hero.HP < hero.HT) {
|
|
||||||
hero.sprite.emitter().burst(Speck.factory(Speck.HEALING), (int)heal);
|
|
||||||
hero.HP = Math.min(hero.HT, hero.HP + (int)heal);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@ -138,6 +133,11 @@ public class Burning extends Buff implements Hero.Doom {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
Brimstone.BrimstoneShield brimShield = target.buff(Brimstone.BrimstoneShield.class);
|
||||||
|
if (brimShield != null)
|
||||||
|
brimShield.startDecay();
|
||||||
|
|
||||||
detach();
|
detach();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,12 @@
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs;
|
package com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
|
import com.watabou.utils.Bundle;
|
||||||
|
|
||||||
public class Brimstone extends Armor.Glyph {
|
public class Brimstone extends Armor.Glyph {
|
||||||
|
|
||||||
|
@ -39,4 +43,81 @@ public class Brimstone extends Armor.Glyph {
|
||||||
return ORANGE;
|
return ORANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class BrimstoneShield extends Buff {
|
||||||
|
|
||||||
|
private int shieldAdded;
|
||||||
|
private int lastShield = -1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean act() {
|
||||||
|
Hero hero = (Hero)target;
|
||||||
|
|
||||||
|
//make sure any shielding lost through combat is accounted for
|
||||||
|
if (lastShield != -1 && lastShield > hero.SHLD)
|
||||||
|
shieldAdded = Math.max(0, shieldAdded - (lastShield - hero.SHLD));
|
||||||
|
|
||||||
|
lastShield = hero.SHLD;
|
||||||
|
|
||||||
|
if (hero.belongings.armor == null || !hero.belongings.armor.hasGlyph(Brimstone.class)) {
|
||||||
|
hero.SHLD -= shieldAdded;
|
||||||
|
detach();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int level = hero.belongings.armor.level();
|
||||||
|
|
||||||
|
if (hero.buff(Burning.class) != null){
|
||||||
|
//max shielding equal to the armors level (this does mean no shield at lvl 0)
|
||||||
|
if (hero.SHLD < level) {
|
||||||
|
shieldAdded++;
|
||||||
|
hero.SHLD++;
|
||||||
|
lastShield++;
|
||||||
|
|
||||||
|
//generates 0.2 + 0.1*lvl shield per turn
|
||||||
|
spend( 10f / (2f + level));
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//if shield is maxed, don't wait longer than 1 turn to try again
|
||||||
|
spend( Math.min( TICK, 10f / (2f + level)));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (hero.buff(Burning.class) == null){
|
||||||
|
if (shieldAdded > 0 && hero.SHLD > 0){
|
||||||
|
shieldAdded--;
|
||||||
|
hero.SHLD--;
|
||||||
|
lastShield--;
|
||||||
|
|
||||||
|
//shield decays at a rate of 1 per turn.
|
||||||
|
spend(TICK);
|
||||||
|
} else {
|
||||||
|
detach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startDecay(){
|
||||||
|
//sets the buff to start acting next turn. Invoked by Burning when it expires.
|
||||||
|
spend(-cooldown()+2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String ADDED = "added";
|
||||||
|
private static String LAST = "last";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void storeInBundle(Bundle bundle) {
|
||||||
|
super.storeInBundle(bundle);
|
||||||
|
bundle.put( ADDED, shieldAdded );
|
||||||
|
bundle.put( LAST, lastShield );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void restoreFromBundle(Bundle bundle) {
|
||||||
|
super.restoreFromBundle(bundle);
|
||||||
|
shieldAdded = bundle.getInt( ADDED );
|
||||||
|
lastShield = bundle.getInt( LAST );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ items.armor.glyphs.antimagic.name=%s of anti-magic
|
||||||
items.armor.glyphs.antimagic.desc=This powerful glyph allows armor to apply its defense to most magical attacks as well as physical ones.
|
items.armor.glyphs.antimagic.desc=This powerful glyph allows armor to apply its defense to most magical attacks as well as physical ones.
|
||||||
|
|
||||||
items.armor.glyphs.brimstone.name=%s of brimstone
|
items.armor.glyphs.brimstone.name=%s of brimstone
|
||||||
items.armor.glyphs.brimstone.desc=This glyph protects the wearer and their belongings from fire, with upgrades it even converts the heat into health.
|
items.armor.glyphs.brimstone.desc=This glyph protects the wearer and their belongings from fire, with upgrades it even converts the heat into temporary shielding.
|
||||||
|
|
||||||
items.armor.glyphs.camouflage.name=%s of camouflage
|
items.armor.glyphs.camouflage.name=%s of camouflage
|
||||||
items.armor.glyphs.camouflage.desc=This glyph allows the wearer to blend into tall grass, granting them temporary invisibility.
|
items.armor.glyphs.camouflage.desc=This glyph allows the wearer to blend into tall grass, granting them temporary invisibility.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user