diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java index c7690efdf..9c09fbe03 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/CrystalMimic.java @@ -170,7 +170,7 @@ public class CrystalMimic extends Mimic { } @Override - protected void generatePrize() { + protected void generatePrize( boolean useDecks ) { //Crystal mimic already contains a prize item. Just guarantee it isn't cursed. for (Item i : items){ i.cursed = false; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GoldenMimic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GoldenMimic.java index a659bcc84..86941319d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GoldenMimic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GoldenMimic.java @@ -82,8 +82,8 @@ public class GoldenMimic extends Mimic { } @Override - protected void generatePrize() { - super.generatePrize(); + protected void generatePrize( boolean useDecks ) { + super.generatePrize( useDecks ); //all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0 for (Item i : items){ if (i instanceof EquipableItem || i instanceof Wand){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java index 28fd5be15..415438657 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java @@ -46,7 +46,6 @@ import com.watabou.utils.Random; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.List; public class Mimic extends Mob { @@ -274,20 +273,19 @@ public class Mimic extends Mob { return true; } - public static Mimic spawnAt( int pos, Item item ){ - return spawnAt( pos, Arrays.asList(item), Mimic.class); + public static Mimic spawnAt( int pos, Item... items){ + return spawnAt(pos, Mimic.class, items); } - public static Mimic spawnAt( int pos, Item item, Class mimicType ){ - return spawnAt( pos, Arrays.asList(item), mimicType); + public static Mimic spawnAt( int pos, Class mimicType, Item... items){ + return spawnAt(pos, mimicType, true, items); } - public static Mimic spawnAt( int pos, List items ) { - return spawnAt( pos, items, Mimic.class); + public static Mimic spawnAt( int pos, boolean useDecks, Item... items){ + return spawnAt(pos, Mimic.class, useDecks, items); } - public static Mimic spawnAt( int pos, List items, Class mimicType ) { - + public static Mimic spawnAt( int pos, Class mimicType, boolean useDecks, Item... items){ Mimic m; if (mimicType == GoldenMimic.class){ m = new GoldenMimic(); @@ -297,17 +295,17 @@ public class Mimic extends Mob { m = new Mimic(); } - m.items = new ArrayList<>( items ); + m.items = new ArrayList<>( Arrays.asList(items) ); m.setLevel( Dungeon.depth ); m.pos = pos; //generate an extra reward for killing the mimic - m.generatePrize(); - + m.generatePrize(useDecks); + return m; } - protected void generatePrize(){ + protected void generatePrize( boolean useDecks ){ Item reward = null; do { switch (Random.Int(5)) { @@ -315,16 +313,16 @@ public class Mimic extends Mob { reward = new Gold().random(); break; case 1: - reward = Generator.randomMissile(true); + reward = Generator.randomMissile(!useDecks); break; case 2: reward = Generator.randomArmor(); break; case 3: - reward = Generator.randomWeapon(true); + reward = Generator.randomWeapon(!useDecks); break; case 4: - reward = Generator.randomUsingDefaults(Generator.Category.RING); + reward = useDecks ? Generator.random(Generator.Category.RING) : Generator.randomUsingDefaults(Generator.Category.RING); break; } } while (reward == null || Challenges.isItemBlocked(reward)); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Statue.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Statue.java index 77ed5ba5b..b32653b00 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Statue.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Statue.java @@ -22,7 +22,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; @@ -32,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; -import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.StatueSprite; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.utils.Bundle; @@ -60,13 +58,13 @@ public class Statue extends Mob { defenseSkill = 4 + Dungeon.depth; } - public void createWeapon(){ - //this is a bit of a hack. I'm strongly considering redesigning this system code-wise though - if (ShatteredPixelDungeon.scene() instanceof InterlevelScene) { + public void createWeapon( boolean useDecks ){ + if (useDecks) { weapon = (MeleeWeapon) Generator.random(Generator.Category.WEAPON); } else { weapon = (MeleeWeapon) Generator.randomUsingDefaults(Generator.Category.WEAPON); } + levelGenStatue = useDecks; weapon.cursed = false; weapon.enchant( Enchantment.random() ); } @@ -191,13 +189,17 @@ public class Statue extends Mob { } public static Statue random(){ - Statue statue = null; + return random( true ); + } + + public static Statue random( boolean useDecks ){ + Statue statue; if (Random.Int(10) == 0){ statue = new ArmoredStatue(); } else { statue = new Statue(); } - statue.createWeapon(); + statue.createWeapon(useDecks); return statue; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/CursedWand.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/CursedWand.java index b6a141e34..30bed87e4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/CursedWand.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/CursedWand.java @@ -357,7 +357,7 @@ public class CursedWand { } } - Mimic mimic = Mimic.spawnAt(spawnCell, new ArrayList(), GoldenMimic.class); + Mimic mimic = Mimic.spawnAt(spawnCell, GoldenMimic.class, false); mimic.stopHiding(); mimic.alignment = Char.Alignment.ENEMY; Item reward; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 588a7d424..497b335da 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -386,7 +386,7 @@ public abstract class RegularLevel extends Level { (toDrop.isUpgradable() && Random.Int(4 - toDrop.level()) == 0)){ if (Dungeon.depth > 1 && Random.Int(10) == 0 && findMob(cell) == null){ - mobs.add(Mimic.spawnAt(cell, toDrop, GoldenMimic.class)); + mobs.add(Mimic.spawnAt(cell, GoldenMimic.class, toDrop)); } else { Heap dropped = drop(toDrop, cell); if (heaps.get(cell) == dropped) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalVaultRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalVaultRoom.java index 3d50b4545..5232cf76f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalVaultRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/CrystalVaultRoom.java @@ -71,7 +71,7 @@ public class CrystalVaultRoom extends SpecialRoom { level.drop( i1, i1Pos ).type = Heap.Type.CRYSTAL_CHEST; if (Random.Int(10) == 0){ - level.mobs.add(Mimic.spawnAt(i2Pos, i2, CrystalMimic.class)); + level.mobs.add(Mimic.spawnAt(i2Pos, CrystalMimic.class, i2)); } else { level.drop(i2, i2Pos).type = Heap.Type.CRYSTAL_CHEST; } 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 e15f6ff33..56ec4f642 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 @@ -114,7 +114,7 @@ public class DistortionTrap extends Trap{ mob = Reflection.newInstance(Bestiary.getMobRotation(floor).get(0)); break; case 2: - switch (Random.Int(4)){ + switch (2){ case 0: default: Wraith.spawnAt(point, true); continue; //wraiths spawn themselves, no need to do more @@ -123,13 +123,12 @@ public class DistortionTrap extends Trap{ mob = Piranha.random(); break; case 2: - mob = Mimic.spawnAt(point, new ArrayList<>()); + mob = Mimic.spawnAt(point, false); ((Mimic)mob).stopHiding(); mob.alignment = Char.Alignment.ENEMY; break; case 3: - mob = Statue.random(); - ((Statue) mob).levelGenStatue = false; + mob = Statue.random(false); break; } break; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GuardianTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GuardianTrap.java index 0a51adec7..931ece425 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GuardianTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/GuardianTrap.java @@ -58,7 +58,7 @@ public class GuardianTrap extends Trap { for (int i = 0; i < (scalingDepth() - 5)/5; i++){ Guardian guardian = new Guardian(); - guardian.createWeapon(); + guardian.createWeapon(false); guardian.state = guardian.WANDERING; guardian.pos = Dungeon.level.randomRespawnCell( guardian ); if (guardian.pos != -1) { @@ -81,7 +81,7 @@ public class GuardianTrap extends Trap { } @Override - public void createWeapon() { + public void createWeapon( boolean useDecks ) { weapon = (MeleeWeapon) Generator.randomUsingDefaults(Generator.Category.WEAPON); weapon.cursed = false; weapon.enchant(null);