From 98c25a8fcdfef14cb9fbe252877990bbc991330b Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 20 Jul 2021 15:17:55 -0400 Subject: [PATCH] v0.9.4: adjusted alchemy guide for new recipes --- .../assets/messages/items/items.properties | 2 ++ .../messages/journal/journal.properties | 2 ++ .../items/wands/Wand.java | 21 ++++++++++++++ .../items/weapon/missiles/MissileWeapon.java | 18 ++++++++++++ .../journal/Document.java | 4 +-- .../levels/rooms/special/LaboratoryRoom.java | 6 ++-- .../shatteredpixeldungeon/ui/QuickRecipe.java | 28 ++++++++++++++++--- .../windows/WndJournal.java | 12 ++++---- 8 files changed, 76 insertions(+), 17 deletions(-) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 50a7424a6..e3c699402 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1146,6 +1146,7 @@ items.wands.wand.cursed=This wand is cursed, making its magic chaotic and random items.wands.wand.not_cursed=This wand is free of malevolent magic. items.wands.wand.curse_discover=This %s is cursed! items.wands.wand.prompt=Choose a location to zap +items.wands.wand$placeholder.name=wand items.wands.wandofblastwave.name=wand of blast wave items.wands.wandofblastwave.staff_name=staff of blast wave @@ -1574,6 +1575,7 @@ items.weapon.missiles.missileweapon.durability=Thrown weapons will wear out and items.weapon.missiles.missileweapon.uses_left=This stack of weapons has _%d/%d_ uses left before one breaks. items.weapon.missiles.missileweapon.unlimited_uses=_But these are of such high quality that they will effectively last forever._ items.weapon.missiles.missileweapon.about_to_break=Your thrown weapon is about to break. +items.weapon.missiles.missileweapon$placeholder.name=thrown weapon items.weapon.missiles.shuriken.name=shuriken items.weapon.missiles.shuriken.desc=Star-shaped pieces of metal with razor-sharp blades. They are lightweight and easy to use on the move. A single shuriken can be thrown instantly after moving. diff --git a/core/src/main/assets/messages/journal/journal.properties b/core/src/main/assets/messages/journal/journal.properties index fa0c9a855..0044b2cfb 100644 --- a/core/src/main/assets/messages/journal/journal.properties +++ b/core/src/main/assets/messages/journal/journal.properties @@ -29,6 +29,8 @@ journal.document.alchemy_guide.energy_food.title=Energy and Food journal.document.alchemy_guide.energy_food.body=Some recipes require energy from the alchemy pot itself. Energy is used in recipes that produce more than the sum of their ingredients.\n\nNot all energy recipes are especially mystical however. These recipes more resemble traditional cooking than alchemy. journal.document.alchemy_guide.bombs.title=Enhanced Bombs journal.document.alchemy_guide.bombs.body=A standard black powder bomb can be mixed with a specific item to create an enhanced bomb. +journal.document.alchemy_guide.weapons.title=Enhancing Weapons +journal.document.alchemy_guide.weapons.body=Some of the lighter or more magical weapons can be used in alchemy!\n\nEach thrown weapon produces enough liquid metal to fully repair another weapon of the same level and tier.\n\nOne wand will produce enough arcane resin to upgrade two wands of the same level, but no higher than +3. journal.document.alchemy_guide.exotic_potions.title=Exotic Potions journal.document.alchemy_guide.exotic_potions.body=Potions can be augmented with two seeds to create exotic potions. They have more powerful effects, but are often useful in different ways. journal.document.alchemy_guide.exotic_scrolls.title=Exotic Scrolls diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java index 7a49adcce..68567bd28 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java @@ -508,6 +508,27 @@ public abstract class Wand extends Item { public int collisionProperties(int target){ return collisionProperties; } + + public static class PlaceHolder extends Wand { + + { + image = ItemSpriteSheet.WAND_HOLDER; + } + + @Override + public boolean isSimilar(Item item) { + return item instanceof Wand; + } + + @Override + public void onZap(Ballistica attack) {} + public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {} + + @Override + public String info() { + return ""; + } + } protected static CellSelector.Listener zapper = new CellSelector.Listener() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java index e1ca64740..995c844ba 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java @@ -40,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Projecting; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.utils.Bundle; import com.watabou.utils.Random; @@ -445,4 +446,21 @@ abstract public class MissileWeapon extends Weapon { bundleRestoring = false; durability = bundle.getInt(DURABILITY); } + + public static class PlaceHolder extends MissileWeapon { + + { + image = ItemSpriteSheet.MISSILE_HOLDER; + } + + @Override + public boolean isSimilar(Item item) { + return item instanceof MissileWeapon; + } + + @Override + public String info() { + return ""; + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java index bdfe179c3..6483b6d7e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java @@ -118,13 +118,11 @@ public enum Document { ALCHEMY_GUIDE.pages.put("Stones", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Energy_Food", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Bombs", DeviceCompat.isDebug()); - //ALCHEMY_GUIDE.pages.put("Darts", DeviceCompat.isDebug()); + ALCHEMY_GUIDE.pages.put("Weapons", DeviceCompat.isDebug()); //prison ALCHEMY_GUIDE.pages.put("Exotic_Potions", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Exotic_Scrolls", DeviceCompat.isDebug()); - - //caves ALCHEMY_GUIDE.pages.put("Catalysts", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Brews_Elixirs", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Spells", DeviceCompat.isDebug()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java index a42920d49..873696c41 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java @@ -84,11 +84,9 @@ public class LaboratoryRoom extends SpecialRoom { } } - //4 pages in sewers, 6 in prison, 9 in caves+ + //5 pages in sewers, 10 in prison+ int chapterTarget; - if (missingPages.size() <= 3){ - chapterTarget = 3; - } else if (missingPages.size() <= 5){ + if (missingPages.size() <= 5){ chapterTarget = 2; } else { chapterTarget = 1; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java index aca0a2dc9..926781988 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java @@ -23,8 +23,10 @@ package com.shatteredpixel.shatteredpixeldungeon.ui; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.items.ArcaneResin; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.LiquidMetal; import com.shatteredpixel.shatteredpixeldungeon.items.Recipe; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit; @@ -62,6 +64,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.spells.ReclaimTrap; import com.shatteredpixel.shatteredpixeldungeon.items.spells.Recycle; import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene; @@ -309,6 +313,22 @@ public class QuickRecipe extends Component { } return result; case 4: + result.add(new QuickRecipe( new LiquidMetal.Recipe(), + new ArrayList(Arrays.asList(new MissileWeapon.PlaceHolder())), + new LiquidMetal())); + result.add(new QuickRecipe( new LiquidMetal.Recipe(), + new ArrayList(Arrays.asList(new MissileWeapon.PlaceHolder().quantity(2))), + new LiquidMetal())); + result.add(new QuickRecipe( new LiquidMetal.Recipe(), + new ArrayList(Arrays.asList(new MissileWeapon.PlaceHolder().quantity(3))), + new LiquidMetal())); + result.add(null); + result.add(null); + result.add(new QuickRecipe( new ArcaneResin.Recipe(), + new ArrayList(Arrays.asList(new Wand.PlaceHolder())), + new ArcaneResin())); + return result; + case 5: r = new ExoticPotion.PotionToExotic(); for (Class cls : Generator.Category.POTION.classes){ Potion pot = (Potion) Reflection.newInstance(cls); @@ -316,7 +336,7 @@ public class QuickRecipe extends Component { result.add(new QuickRecipe( r, in, r.sampleOutput(in))); } return result; - case 5: + case 6: r = new ExoticScroll.ScrollToExotic(); for (Class cls : Generator.Category.SCROLL.classes){ Scroll scroll = (Scroll) Reflection.newInstance(cls); @@ -324,7 +344,7 @@ public class QuickRecipe extends Component { result.add(new QuickRecipe( r, in, r.sampleOutput(in))); } return result; - case 6: + case 7: result.add(new QuickRecipe(new AlchemicalCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Plant.Seed.PlaceHolder())), new AlchemicalCatalyst())); result.add(new QuickRecipe(new AlchemicalCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Runestone.PlaceHolder())), new AlchemicalCatalyst())); result.add(null); @@ -332,7 +352,7 @@ public class QuickRecipe extends Component { result.add(new QuickRecipe(new ArcaneCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Scroll.PlaceHolder(), new Runestone.PlaceHolder())), new ArcaneCatalyst())); result.add(new QuickRecipe(new ArcaneCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Scroll.PlaceHolder(), new Plant.Seed.PlaceHolder())), new ArcaneCatalyst())); return result; - case 7: + case 8: result.add(new QuickRecipe(new CausticBrew.Recipe())); result.add(new QuickRecipe(new InfernalBrew.Recipe())); result.add(new QuickRecipe(new BlizzardBrew.Recipe())); @@ -347,7 +367,7 @@ public class QuickRecipe extends Component { result.add(new QuickRecipe(new ElixirOfToxicEssence.Recipe())); result.add(new QuickRecipe(new ElixirOfArcaneArmor.Recipe())); return result; - case 8: + case 9: result.add(new QuickRecipe(new MagicalPorter.Recipe())); result.add(new QuickRecipe(new PhaseShift.Recipe())); result.add(new QuickRecipe(new WildEnergy.Recipe())); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java index 7d9cb1e9c..a3a8f6049 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java @@ -325,9 +325,9 @@ public class WndJournal extends WndTabbed { public static class AlchemyTab extends Component { private RedButton[] pageButtons; - private static final int NUM_BUTTONS = 9; + private static final int NUM_BUTTONS = 10; - private static final int[] spriteIndexes = {10, 12, 7, 8, 9, 11, 13, 14, 15}; + private static final int[] spriteIndexes = {10, 12, 7, 8, 3, 9, 11, 13, 14, 15}; private static int currentPageIdx = -1; @@ -380,14 +380,14 @@ public class WndJournal extends WndTabbed { } } else { //for first row - float buttonWidth = width()/4; + float buttonWidth = width()/5; float y = 0; float x = 0; for (int i = 0; i < NUM_BUTTONS; i++) { pageButtons[i].setRect(x, y, buttonWidth, ITEM_HEIGHT); PixelScene.align(pageButtons[i]); x += buttonWidth; - if (i == 3){ + if (i == 4){ y += ITEM_HEIGHT; x = 0; buttonWidth = width()/5; @@ -440,7 +440,7 @@ public class WndJournal extends WndTabbed { ArrayList toAdd = QuickRecipe.getRecipes(currentPageIdx); float left; - float top = body.bottom()+1; + float top = body.bottom()+2; int w; ArrayList toAddThisRow = new ArrayList<>(); while (!toAdd.isEmpty()){ @@ -486,7 +486,7 @@ public class WndJournal extends WndTabbed { top += 17; toAddThisRow.clear(); } - top -=1; + top -= 1; content.setSize(width(), top); list.setSize(list.width(), list.height()); list.scrollTo(0, 0);