From 59cef5cbcb8fea031121ebe4fa58147725f1e9b3 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Jan 2026 13:40:14 -0500 Subject: [PATCH] v3.3.5: fixed distortion traps not possibly spawning all rare mob alts --- .../actors/mobs/MobSpawner.java | 42 +++++++++++-------- .../levels/traps/DistortionTrap.java | 9 +--- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java index 651c154a0..a084faea0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java @@ -28,6 +28,7 @@ import com.watabou.utils.Random; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; public class MobSpawner extends Actor { { @@ -245,24 +246,31 @@ public class MobSpawner extends Actor { for (int i = 0; i < rotation.size(); i++) { if (Random.Float() < altChance) { Class cl = rotation.get(i); - if (cl == Rat.class) cl = Albino.class; - else if (cl == Gnoll.class) cl = GnollExile.class; - else if (cl == Crab.class) cl = HermitCrab.class; - else if (cl == Slime.class) cl = CausticSlime.class; - - else if (cl == Thief.class) cl = Bandit.class; - else if (cl == Necromancer.class) cl = SpectralNecromancer.class; - - else if (cl == Brute.class) cl = ArmoredBrute.class; - else if (cl == DM200.class) cl = DM201.class; - - else if (cl == Monk.class) cl = Senior.class; - //chaos elemental spawning happens in Elemental.Random - - else if (cl == Scorpio.class) cl = Acidic.class; - - rotation.set(i, cl); + Class alt = RARE_ALTS.get(cl); + if (alt != null) { + rotation.set(i, cl); + } } } } + + public static final HashMap, Class> RARE_ALTS = new HashMap<>(); + static { + RARE_ALTS.put(Rat.class, Albino.class); + RARE_ALTS.put(Gnoll.class, GnollExile.class); + RARE_ALTS.put(Crab.class, HermitCrab.class); + RARE_ALTS.put(Slime.class, CausticSlime.class); + + RARE_ALTS.put(Thief.class, Bandit.class); + RARE_ALTS.put(Necromancer.class, SpectralNecromancer.class); + + RARE_ALTS.put(Brute.class, ArmoredBrute.class); + RARE_ALTS.put(DM200.class, DM201.class); + + RARE_ALTS.put(Monk.class, Senior.class); + //swapping to chaos elemental actually happens in Elemental.random + RARE_ALTS.put(Elemental.class, Elemental.ChaosElemental.class); + + RARE_ALTS.put(Scorpio.class, Acidic.class); + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java index ea2a87311..cbce0958b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java @@ -59,13 +59,6 @@ public class DistortionTrap extends Trap{ shape = LARGE_DOT; } - private static final ArrayList> RARE = new ArrayList<>(Arrays.asList( - Albino.class, CausticSlime.class, - Bandit.class, - ArmoredBrute.class, DM201.class, - Elemental.ChaosElemental.class, Senior.class, - Acidic.class)); - @Override public void activate() { @@ -134,7 +127,7 @@ public class DistortionTrap extends Trap{ } break; case 4: - mob = Reflection.newInstance(Random.element(RARE)); + mob = Reflection.newInstance(Random.element(MobSpawner.RARE_ALTS.values())); break; }