v0.9.4: adjusted alchemy guide for new recipes

This commit is contained in:
Evan Debenham 2021-07-20 15:17:55 -04:00
parent f97abe0ff2
commit 98c25a8fcd
8 changed files with 76 additions and 17 deletions

View File

@ -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.not_cursed=This wand is free of malevolent magic.
items.wands.wand.curse_discover=This %s is cursed! items.wands.wand.curse_discover=This %s is cursed!
items.wands.wand.prompt=Choose a location to zap 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.name=wand of blast wave
items.wands.wandofblastwave.staff_name=staff 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.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.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.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.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. 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.

View File

@ -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.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.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.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.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_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 journal.document.alchemy_guide.exotic_scrolls.title=Exotic Scrolls

View File

@ -508,6 +508,27 @@ public abstract class Wand extends Item {
public int collisionProperties(int target){ public int collisionProperties(int target){
return collisionProperties; 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() { protected static CellSelector.Listener zapper = new CellSelector.Listener() {

View File

@ -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.enchantments.Projecting;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -445,4 +446,21 @@ abstract public class MissileWeapon extends Weapon {
bundleRestoring = false; bundleRestoring = false;
durability = bundle.getInt(DURABILITY); 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 "";
}
}
} }

View File

@ -118,13 +118,11 @@ public enum Document {
ALCHEMY_GUIDE.pages.put("Stones", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Stones", DeviceCompat.isDebug());
ALCHEMY_GUIDE.pages.put("Energy_Food", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Energy_Food", DeviceCompat.isDebug());
ALCHEMY_GUIDE.pages.put("Bombs", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Bombs", DeviceCompat.isDebug());
//ALCHEMY_GUIDE.pages.put("Darts", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Weapons", DeviceCompat.isDebug());
//prison //prison
ALCHEMY_GUIDE.pages.put("Exotic_Potions", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Exotic_Potions", DeviceCompat.isDebug());
ALCHEMY_GUIDE.pages.put("Exotic_Scrolls", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Exotic_Scrolls", DeviceCompat.isDebug());
//caves
ALCHEMY_GUIDE.pages.put("Catalysts", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Catalysts", DeviceCompat.isDebug());
ALCHEMY_GUIDE.pages.put("Brews_Elixirs", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Brews_Elixirs", DeviceCompat.isDebug());
ALCHEMY_GUIDE.pages.put("Spells", DeviceCompat.isDebug()); ALCHEMY_GUIDE.pages.put("Spells", DeviceCompat.isDebug());

View File

@ -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; int chapterTarget;
if (missingPages.size() <= 3){ if (missingPages.size() <= 5){
chapterTarget = 3;
} else if (missingPages.size() <= 5){
chapterTarget = 2; chapterTarget = 2;
} else { } else {
chapterTarget = 1; chapterTarget = 1;

View File

@ -23,8 +23,10 @@ package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.ArcaneResin;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.LiquidMetal;
import com.shatteredpixel.shatteredpixeldungeon.items.Recipe; import com.shatteredpixel.shatteredpixeldungeon.items.Recipe;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit; 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.Recycle;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy;
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone; 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.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
@ -309,6 +313,22 @@ public class QuickRecipe extends Component {
} }
return result; return result;
case 4: case 4:
result.add(new QuickRecipe( new LiquidMetal.Recipe(),
new ArrayList<Item>(Arrays.asList(new MissileWeapon.PlaceHolder())),
new LiquidMetal()));
result.add(new QuickRecipe( new LiquidMetal.Recipe(),
new ArrayList<Item>(Arrays.asList(new MissileWeapon.PlaceHolder().quantity(2))),
new LiquidMetal()));
result.add(new QuickRecipe( new LiquidMetal.Recipe(),
new ArrayList<Item>(Arrays.asList(new MissileWeapon.PlaceHolder().quantity(3))),
new LiquidMetal()));
result.add(null);
result.add(null);
result.add(new QuickRecipe( new ArcaneResin.Recipe(),
new ArrayList<Item>(Arrays.asList(new Wand.PlaceHolder())),
new ArcaneResin()));
return result;
case 5:
r = new ExoticPotion.PotionToExotic(); r = new ExoticPotion.PotionToExotic();
for (Class<?> cls : Generator.Category.POTION.classes){ for (Class<?> cls : Generator.Category.POTION.classes){
Potion pot = (Potion) Reflection.newInstance(cls); Potion pot = (Potion) Reflection.newInstance(cls);
@ -316,7 +336,7 @@ public class QuickRecipe extends Component {
result.add(new QuickRecipe( r, in, r.sampleOutput(in))); result.add(new QuickRecipe( r, in, r.sampleOutput(in)));
} }
return result; return result;
case 5: case 6:
r = new ExoticScroll.ScrollToExotic(); r = new ExoticScroll.ScrollToExotic();
for (Class<?> cls : Generator.Category.SCROLL.classes){ for (Class<?> cls : Generator.Category.SCROLL.classes){
Scroll scroll = (Scroll) Reflection.newInstance(cls); Scroll scroll = (Scroll) Reflection.newInstance(cls);
@ -324,7 +344,7 @@ public class QuickRecipe extends Component {
result.add(new QuickRecipe( r, in, r.sampleOutput(in))); result.add(new QuickRecipe( r, in, r.sampleOutput(in)));
} }
return result; 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 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(new QuickRecipe(new AlchemicalCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Runestone.PlaceHolder())), new AlchemicalCatalyst()));
result.add(null); 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 Runestone.PlaceHolder())), new ArcaneCatalyst()));
result.add(new QuickRecipe(new ArcaneCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Scroll.PlaceHolder(), new Plant.Seed.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; return result;
case 7: case 8:
result.add(new QuickRecipe(new CausticBrew.Recipe())); result.add(new QuickRecipe(new CausticBrew.Recipe()));
result.add(new QuickRecipe(new InfernalBrew.Recipe())); result.add(new QuickRecipe(new InfernalBrew.Recipe()));
result.add(new QuickRecipe(new BlizzardBrew.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 ElixirOfToxicEssence.Recipe()));
result.add(new QuickRecipe(new ElixirOfArcaneArmor.Recipe())); result.add(new QuickRecipe(new ElixirOfArcaneArmor.Recipe()));
return result; return result;
case 8: case 9:
result.add(new QuickRecipe(new MagicalPorter.Recipe())); result.add(new QuickRecipe(new MagicalPorter.Recipe()));
result.add(new QuickRecipe(new PhaseShift.Recipe())); result.add(new QuickRecipe(new PhaseShift.Recipe()));
result.add(new QuickRecipe(new WildEnergy.Recipe())); result.add(new QuickRecipe(new WildEnergy.Recipe()));

View File

@ -325,9 +325,9 @@ public class WndJournal extends WndTabbed {
public static class AlchemyTab extends Component { public static class AlchemyTab extends Component {
private RedButton[] pageButtons; 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; private static int currentPageIdx = -1;
@ -380,14 +380,14 @@ public class WndJournal extends WndTabbed {
} }
} else { } else {
//for first row //for first row
float buttonWidth = width()/4; float buttonWidth = width()/5;
float y = 0; float y = 0;
float x = 0; float x = 0;
for (int i = 0; i < NUM_BUTTONS; i++) { for (int i = 0; i < NUM_BUTTONS; i++) {
pageButtons[i].setRect(x, y, buttonWidth, ITEM_HEIGHT); pageButtons[i].setRect(x, y, buttonWidth, ITEM_HEIGHT);
PixelScene.align(pageButtons[i]); PixelScene.align(pageButtons[i]);
x += buttonWidth; x += buttonWidth;
if (i == 3){ if (i == 4){
y += ITEM_HEIGHT; y += ITEM_HEIGHT;
x = 0; x = 0;
buttonWidth = width()/5; buttonWidth = width()/5;
@ -440,7 +440,7 @@ public class WndJournal extends WndTabbed {
ArrayList<QuickRecipe> toAdd = QuickRecipe.getRecipes(currentPageIdx); ArrayList<QuickRecipe> toAdd = QuickRecipe.getRecipes(currentPageIdx);
float left; float left;
float top = body.bottom()+1; float top = body.bottom()+2;
int w; int w;
ArrayList<QuickRecipe> toAddThisRow = new ArrayList<>(); ArrayList<QuickRecipe> toAddThisRow = new ArrayList<>();
while (!toAdd.isEmpty()){ while (!toAdd.isEmpty()){
@ -486,7 +486,7 @@ public class WndJournal extends WndTabbed {
top += 17; top += 17;
toAddThisRow.clear(); toAddThisRow.clear();
} }
top -=1; top -= 1;
content.setSize(width(), top); content.setSize(width(), top);
list.setSize(list.width(), list.height()); list.setSize(list.width(), list.height());
list.scrollTo(0, 0); list.scrollTo(0, 0);