From a2a39d92a125b61b5bb0f673bbfc914e445903e4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 24 Sep 2024 16:07:36 -0400 Subject: [PATCH] v2.5.3: buffed all alchemy bombs --- .../assets/messages/items/items.properties | 24 ++++----- core/src/main/assets/sprites/items.png | Bin 24305 -> 24305 bytes .../ShatteredPixelDungeon.java | 8 +++ .../items/bombs/ArcaneBomb.java | 31 ++++++----- .../items/bombs/Bomb.java | 36 +++++++------ .../items/bombs/Firebomb.java | 14 +++-- .../{ShockBomb.java => FlashBangBomb.java} | 50 ++++++++++-------- .../items/bombs/FrostBomb.java | 7 ++- .../items/bombs/HolyBomb.java | 13 +++-- .../items/bombs/Noisemaker.java | 5 ++ .../items/bombs/RegrowthBomb.java | 11 ++-- .../items/bombs/ShrapnelBomb.java | 14 +++-- .../bombs/{Flashbang.java => SmokeBomb.java} | 41 +++++++------- .../items/bombs/WoollyBomb.java | 9 +++- .../journal/Catalog.java | 8 +-- .../sprites/ItemSpriteSheet.java | 8 +-- 16 files changed, 172 insertions(+), 107 deletions(-) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/{ShockBomb.java => FlashBangBomb.java} (67%) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/{Flashbang.java => SmokeBomb.java} (59%) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index e7f6524c0..61e50926d 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -476,7 +476,7 @@ items.bags.magicalholster.desc=This slim holster is made from some exotic animal ###bombs items.bombs.arcanebomb.name=arcane bomb -items.bombs.arcanebomb.desc=This bomb has been imbued with arcane properties. It will explode into a powerful blast similar to Goo's pumped up attack. This blast penetrates armor and reaches further than a regular bomb's explosion. +items.bombs.arcanebomb.desc=This bomb has been imbued with arcane properties. It will explode into a powerful blast similar to Goo's pumped up attack, dealing _%1$d-%2$d magical damage_ to anything within 2 tiles. items.bombs.bomb.name=bomb items.bombs.bomb.ac_lightthrow=LIGHT & THROW @@ -490,32 +490,32 @@ items.bombs.bomb$doublebomb.name=two bombs items.bombs.bomb$doublebomb.desc=A stack of two hefty black powder bombs, looks like you get one free! items.bombs.firebomb.name=firebomb -items.bombs.firebomb.desc=This bomb has been modified to burst into a sustained flame in a larger area when it explodes. +items.bombs.firebomb.desc=This bomb has been modified to explode in a larger area, dealing _%1$d-%2$d damage_ and spreading sustained flame within 2 tiles. -items.bombs.flashbang.name=flashbang -items.bombs.flashbang.desc=This customized bomb will erupt into a burst of blinding light when it explodes. Anything nearby will be disoriented based on how close it was to the bomb. +items.bombs.flashbangbomb.name=flashbang +items.bombs.flashbangbomb.desc=This customized bomb will erupt into a blast of light, sound, and electricity when it explodes. Anything within 2 tiles will take _%1$d-%2$d damage_ from the explosion, an additional 25%% damage from the electricity, and be stunned for 10 turns. items.bombs.frostbomb.name=frost bomb -items.bombs.frostbomb.desc=This bomb has been modified to burst into a sustained gust of freezing air in a larger area when it explodes. +items.bombs.frostbomb.desc=This bomb has been modified to explode in a larger area, dealing _%1$d-%2$d damage_ and spreading a sustained gust of freezing air within 2 tiles. items.bombs.holybomb.name=holy bomb -items.bombs.holybomb.desc=This bomb has been modified to flash holy light in a larger area when it explodes, dealing bonus damage to undead and demonic enemies. +items.bombs.holybomb.desc=This bomb has been modified to flash holy light in a larger area when it explodes. Anything within 2 tiles will take _%1$d-%2$d damage_ from the explosion, and undead or demonic enemies will take an additional 50%% damage from the holy light. items.bombs.noisemaker.name=noisemaker -items.bombs.noisemaker.desc=This customized bomb will repeatedly make noise when its fuse runs out. When something touches the bomb, it will explode! +items.bombs.noisemaker.desc=This customized bomb will repeatedly make noise when its fuse runs out. When something touches the bomb, it will explode and deal _%1$d-%2$d damage_ to anything within 2 tiles! items.bombs.noisemaker.desc_burning=The noisemaker is ticking away, it'll explode when something gets near! -items.bombs.shockbomb.name=shock bomb -items.bombs.shockbomb.desc=This bomb has been modified to unleash bolts of electricity when it explodes. Anything nearby will be damaged and stunned based on how close it was to the bomb. +items.bombs.smokebomb.name=smoke bomb +items.bombs.smokebomb.desc=This bomb has been modified to spew a thick cloud of gas as the same time as exploding. It will deal _%1$d-%2$d damage_ and spread shrouding fog within 2 tiles. items.bombs.regrowthbomb.name=regrowth bomb -items.bombs.regrowthbomb.desc=This customized bomb will splash life-giving liquid all around it instead of exploding. The area caught in the blast will rapidly sprout grass and plants. Yourself and any allies caught in the blast will be healed as if they had drank a potion of healing. +items.bombs.regrowthbomb.desc=This customized bomb will splash life-giving liquid everywhere within 3 tiles instead of exploding. The area caught in the blast will rapidly sprout grass and plants. Yourself and any allies caught in the blast will be healed as if they had drank a potion of healing. items.bombs.shrapnelbomb.name=shrapnel bomb -items.bombs.shrapnelbomb.desc=This bomb has been modified with scraps of DM-300's metal, which will fragment and fly everywhere when it explodes, damaging anything in a huge range around the bomb. You had better hide behind something when using it... +items.bombs.shrapnelbomb.desc=This bomb has been modified with scraps of DM-300's metal, which will fragment and fly everywhere when it explodes, dealing _%1$d-%2$d damage_ in a huge range around the bomb. You had better hide behind something when using it... items.bombs.woollybomb.name=woolly bomb -items.bombs.woollybomb.desc=This customized bomb will create a wide field of magical sheep after exploding. These sheep will block movement and persist for a very long time! The sheep will not last as long in the presence of powerful enemies though, and can be manually dispelled sooner by interacting with them. +items.bombs.woollybomb.desc=This customized bomb will create a wide field of magical sheep after exploding. The explosion will deal _%1$d-%2$d damage_ to anything within 2 tiles. The sheep will block movement and persist for a very long time! The sheep will not last as long in the presence of powerful enemies though, and can be manually dispelled sooner by interacting with them. ###food items.food.berry.name=dungeon berry diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index a107a6da46bb8cad38296748440a3dda8a6fb3fd..2c3e451862ff9db7ad32d61b770b9b554eb18227 100644 GIT binary patch literal 24305 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 cdvifrM5R%&S~RGKm#P^XdEM6^V7t=K+(Cjq?`~ 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 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java index 9703ef92a..be329f124 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java @@ -49,6 +49,14 @@ public class ShatteredPixelDungeon extends Game { public ShatteredPixelDungeon( PlatformSupport platform ) { super( sceneClass == null ? WelcomeScene.class : sceneClass, platform ); + //pre-v2.5.2 + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.bombs.FlashBangBomb.class, + "com.shatteredpixel.shatteredpixeldungeon.items.bombs.ShockBomb" ); + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.bombs.SmokeBomb.class, + "com.shatteredpixel.shatteredpixeldungeon.items.bombs.FlashBang" ); + //pre-v2.5.0 com.watabou.utils.Bundle.addAlias( com.shatteredpixel.shatteredpixeldungeon.actors.mobs.MobSpawner.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java index 9cba0ad38..895b213b1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java @@ -42,31 +42,37 @@ public class ArcaneBomb extends Bomb { { image = ItemSpriteSheet.ARCANE_BOMB; } - + + @Override + public boolean explodesDestructively() { + return false; + } + + @Override + protected int explosionRange() { + return 2; + } + @Override protected void onThrow(int cell) { super.onThrow(cell); if (fuse != null){ - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { - if (PathFinder.distance[i] < Integer.MAX_VALUE) + if (PathFinder.distance[i] < Integer.MAX_VALUE) { GameScene.add(Blob.seed(i, 3, GooWarn.class)); + } } } } - @Override - public boolean explodesDestructively() { - return false; - } - @Override public void explode(int cell) { super.explode(cell); ArrayList affected = new ArrayList<>(); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { if (Dungeon.level.heroFOV[i]) { @@ -80,10 +86,9 @@ public class ArcaneBomb extends Bomb { } for (Char ch : affected){ - // 100%/83%/67% bomb damage based on distance, but pierces armor. - int damage = Math.round(Random.NormalIntRange( Dungeon.scalingDepth()+5, 10 + Dungeon.scalingDepth() * 2 )); - float multiplier = 1f - (.16667f*Dungeon.level.distance(cell, ch.pos)); - ch.damage(Math.round(damage*multiplier), this); + //pierces armor, and damage in 5x5 instead of 3x3 + int damage = Math.round(Random.NormalIntRange( 4 + Dungeon.scalingDepth(), 12 + 3*Dungeon.scalingDepth() )); + ch.damage(damage, this); if (ch == Dungeon.hero && !ch.isAlive()){ Badges.validateDeathFromFriendlyMagic(); Dungeon.fail(this); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java index 69be36798..783f58309 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java @@ -53,6 +53,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.audio.Sample; +import com.watabou.utils.BArray; import com.watabou.utils.Bundle; import com.watabou.utils.PathFinder; import com.watabou.utils.Random; @@ -89,6 +90,10 @@ public class Bomb extends Item { return true; } + protected int explosionRange(){ + return 1; + } + @Override public ArrayList actions(Hero hero) { ArrayList actions = super.actions( hero ); @@ -144,25 +149,26 @@ public class Bomb extends Item { } boolean terrainAffected = false; - for (int n : PathFinder.NEIGHBOURS9) { - int c = cell + n; - if (c >= 0 && c < Dungeon.level.length()) { - if (Dungeon.level.heroFOV[c]) { - CellEmitter.get(c).burst(SmokeParticle.FACTORY, 4); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); + for (int i = 0; i < PathFinder.distance.length; i++) { + if (PathFinder.distance[i] != Integer.MAX_VALUE) { + if (Dungeon.level.heroFOV[i]) { + CellEmitter.get(i).burst(SmokeParticle.FACTORY, 4); } - if (Dungeon.level.flamable[c]) { - Dungeon.level.destroy(c); - GameScene.updateMap(c); + if (Dungeon.level.flamable[i]) { + Dungeon.level.destroy(i); + GameScene.updateMap(i); terrainAffected = true; } //destroys items / triggers bombs caught in the blast. - Heap heap = Dungeon.level.heaps.get(c); - if (heap != null) + Heap heap = Dungeon.level.heaps.get(i); + if (heap != null) { heap.explode(); + } - Char ch = Actor.findChar(c); + Char ch = Actor.findChar(i); if (ch != null) { affected.add(ch); } @@ -339,8 +345,8 @@ public class Bomb extends Item { validIngredients.put(PotionOfLiquidFlame.class, Firebomb.class); validIngredients.put(ScrollOfRage.class, Noisemaker.class); - validIngredients.put(PotionOfInvisibility.class, Flashbang.class); - validIngredients.put(ScrollOfRecharging.class, ShockBomb.class); + validIngredients.put(PotionOfInvisibility.class, SmokeBomb.class); + validIngredients.put(ScrollOfRecharging.class, FlashBangBomb.class); validIngredients.put(PotionOfHealing.class, RegrowthBomb.class); validIngredients.put(ScrollOfRemoveCurse.class, HolyBomb.class); @@ -357,8 +363,8 @@ public class Bomb extends Item { bombCosts.put(Firebomb.class, 1); bombCosts.put(Noisemaker.class, 1); - bombCosts.put(Flashbang.class, 2); - bombCosts.put(ShockBomb.class, 2); + bombCosts.put(SmokeBomb.class, 2); + bombCosts.put(FlashBangBomb.class, 2); bombCosts.put(RegrowthBomb.class, 3); bombCosts.put(HolyBomb.class, 3); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Firebomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Firebomb.java index cb416b22f..8f3132f42 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Firebomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Firebomb.java @@ -38,18 +38,24 @@ public class Firebomb extends Bomb { { image = ItemSpriteSheet.FIRE_BOMB; } - + + @Override + protected int explosionRange() { + return 2; + } + @Override public void explode(int cell) { super.explode(cell); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { - if (Dungeon.level.pit[i]) + if (Dungeon.level.pit[i]) { GameScene.add(Blob.seed(i, 2, Fire.class)); - else + } else { GameScene.add(Blob.seed(i, 10, Fire.class)); + } CellEmitter.get(i).burst(FlameParticle.FACTORY, 5); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShockBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FlashBangBomb.java similarity index 67% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShockBomb.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FlashBangBomb.java index 9d2ff259d..e6a8cee1b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShockBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FlashBangBomb.java @@ -22,17 +22,21 @@ package com.shatteredpixel.shatteredpixeldungeon.items.bombs; import com.shatteredpixel.shatteredpixeldungeon.Assets; +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.blobs.Electricity; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle; -import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.audio.Sample; import com.watabou.utils.BArray; import com.watabou.utils.PathFinder; @@ -40,41 +44,45 @@ import com.watabou.utils.Random; import java.util.ArrayList; -public class ShockBomb extends Bomb { +public class FlashBangBomb extends Bomb { { - image = ItemSpriteSheet.SHOCK_BOMB; + image = ItemSpriteSheet.FLASHBANG; } - + + @Override + protected int explosionRange() { + return 2; + } + @Override public void explode(int cell) { super.explode(cell); ArrayList affected = new ArrayList<>(); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 3 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { - if (PathFinder.distance[i] < Integer.MAX_VALUE - && Actor.findChar(i) != null) { + if (PathFinder.distance[i] < Integer.MAX_VALUE && Actor.findChar(i) != null) { affected.add(Actor.findChar(i)); } } - for (Char ch : affected.toArray(new Char[0])){ - Ballistica LOS = new Ballistica(cell, ch.pos, Ballistica.PROJECTILE); - if (LOS.collisionPos != ch.pos){ - affected.remove(ch); - } - } - ArrayList arcs = new ArrayList<>(); for (Char ch : affected){ - int power = 16 - 4*Dungeon.level.distance(ch.pos, cell); - if (power > 0){ - //32% to 8% regular bomb damage - int damage = Math.round(Random.NormalIntRange(5 + Dungeon.scalingDepth(), 10 + 2*Dungeon.scalingDepth()) * (power/50f)); - ch.damage(damage, this); - if (ch.isAlive()) Buff.prolong(ch, Paralysis.class, power); - arcs.add(new Lightning.Arc(DungeonTilemap.tileCenterToWorld(cell), ch.sprite.center())); + //25% bonus damage and 10 turns of stun + int damage = Math.round(Random.NormalIntRange(4 + Dungeon.scalingDepth(), 12 + 3*Dungeon.scalingDepth()) / 4f); + ch.damage(damage, Electricity.class); + if (ch.isAlive()) Buff.prolong(ch, Paralysis.class, Paralysis.DURATION); + arcs.add(new Lightning.Arc(DungeonTilemap.tileCenterToWorld(cell), ch.sprite.center())); + + if (ch == Dungeon.hero){ + GameScene.flash(0x80FFFFFF); + } + + if (ch == Dungeon.hero && !ch.isAlive()) { + Badges.validateDeathFromFriendlyMagic(); + GLog.n(Messages.get(this, "ondeath")); + Dungeon.fail(this); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FrostBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FrostBomb.java index 0320ae0fd..37a998482 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FrostBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/FrostBomb.java @@ -38,11 +38,16 @@ public class FrostBomb extends Bomb { { image = ItemSpriteSheet.FROST_BOMB; } + + @Override + protected int explosionRange() { + return 2; + } @Override public void explode(int cell) { super.explode(cell); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { GameScene.add(Blob.seed(i, 10, Freezing.class)); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java index 07af1f34a..3b5ba3f91 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java @@ -41,7 +41,12 @@ public class HolyBomb extends Bomb { { image = ItemSpriteSheet.HOLY_BOMB; } - + + @Override + protected int explosionRange() { + return 2; + } + @Override public void explode(int cell) { super.explode(cell); @@ -52,7 +57,7 @@ public class HolyBomb extends Bomb { ArrayList affected = new ArrayList<>(); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { Char ch = Actor.findChar(i); @@ -67,8 +72,8 @@ public class HolyBomb extends Bomb { if (ch.properties().contains(Char.Property.UNDEAD) || ch.properties().contains(Char.Property.DEMONIC)){ ch.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 ); - //bomb deals an additional 50% damage to unholy enemies in a 5x5 range - int damage = Math.round(Random.NormalIntRange( Dungeon.scalingDepth()+5, 10 + Dungeon.scalingDepth() * 2 ) * 0.5f); + //bomb deals an additional 50% damage to unholy enemies + int damage = Math.round(Random.NormalIntRange( Dungeon.scalingDepth()+4, 12 + 3*Dungeon.scalingDepth() ) * 0.5f); ch.damage(damage, new HolyDamage()); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Noisemaker.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Noisemaker.java index fe1fa7bb4..d891752ea 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Noisemaker.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Noisemaker.java @@ -39,6 +39,11 @@ public class Noisemaker extends Bomb { image = ItemSpriteSheet.NOISEMAKER; } + @Override + protected int explosionRange() { + return 2; + } + @Override protected Fuse createFuse() { return new NoisemakerFuse(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/RegrowthBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/RegrowthBomb.java index 998fc94a3..368f92a25 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/RegrowthBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/RegrowthBomb.java @@ -51,7 +51,12 @@ public class RegrowthBomb extends Bomb { public boolean explodesDestructively() { return false; } - + + @Override + protected int explosionRange() { + return 3; + } + @Override public void explode(int cell) { super.explode(cell); @@ -62,7 +67,7 @@ public class RegrowthBomb extends Bomb { ArrayList plantCandidates = new ArrayList<>(); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { Char ch = Actor.findChar(i); @@ -82,7 +87,7 @@ public class RegrowthBomb extends Bomb { } } - int plants = Random.chances(new float[]{0, 6, 3, 1}); + int plants = Random.chances(new float[]{0, 0, 2, 1}); for (int i = 0; i < plants; i++) { Integer plantPos = Random.element(plantCandidates); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java index f7c258e70..3a81b0baf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java @@ -43,14 +43,19 @@ public class ShrapnelBomb extends Bomb { public boolean explodesDestructively() { return false; } - + + @Override + protected int explosionRange() { + return 8; + } + @Override public void explode(int cell) { super.explode(cell); boolean[] FOV = new boolean[Dungeon.level.length()]; Point c = Dungeon.level.cellToPoint(cell); - ShadowCaster.castShadow(c.x, c.y, Dungeon.level.width(), FOV, Dungeon.level.losBlocking, 8); + ShadowCaster.castShadow(c.x, c.y, Dungeon.level.width(), FOV, Dungeon.level.losBlocking, explosionRange()); ArrayList affected = new ArrayList<>(); @@ -67,9 +72,8 @@ public class ShrapnelBomb extends Bomb { } for (Char ch : affected){ - //regular bomb damage, which falls off at a rate of 5% per tile of distance - int damage = Math.round(Random.NormalIntRange( Dungeon.scalingDepth()+5, 10 + Dungeon.scalingDepth() * 2 )); - damage = Math.round(damage * (1f - .05f*Dungeon.level.distance(cell, ch.pos))); + //regular bomb damage over an FOV up to 8-range + int damage = Random.NormalIntRange( 4 + Dungeon.scalingDepth(), 12 + 3*Dungeon.scalingDepth() ); damage -= ch.drRoll(); ch.damage(damage, this); if (ch == Dungeon.hero && !ch.isAlive()) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Flashbang.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/SmokeBomb.java similarity index 59% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Flashbang.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/SmokeBomb.java index 2d3ddc7d1..cdf480636 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Flashbang.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/SmokeBomb.java @@ -22,38 +22,41 @@ package com.shatteredpixel.shatteredpixeldungeon.items.bombs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; -import com.shatteredpixel.shatteredpixeldungeon.actors.Char; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; -import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.SmokeScreen; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.utils.BArray; +import com.watabou.utils.PathFinder; -public class Flashbang extends Bomb { +public class SmokeBomb extends Bomb { { - image = ItemSpriteSheet.FLASHBANG; + image = ItemSpriteSheet.SMOKE_BOMB; + } + + @Override + protected int explosionRange() { + return 2; } @Override public void explode(int cell) { super.explode(cell); - Level l = Dungeon.level; - for (Char ch : Actor.chars()){ - if (ch.fieldOfView != null && ch.fieldOfView[cell]){ - int power = 16 - 4*l.distance(ch.pos, cell); - if (power > 0){ - Buff.prolong(ch, Blindness.class, power); - Buff.prolong(ch, Cripple.class, power); - if (ch == Dungeon.hero){ - GameScene.flash(0x80FFFFFF); - } - } + int centerVolume = 1000; //40*25 + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange() ); + for (int i = 0; i < PathFinder.distance.length; i++) { + if (PathFinder.distance[i] < Integer.MAX_VALUE) { + GameScene.add( Blob.seed( i, 40, SmokeScreen.class ) ); + centerVolume -= 40; } } + + //excess volume if some cells were blocked + if (centerVolume > 0){ + GameScene.add( Blob.seed( cell, centerVolume, SmokeScreen.class ) ); + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/WoollyBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/WoollyBomb.java index 465204fc1..0823a0b87 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/WoollyBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/WoollyBomb.java @@ -40,12 +40,17 @@ public class WoollyBomb extends Bomb { { image = ItemSpriteSheet.WOOLY_BOMB; } - + + @Override + protected int explosionRange() { + return 2; + } + @Override public void explode(int cell) { super.explode(cell); - PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 4 ); + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), explosionRange()+2 ); ArrayList spawnPoints = new ArrayList<>(); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java index b37de1a8e..2c6f21714 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Catalog.java @@ -45,12 +45,12 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.ArcaneBomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Firebomb; -import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Flashbang; +import com.shatteredpixel.shatteredpixeldungeon.items.bombs.SmokeBomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.FrostBomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.HolyBomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Noisemaker; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.RegrowthBomb; -import com.shatteredpixel.shatteredpixeldungeon.items.bombs.ShockBomb; +import com.shatteredpixel.shatteredpixeldungeon.items.bombs.FlashBangBomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.ShrapnelBomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.WoollyBomb; import com.shatteredpixel.shatteredpixeldungeon.items.food.Berry; @@ -237,8 +237,8 @@ public enum Catalog { EXOTIC_SCROLLS.addItems(ExoticScroll.exoToReg.keySet().toArray(new Class[0])); - BOMBS.addItems( Bomb.class, FrostBomb.class, Firebomb.class, Flashbang.class, RegrowthBomb.class, - WoollyBomb.class, Noisemaker.class, ShockBomb.class, HolyBomb.class, ArcaneBomb.class, ShrapnelBomb.class); + BOMBS.addItems( Bomb.class, FrostBomb.class, Firebomb.class, SmokeBomb.class, RegrowthBomb.class, + WoollyBomb.class, Noisemaker.class, FlashBangBomb.class, HolyBomb.class, ArcaneBomb.class, ShrapnelBomb.class); TIPPED_DARTS.addItems(TippedDart.types.values().toArray(new Class[0])); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 4b22c71c0..6273ea587 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -188,8 +188,8 @@ public class ItemSpriteSheet { public static final int FIRE_BOMB = BOMBS+2; public static final int FROST_BOMB = BOMBS+3; public static final int REGROWTH_BOMB = BOMBS+4; - public static final int FLASHBANG = BOMBS+5; - public static final int SHOCK_BOMB = BOMBS+6; + public static final int SMOKE_BOMB = BOMBS+5; + public static final int FLASHBANG = BOMBS+6; public static final int HOLY_BOMB = BOMBS+7; public static final int WOOLY_BOMB = BOMBS+8; public static final int NOISEMAKER = BOMBS+9; @@ -202,8 +202,8 @@ public class ItemSpriteSheet { assignItemRect(FIRE_BOMB, 13, 12); assignItemRect(FROST_BOMB, 13, 12); assignItemRect(REGROWTH_BOMB, 13, 12); - assignItemRect(FLASHBANG, 13, 12); - assignItemRect(SHOCK_BOMB, 10, 13); + assignItemRect(SMOKE_BOMB, 13, 12); + assignItemRect(FLASHBANG, 10, 13); assignItemRect(HOLY_BOMB, 10, 13); assignItemRect(WOOLY_BOMB, 10, 13); assignItemRect(NOISEMAKER, 10, 13);