diff --git a/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/ItemUtils.java b/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/ItemUtils.java index 1ca6958189..79df329dcc 100644 --- a/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/ItemUtils.java +++ b/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/ItemUtils.java @@ -79,4 +79,5 @@ public static Item random(Item item) { } return item; } + } diff --git a/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/artifacts/SpellBook.java b/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/artifacts/SpellBook.java index 96e6739f77..2700233bc3 100644 --- a/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/artifacts/SpellBook.java +++ b/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/items/artifacts/SpellBook.java @@ -17,7 +17,7 @@ public class SpellBook extends Artifact { - @Packable() + @Packable private String spell; public SpellBook() { diff --git a/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/windows/WndFortuneTeller.java b/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/windows/WndFortuneTeller.java index 2d77cf5abb..effcafcdd7 100644 --- a/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/windows/WndFortuneTeller.java +++ b/RemixedDungeon/src/main/java/com/nyrds/pixeldungeon/windows/WndFortuneTeller.java @@ -50,7 +50,7 @@ public WndFortuneTeller(FortuneTellerNPC fortuneTellerNPC, final Char hero) { int finalUnknownItemsCount = unknownItemsCount; - RedButton btnYes = new RedButton( StringsManager.getVar(R.string.Wnd_Button_Yes) + " ( " + goldCost + " )" ) { + RedButton btnYes = new RedButton( StringsManager.getVar(R.string.Wnd_Button_Yes) + " (" + goldCost + ")" ) { @Override protected void onClick() { if (finalUnknownItemsCount > 0) { diff --git a/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/Alchemy.java b/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/Alchemy.java index 3eece04c32..7a3ba046bc 100644 --- a/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/Alchemy.java +++ b/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/Alchemy.java @@ -2,16 +2,28 @@ package com.watabou.pixeldungeon.actors.blobs; import com.nyrds.LuaInterface; +import com.nyrds.pixeldungeon.items.Treasury; +import com.nyrds.pixeldungeon.utils.ItemsList; +import com.nyrds.platform.audio.Sample; +import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.effects.BlobEmitter; +import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.Speck; +import com.watabou.pixeldungeon.effects.Splash; import com.watabou.pixeldungeon.items.Heap; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.levels.Level; +import com.watabou.pixeldungeon.plants.Seed; +import com.watabou.utils.Random; public class Alchemy extends Blob { + private static final int SEEDS_TO_POTION = 3; + @Override protected void evolve() { for (int i = 0;i= SEEDS_TO_POTION) { + + CellEmitter.get(heap.pos).burst(Speck.factory(Speck.WOOL), 6); + Sample.INSTANCE.play(Assets.SND_PUFF); + + if (Random.Int(count) == 0) { + + CellEmitter.center(heap.pos).burst(Speck.factory(Speck.EVOKE), 3); + + heap.destroy(); + + Statistics.potionsCooked++; + Badges.validatePotionsCooked(); + + result = Treasury.getLevelTreasury().random(Treasury.Category.POTION); + + } else { + + Seed proto = (Seed) heap.items.get(Random.chances(chances)); + Class itemClass = proto.alchemyClass; + + heap.destroy(); + + Statistics.potionsCooked++; + Badges.validatePotionsCooked(); + + if (itemClass == null) { + result = Treasury.getLevelTreasury().random(Treasury.Category.POTION); + } else { + try { + result = itemClass.newInstance(); + } catch (Exception e) { + + } + } + } + } + + if (result.valid()) { level.animatedDrop( result, cell ); } } diff --git a/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java b/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java index f2e1819482..28c3fba08a 100644 --- a/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java +++ b/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java @@ -2,8 +2,12 @@ package com.watabou.pixeldungeon.actors.blobs; import com.nyrds.pixeldungeon.items.Treasury; +import com.nyrds.pixeldungeon.items.artifacts.SpellBook; +import com.nyrds.pixeldungeon.items.common.GoldenSword; +import com.nyrds.pixeldungeon.items.common.SacrificialSword; import com.nyrds.pixeldungeon.items.guts.weapon.melee.Claymore; import com.nyrds.pixeldungeon.items.guts.weapon.melee.Halberd; +import com.nyrds.pixeldungeon.mechanics.spells.SpellFactory; import com.nyrds.pixeldungeon.ml.R; import com.nyrds.platform.util.StringsManager; import com.watabou.pixeldungeon.Journal; @@ -34,198 +38,182 @@ import com.watabou.pixeldungeon.plants.Seed; public class WaterOfTransmutation extends WellWater { - - @Override - protected Item affectItem( Item item ) { - - if (item instanceof MeleeWeapon) { - - return changeWeapon( (MeleeWeapon)item ); - - } else if (item instanceof Scroll) { - - Journal.remove( Feature.WELL_OF_TRANSMUTATION.desc() ); - return changeScroll(item); - - } else if (item instanceof Potion) { - - Journal.remove( Feature.WELL_OF_TRANSMUTATION.desc() ); - return changePotion(item); - - } else if (item instanceof Ring) { - - Journal.remove( Feature.WELL_OF_TRANSMUTATION.desc() ); - return changeRing(item); - - } else if (item instanceof Wand) { - - Journal.remove( Feature.WELL_OF_TRANSMUTATION.desc() ); - return changeWand(item); - - } else if (item instanceof Seed) { - - Journal.remove( Feature.WELL_OF_TRANSMUTATION.desc() ); - return changeSeed(item); - - } else { - return null; - } - } - - @Override - public void use( BlobEmitter emitter ) { - super.use( emitter ); - emitter.start( Speck.factory( Speck.CHANGE ), 0.2f, 0 ); - } - - private MeleeWeapon changeWeapon( MeleeWeapon w ) { - - MeleeWeapon n = null; - - if (w instanceof Knuckles) { - n = new Dagger(); - } else if (w instanceof Dagger) { - n = new Knuckles(); - } - - else if (w instanceof Spear) { - n = new Quarterstaff(); - } else if (w instanceof Quarterstaff) { - n = new Spear(); - } - - else if (w instanceof Sword) { - n = new Mace(); - } else if (w instanceof Mace) { - n = new Sword(); - } - - else if (w instanceof Longsword) { - n = new BattleAxe(); - } else if (w instanceof BattleAxe) { - n = new Longsword(); - } - - else if (w instanceof Glaive) { - n = new WarHammer(); - } else if (w instanceof WarHammer) { - n = new Glaive(); - } - else if (w instanceof Claymore) { - n = new Halberd(); - } else if (w instanceof Halberd) { - n = new Claymore(); - } + @Override + protected Item affectItem(Item item) { + boolean transmuted = true; + Item transmutedItem = item; - if (n != null) { - - int level = w.level(); - if (level > 0) { - n.upgrade( level ); - } else if (level < 0) { - n.degrade( -level ); - } - - if (w.isEnchanted()) { - n.enchant( Enchantment.random() ); - } - - n.setLevelKnown(w.isLevelKnown()); - n.setCursedKnown(w.isCursedKnown()); - n.setCursed(w.isCursed()); - - Journal.remove( Feature.WELL_OF_TRANSMUTATION.desc() ); - - return n; - } else { - return null; - } - } - - private Item changeRing( Item r ) { - Item n; - do { - n = Treasury.getLevelTreasury().random(Treasury.Category.RING ); - } while (n.getClass() == r.getClass()); - - n.level(0); - - int level = r.level(); - if (level > 0) { - n.upgrade( level ); - } else if (level < 0) { - n.degrade( -level ); - } - - n.setLevelKnown(r.isLevelKnown()); - n.setCursedKnown(r.isCursedKnown()); - n.setCursed(r.isCursed()); - - return n; - } - - private Item changeWand( Item w ) { - - Item n; - do { - n = Treasury.getLevelTreasury().random(Treasury.Category.WAND ); - } while (n.getEntityKind().equals(w.getEntityKind())); - - n.level(0); - n.upgrade( w.level() ); - - n.setLevelKnown(w.isLevelKnown()); - n.setCursedKnown(w.isCursedKnown()); - n.setCursed(w.isCursed()); - - return n; - } - - private Item changeSeed(Item s ) { - - Item n; - - do { - n = Treasury.getLevelTreasury().random(Treasury.Category.SEED ); - } while (n.getEntityKind().equals(s.getEntityKind())); - - return n; - } - - private Item changeScroll( Item s ) { - if (s instanceof ScrollOfUpgrade) { - - return new ScrollOfWeaponUpgrade(); - - } else if (s instanceof ScrollOfWeaponUpgrade) { - - return new ScrollOfUpgrade(); - - } else { - - Item n; - do { - n = Treasury.getLevelTreasury().random(Treasury.Category.SCROLL ); - } while (n.getEntityKind().equals(s.getEntityKind())); - return n; - } - } - - private Item changePotion(Item p ) { - if (p instanceof PotionOfStrength) { - return new PotionOfMight(); - } else { - Item n; - do { - n = Treasury.getLevelTreasury().random(Treasury.Category.POTION ); - } while (n.getEntityKind().equals(p.getEntityKind())); - return n; + if (item instanceof SpellBook) { + ((SpellBook) item).spell(SpellFactory.getRandomSpell().name()); + } else if (item instanceof MeleeWeapon) { + transmutedItem = changeWeapon((MeleeWeapon) item); + } else if (item instanceof Scroll) { + transmutedItem = changeScroll(item); + } else if (item instanceof Potion) { + transmutedItem = changePotion(item); + } else if (item instanceof Ring) { + transmutedItem = changeRing(item); + } else if (item instanceof Wand) { + transmutedItem = changeWand(item); + } else if (item instanceof Seed) { + transmutedItem = changeSeed(item); + } else { + transmuted = false; + } + + if (transmuted) { + Journal.remove(Feature.WELL_OF_TRANSMUTATION.desc()); + } + return transmutedItem; + } + + @Override + public void use(BlobEmitter emitter) { + super.use(emitter); + emitter.start(Speck.factory(Speck.CHANGE), 0.2f, 0); + } + + private MeleeWeapon changeWeapon(MeleeWeapon w) { + + MeleeWeapon n = null; + + if (w instanceof Knuckles) { + n = new Dagger(); + } else if (w instanceof Dagger) { + n = new Knuckles(); + } else if (w instanceof Spear) { + n = new Quarterstaff(); + } else if (w instanceof Quarterstaff) { + n = new Spear(); + } else if (w instanceof Sword) { + n = new Mace(); + } else if (w instanceof Mace) { + n = new Sword(); + } else if (w instanceof Longsword) { + n = new BattleAxe(); + } else if (w instanceof BattleAxe) { + n = new Longsword(); + } else if (w instanceof Glaive) { + n = new WarHammer(); + } else if (w instanceof WarHammer) { + n = new Glaive(); + } else if (w instanceof Claymore) { + n = new Halberd(); + } else if (w instanceof Halberd) { + n = new Claymore(); + } else if (w instanceof SacrificialSword) { + n = new GoldenSword(); + } else if (w instanceof GoldenSword) { + n = new SacrificialSword(); } - } - - @Override - public String tileDesc() { + + if (n != null) { + + int level = w.level(); + if (level > 0) { + n.upgrade(level); + } else if (level < 0) { + n.degrade(-level); + } + + if (w.isEnchanted()) { + n.enchant(Enchantment.random()); + } + + n.setLevelKnown(w.isLevelKnown()); + n.setCursedKnown(w.isCursedKnown()); + n.setCursed(w.isCursed()); + + return n; + } else { + return null; + } + } + + private Item changeRing(Item r) { + Item n; + do { + n = Treasury.getLevelTreasury().random(Treasury.Category.RING); + } while (n.getClass() == r.getClass()); + + n.level(0); + + int level = r.level(); + if (level > 0) { + n.upgrade(level); + } else if (level < 0) { + n.degrade(-level); + } + + n.setLevelKnown(r.isLevelKnown()); + n.setCursedKnown(r.isCursedKnown()); + n.setCursed(r.isCursed()); + + return n; + } + + private Item changeWand(Item w) { + + Item n; + do { + n = Treasury.getLevelTreasury().random(Treasury.Category.WAND); + } while (n.getEntityKind().equals(w.getEntityKind())); + + n.level(0); + n.upgrade(w.level()); + + n.setLevelKnown(w.isLevelKnown()); + n.setCursedKnown(w.isCursedKnown()); + n.setCursed(w.isCursed()); + + return n; + } + + private Item changeSeed(Item s) { + + Item n; + + do { + n = Treasury.getLevelTreasury().random(Treasury.Category.SEED); + } while (n.getEntityKind().equals(s.getEntityKind())); + + return n; + } + + private Item changeScroll(Item s) { + if (s instanceof ScrollOfUpgrade) { + + return new ScrollOfWeaponUpgrade(); + + } else if (s instanceof ScrollOfWeaponUpgrade) { + + return new ScrollOfUpgrade(); + + } else { + + Item n; + do { + n = Treasury.getLevelTreasury().random(Treasury.Category.SCROLL); + } while (n.getEntityKind().equals(s.getEntityKind())); + return n; + } + } + + private Item changePotion(Item p) { + if (p instanceof PotionOfStrength) { + return new PotionOfMight(); + } else { + Item n; + do { + n = Treasury.getLevelTreasury().random(Treasury.Category.POTION); + } while (n.getEntityKind().equals(p.getEntityKind())); + return n; + } + } + + @Override + public String tileDesc() { return StringsManager.getVar(R.string.WaterOfTransmutation_Info); } } diff --git a/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/items/Heap.java b/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/items/Heap.java index b788e57d52..36c1a9d16f 100644 --- a/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/items/Heap.java +++ b/RemixedDungeon/src/main/java/com/watabou/pixeldungeon/items/Heap.java @@ -4,7 +4,6 @@ import com.nyrds.LuaInterface; import com.nyrds.Packable; -import com.nyrds.pixeldungeon.items.Treasury; import com.nyrds.pixeldungeon.mechanics.NamedEntityKind; import com.nyrds.pixeldungeon.ml.R; import com.nyrds.pixeldungeon.utils.ItemsList; @@ -12,9 +11,7 @@ import com.nyrds.platform.audio.Sample; import com.nyrds.platform.util.StringsManager; import com.watabou.pixeldungeon.Assets; -import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; -import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -25,11 +22,9 @@ import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.Effects; import com.watabou.pixeldungeon.effects.Speck; -import com.watabou.pixeldungeon.effects.Splash; import com.watabou.pixeldungeon.effects.particles.FlameParticle; import com.watabou.pixeldungeon.effects.particles.ShadowParticle; import com.watabou.pixeldungeon.levels.Level; -import com.watabou.pixeldungeon.plants.Seed; import com.watabou.pixeldungeon.sprites.Glowing; import com.watabou.pixeldungeon.sprites.ItemSprite; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; @@ -49,8 +44,6 @@ public class Heap implements Bundlable, NamedEntityKind { - private static final int SEEDS_TO_POTION = 3; - @Override public String getEntityKind() { return getClass().getSimpleName(); @@ -370,67 +363,6 @@ public void poison() { updateHeap(); } - public Item transmute() { - - CellEmitter.get(pos).burst(Speck.factory(Speck.BUBBLE), 3); - Splash.at(pos, 0xFFFFFF, 3); - - float[] chances = new float[items.size()]; - int count = 0; - - int index = 0; - for (Item item : items) { - if (item instanceof Seed) { - count += item.quantity(); - chances[index++] = item.quantity(); - } else { - count = 0; - break; - } - } - - if (count >= SEEDS_TO_POTION) { - - CellEmitter.get(pos).burst(Speck.factory(Speck.WOOL), 6); - Sample.INSTANCE.play(Assets.SND_PUFF); - - if (Random.Int(count) == 0) { - - CellEmitter.center(pos).burst(Speck.factory(Speck.EVOKE), 3); - - destroy(); - - Statistics.potionsCooked++; - Badges.validatePotionsCooked(); - - return Treasury.getLevelTreasury().random(Treasury.Category.POTION); - - } else { - - Seed proto = (Seed) items.get(Random.chances(chances)); - Class itemClass = proto.alchemyClass; - - destroy(); - - Statistics.potionsCooked++; - Badges.validatePotionsCooked(); - - if (itemClass == null) { - return Treasury.getLevelTreasury().random(Treasury.Category.POTION); - } else { - try { - return itemClass.newInstance(); - } catch (Exception e) { - return ItemsList.DUMMY; - } - } - } - - } else { - return ItemsList.DUMMY; - } - } - public boolean isEmpty() { return items.isEmpty(); }