152 lines
4.0 KiB
Java
152 lines
4.0 KiB
Java
/*
|
|
* Pixel Dungeon
|
|
* Copyright (C) 2012-2015 Oleg Dolya
|
|
*
|
|
* Shattered Pixel Dungeon
|
|
* Copyright (C) 2014-2015 Evan Debenham
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*/
|
|
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
|
|
|
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
|
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
import com.watabou.utils.Random;
|
|
|
|
public class CapeOfThorns extends Artifact {
|
|
|
|
{
|
|
name = "Cape of Thorns";
|
|
image = ItemSpriteSheet.ARTIFACT_CAPE;
|
|
|
|
level = 0;
|
|
levelCap = 10;
|
|
|
|
charge = 0;
|
|
chargeCap = 100;
|
|
cooldown = 0;
|
|
|
|
defaultAction = "NONE";
|
|
}
|
|
|
|
@Override
|
|
protected ArtifactBuff passiveBuff() {
|
|
return new Thorns();
|
|
}
|
|
|
|
@Override
|
|
public String desc() {
|
|
String desc = "These collapsed sheets of metal from the DM-300 have formed together into a rigid wearable " +
|
|
"cape. The metal is old and coated in thick flakes of rust. It seems to store a deep energy, " +
|
|
"perhaps it has some of the DM-300's power?";
|
|
if (isEquipped( Dungeon.hero )) {
|
|
desc += "\n\n";
|
|
if (cooldown == 0)
|
|
desc += "The cape feels reassuringly heavy on your shoulders. You're not sure if it will directly " +
|
|
"help you in a fight, but it seems to be gaining energy from the damage you take.";
|
|
else
|
|
desc += "The cape seems to be releasing some stored energy, " +
|
|
"it is radiating a protective power at all angles. ";
|
|
}
|
|
|
|
return desc;
|
|
}
|
|
|
|
public class Thorns extends ArtifactBuff{
|
|
|
|
@Override
|
|
public boolean act(){
|
|
if (cooldown > 0) {
|
|
cooldown--;
|
|
if (cooldown == 0) {
|
|
BuffIndicator.refreshHero();
|
|
GLog.w("Your Cape becomes inert again.");
|
|
}
|
|
updateQuickslot();
|
|
}
|
|
spend(TICK);
|
|
return true;
|
|
}
|
|
|
|
public int proc(int damage, Char attacker, Char defender){
|
|
if (cooldown == 0){
|
|
charge += damage*(0.5+level*0.05);
|
|
if (charge >= chargeCap){
|
|
charge = 0;
|
|
cooldown = 10+level;
|
|
GLog.p("Your Cape begins radiating energy, you feel protected!");
|
|
BuffIndicator.refreshHero();
|
|
}
|
|
}
|
|
|
|
if (cooldown != 0){
|
|
int deflected = Random.NormalIntRange(0, damage);
|
|
damage -= deflected;
|
|
|
|
if (attacker != null && Level.adjacent(attacker.pos, defender.pos)) {
|
|
attacker.damage(deflected, this);
|
|
}
|
|
|
|
exp+= deflected;
|
|
|
|
if (exp >= (level+1)*5 && level < levelCap){
|
|
exp -= (level+1)*5;
|
|
upgrade();
|
|
GLog.p("Your Cape grows stronger!");
|
|
}
|
|
|
|
}
|
|
updateQuickslot();
|
|
return damage;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Thorns";
|
|
}
|
|
|
|
@Override
|
|
public String desc() {
|
|
return "Your cape is radiating energy, surrounding you in a field of deflective force!\n" +
|
|
"\n" +
|
|
"All damage you receive is reduced while the thorns effect is active. Additionally, " +
|
|
"if the attacker is next to you, the reduced amount is deflected back at the attacker.\n" +
|
|
"\n" +
|
|
"Your cape will continue radiating energy for " + dispTurns(cooldown) + ".";
|
|
}
|
|
|
|
@Override
|
|
public int icon() {
|
|
if (cooldown == 0)
|
|
return BuffIndicator.NONE;
|
|
else
|
|
return BuffIndicator.THORNS;
|
|
}
|
|
|
|
@Override
|
|
public void detach(){
|
|
cooldown = 0;
|
|
charge = 0;
|
|
super.detach();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|