v2.5.3: stone of aggression rebalanced:
- now has full duration against regular enemies - bosses still have 1/4 duration, and now also take 1/2 dmg - Yog specifically takes 1/4 damage - also fixed a bug where aggro stone would cause Yog minions to turn on each other
This commit is contained in:
@@ -1262,7 +1262,7 @@ items.stones.inventorystone.ac_use=USE
|
||||
items.stones.runestone$placeholder.name=runestone
|
||||
|
||||
items.stones.stoneofaggression.name=stone of aggression
|
||||
items.stones.stoneofaggression.desc=When this stone is thrown at an ally or enemy, all nearby enemies will be forced to attack that character for a short time.\n\nWhen used on enemies, the magic will only last for a few turns, but when used on yourself or allies it will last significantly longer.
|
||||
items.stones.stoneofaggression.desc=When this stone is thrown at an ally or enemy, all nearby enemies will be forced to attack that character for a short time.\n\nBoss enemies can resist the effect however, reducing the duration significantly and taking less damage from their minion's attacks.
|
||||
items.stones.stoneofaggression$aggression.name=targeted
|
||||
items.stones.stoneofaggression$aggression.desc=Manipulative magic is forcing all nearby enemies to attack this character.\n\nTurns remaining: %s.
|
||||
|
||||
|
||||
@@ -86,6 +86,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Elemental;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollGeomancer;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Necromancer;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Tengu;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.YogDzewa;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.PrismaticImage;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
|
||||
@@ -103,6 +104,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRetributio
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfChallenge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPsionicBlast;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAggression;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFireblast;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFrost;
|
||||
@@ -430,6 +432,17 @@ public abstract class Char extends Actor {
|
||||
if ( buff(Weakness.class) != null ){
|
||||
dmg *= 0.67f;
|
||||
}
|
||||
|
||||
//characters influenced by aggression deal 1/2 damage to bosses
|
||||
if ( enemy.buff(StoneOfAggression.Aggression.class) != null
|
||||
&& enemy.alignment == alignment
|
||||
&& (Char.hasProp(enemy, Property.BOSS) || Char.hasProp(enemy, Property.MINIBOSS))){
|
||||
dmg *= 0.5f;
|
||||
//yog-dzewa specifically takes 1/4 damage
|
||||
if (enemy instanceof YogDzewa){
|
||||
dmg *= 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
int effectiveDamage = enemy.defenseProc( this, Math.round(dmg) );
|
||||
//do not trigger on-hit logic if defenseProc returned a negative value
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PurpleParticle
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAggression;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfDisintegration;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.DisintegrationTrap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
@@ -192,6 +193,17 @@ public class Eye extends Mob {
|
||||
if (hit( this, ch, true )) {
|
||||
int dmg = Random.NormalIntRange( 30, 50 );
|
||||
dmg = Math.round(dmg * AscensionChallenge.statModifier(this));
|
||||
|
||||
//logic for fists or Yog-Dzewa taking 1/2 or 1/4 damage from aggression stoned minions
|
||||
if ( ch.buff(StoneOfAggression.Aggression.class) != null
|
||||
&& ch.alignment == alignment
|
||||
&& (Char.hasProp(ch, Property.BOSS) || Char.hasProp(ch, Property.MINIBOSS))){
|
||||
dmg *= 0.5f;
|
||||
if (ch instanceof YogDzewa){
|
||||
dmg *= 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
ch.damage( dmg, new DeathGaze() );
|
||||
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAggression;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
@@ -117,6 +118,14 @@ public class Warlock extends Mob implements Callback {
|
||||
|
||||
int dmg = Random.NormalIntRange( 12, 18 );
|
||||
dmg = Math.round(dmg * AscensionChallenge.statModifier(this));
|
||||
|
||||
//logic for DK taking 1/2 damage from aggression stoned minions
|
||||
if ( enemy.buff(StoneOfAggression.Aggression.class) != null
|
||||
&& enemy.alignment == alignment
|
||||
&& (Char.hasProp(enemy, Property.BOSS) || Char.hasProp(enemy, Property.MINIBOSS))){
|
||||
dmg *= 0.5f;
|
||||
}
|
||||
|
||||
enemy.damage( dmg, new DarkBolt() );
|
||||
|
||||
if (enemy == Dungeon.hero && !enemy.isAlive()) {
|
||||
|
||||
@@ -503,10 +503,12 @@ public class YogDzewa extends Mob {
|
||||
|
||||
@Override
|
||||
public void aggro(Char ch) {
|
||||
for (Mob mob : (Iterable<Mob>)Dungeon.level.mobs.clone()) {
|
||||
if (mob != ch && Dungeon.level.distance(pos, mob.pos) <= 4 &&
|
||||
(mob instanceof Larva || mob instanceof YogRipper || mob instanceof YogEye || mob instanceof YogScorpio)) {
|
||||
mob.aggro(ch);
|
||||
if (ch.alignment != alignment || !(ch instanceof Larva || ch instanceof YogRipper || ch instanceof YogEye || ch instanceof YogScorpio)) {
|
||||
for (Mob mob : (Iterable<Mob>) Dungeon.level.mobs.clone()) {
|
||||
if (mob != ch && Dungeon.level.distance(pos, mob.pos) <= 4 && mob.alignment == alignment &&
|
||||
(mob instanceof Larva || mob instanceof YogRipper || mob instanceof YogEye || mob instanceof YogScorpio)) {
|
||||
mob.aggro(ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ public class StoneOfAggression extends Runestone {
|
||||
Char ch = Actor.findChar( cell );
|
||||
|
||||
if (ch != null) {
|
||||
if (ch.alignment == Char.Alignment.ENEMY) {
|
||||
if (Char.hasProp(ch, Char.Property.BOSS) || Char.hasProp(ch, Char.Property.MINIBOSS)) {
|
||||
Buff.prolong(ch, Aggression.class, Aggression.DURATION / 4f);
|
||||
} else {
|
||||
Buff.prolong(ch, Aggression.class, Aggression.DURATION);
|
||||
@@ -80,7 +80,7 @@ public class StoneOfAggression extends Runestone {
|
||||
|
||||
@Override
|
||||
public float iconFadePercent() {
|
||||
if (target.alignment == Char.Alignment.ENEMY){
|
||||
if (Char.hasProp(target, Char.Property.BOSS) || Char.hasProp(target, Char.Property.MINIBOSS)){
|
||||
return Math.max(0, (DURATION/4f - visualcooldown()) / (DURATION/4f));
|
||||
} else {
|
||||
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
|
||||
|
||||
Reference in New Issue
Block a user