From 0911953ffacca6eb014172a52b72fa617c3245b9 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 2 Jun 2022 14:00:16 -0400 Subject: [PATCH] v1.3.0: very early impl on ascension challenge debuff --- core/src/main/assets/interfaces/buffs.png | Bin 1454 -> 1470 bytes .../main/assets/interfaces/large_buffs.png | Bin 3040 -> 3122 bytes .../shatteredpixeldungeon/actors/Char.java | 9 +- .../actors/buffs/AscensionChallenge.java | 106 ++++++++++++++++++ .../actors/mobs/DM100.java | 2 + .../actors/mobs/Eye.java | 5 +- .../actors/mobs/Shaman.java | 2 + .../actors/mobs/Skeleton.java | 4 +- .../actors/mobs/Spinner.java | 6 +- .../actors/mobs/Warlock.java | 2 + .../ui/BuffIndicator.java | 1 + 11 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/AscensionChallenge.java diff --git a/core/src/main/assets/interfaces/buffs.png b/core/src/main/assets/interfaces/buffs.png index 40802de80919970e66f0b549aa02cecf050b5378..03e854791f6c5aa4c287b8e21cf87dea3c97838a 100644 GIT binary patch delta 1148 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 delta 2670 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 F{{u#= defRoll; } @@ -509,6 +512,7 @@ public abstract class Char extends Actor { damage *= buff.meleeDamageFactor(); buff.onAttackProc( enemy ); } + damage = Math.round( damage * AscensionChallenge.statModifier(this)); return damage; } @@ -557,6 +561,7 @@ public abstract class Char extends Actor { for (ChampionEnemy buff : buffs(ChampionEnemy.class)){ dmg = (int) Math.ceil(dmg * buff.damageTakenFactor()); } + dmg = (int)Math.ceil(dmg / AscensionChallenge.statModifier(this)); if (!(src instanceof LifeLink) && buff(LifeLink.class) != null){ HashSet links = buffs(LifeLink.class); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/AscensionChallenge.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/AscensionChallenge.java new file mode 100644 index 000000000..18ef890df --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/AscensionChallenge.java @@ -0,0 +1,106 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2022 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 + */ + +package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.*; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; + +import java.util.HashMap; + +public class AscensionChallenge extends Buff{ + + { + revivePersists = true; + } + + private static HashMap, Float> modifiers = new HashMap<>(); + static { + modifiers.put(Rat.class, 10f); + modifiers.put(Snake.class, 8f); + modifiers.put(Gnoll.class, 8f); + modifiers.put(Swarm.class, 7f); + modifiers.put(Crab.class, 6f); + modifiers.put(Slime.class, 6f); + + modifiers.put(Skeleton.class, 4.5f); + modifiers.put(Thief.class, 4.5f); + modifiers.put(DM100.class, 4f); + modifiers.put(Guard.class, 3.5f); + modifiers.put(Necromancer.class, 3.5f); + + modifiers.put(Bat.class, 2.5f); + modifiers.put(Brute.class, 2.25f); + modifiers.put(Shaman.class, 2.25f); + modifiers.put(Spinner.class, 2f); + modifiers.put(DM200.class, 2f); + + modifiers.put(Ghoul.class, 1.67f); + modifiers.put(Elemental.class, 1.5f); + modifiers.put(Warlock.class, 1.33f); + modifiers.put(Monk.class, 1.33f); + modifiers.put(Golem.class, 1.25f); + + modifiers.put(RipperDemon.class, 1.2f); + modifiers.put(Succubus.class, 1.2f); + modifiers.put(Eye.class, 1f); + modifiers.put(Scorpio.class, 1f); + } + + public static float statModifier(Char ch){ + if (Dungeon.hero.buff(AscensionChallenge.class) == null){ + return 1; + } + + for (Class cls : modifiers.keySet()){ + if (ch.getClass().isAssignableFrom(cls)){ + return modifiers.get(cls); + } + } + + return 1; + } + + //TODO lots of impl still to do here + + //for Exp: treat all enemies with multiplier as needing 14 EXP (except ghouls/rippers, which are 7/10) + + //For damage scaling effects: Treat as if floor 26 (bombs, toxic gas, corrosion, electricity, sac fire(?) + // Burning, ooze, + + //for allies/enemies with depth scaling effects, treat as if floor 26 + // How though? + + @Override + public int icon() { + return BuffIndicator.AMULET; + } + + @Override + public void tintIcon(Image icon) { + icon.hardlight(1, 1, 0); + } + + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java index b8dc3e8c7..38867ee01 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -91,6 +92,7 @@ public class DM100 extends Mob implements Callback { if (hit( this, enemy, true )) { int dmg = Random.NormalIntRange(3, 10); + dmg = Math.round(dmg * AscensionChallenge.statModifier(this)); enemy.damage( dmg, new LightningBolt() ); if (enemy.sprite.visible) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java index 94ebfb513..7db029380 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PurpleParticle; @@ -177,7 +178,9 @@ public class Eye extends Mob { } if (hit( this, ch, true )) { - ch.damage( Random.NormalIntRange( 30, 50 ), new DeathGaze() ); + int dmg = Random.NormalIntRange( 30, 50 ); + dmg = Math.round(dmg * AscensionChallenge.statModifier(this)); + ch.damage( dmg, new DeathGaze() ); if (Dungeon.level.heroFOV[pos]) { ch.sprite.flash(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java index ad667bce6..baca38d11 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vulnerable; @@ -117,6 +118,7 @@ public abstract class Shaman extends Mob { } int dmg = Random.NormalIntRange( 6, 15 ); + dmg = Math.round(dmg * AscensionChallenge.statModifier(this)); enemy.damage( dmg, new EarthenBolt() ); if (!enemy.isAlive() && enemy == Dungeon.hero) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Skeleton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Skeleton.java index d3171865b..926b96048 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Skeleton.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Skeleton.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm; @@ -68,7 +69,8 @@ public class Skeleton extends Mob { for (int i = 0; i < PathFinder.NEIGHBOURS8.length; i++) { Char ch = findChar( pos + PathFinder.NEIGHBOURS8[i] ); if (ch != null && ch.isAlive()) { - int damage = Random.NormalIntRange(6, 12); + int damage = Math.round(Random.NormalIntRange(6, 12)); + damage = Math.round( damage * AscensionChallenge.statModifier(this)); damage = Math.max( 0, damage - (ch.drRoll() + ch.drRoll()) ); ch.damage( damage, this ); if (ch == Dungeon.hero && !ch.isAlive()) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java index 7d0b2de9d..0c1b1e343 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Spinner.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Web; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Dread; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison; @@ -119,7 +120,10 @@ public class Spinner extends Mob { public int attackProc(Char enemy, int damage) { damage = super.attackProc( enemy, damage ); if (Random.Int(2) == 0) { - Buff.affect(enemy, Poison.class).set(Random.IntRange(7, 8) ); + int duration = Random.IntRange(7, 8); + //we only use half the ascension modifier here as total poison dmg doesn't scale linearly + duration = Math.round(duration * (AscensionChallenge.statModifier(this)/2f + 0.5f)); + Buff.affect(enemy, Poison.class).set(duration); webCoolDown = 0; state = FLEEING; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Warlock.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Warlock.java index 800b061cc..27645ddd2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Warlock.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Warlock.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Degrade; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; @@ -110,6 +111,7 @@ public class Warlock extends Mob implements Callback { } int dmg = Random.NormalIntRange( 12, 18 ); + dmg = Math.round(dmg * AscensionChallenge.statModifier(this)); enemy.damage( dmg, new DarkBolt() ); if (enemy == Dungeon.hero && !enemy.isAlive()) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java index c142249b5..a70bcc0a8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -109,6 +109,7 @@ public class BuffIndicator extends Component { public static final int ENDURE = 56; public static final int INVERT_MARK = 57; public static final int NATURE_POWER= 58; + public static final int AMULET = 59; public static final int SIZE_SMALL = 7; public static final int SIZE_LARGE = 16;