v0.7.2: significant alchemy system changes:
- added catalysts, which make advanced alchemy more flexible - changed many advanced alchemy recipes to tie into catalysts - removed several elixirs and brews which offered no new gameplay - adjusted magical infusion due to it now using catalysts - adjusted journal to reflect all these changes
This commit is contained in:
parent
84f6be71db
commit
0bcac361ea
Binary file not shown.
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.hero;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.BuildConfig;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
|
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
|
||||||
|
|
|
@ -27,11 +27,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit;
|
import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat;
|
import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.FrigidBrew;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.FrostfireBrew;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.WickedBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.WickedBrew;
|
||||||
|
@ -40,14 +38,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDr
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfRestoration;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfVitality;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.Alchemize;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.Alchemize;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.ArcaneCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.BeaconOfReturning;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.BeaconOfReturning;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.CurseInfusion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.CurseInfusion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall;
|
||||||
|
@ -106,6 +103,7 @@ public abstract class Recipe {
|
||||||
|
|
||||||
int[] needed = inQuantity.clone();
|
int[] needed = inQuantity.clone();
|
||||||
|
|
||||||
|
//TODO is this right?
|
||||||
for (Item ingredient : ingredients){
|
for (Item ingredient : ingredients){
|
||||||
for (int i = 0; i < inputs.length; i++){
|
for (int i = 0; i < inputs.length; i++){
|
||||||
if (ingredient.getClass() == inputs[i]){
|
if (ingredient.getClass() == inputs[i]){
|
||||||
|
@ -180,18 +178,15 @@ public abstract class Recipe {
|
||||||
new Blandfruit.CookFruit(),
|
new Blandfruit.CookFruit(),
|
||||||
new TippedDart.TipDart(),
|
new TippedDart.TipDart(),
|
||||||
new Bomb.EnhanceBomb(),
|
new Bomb.EnhanceBomb(),
|
||||||
|
new AlchemicalCatalyst.Recipe(),
|
||||||
|
new ArcaneCatalyst.Recipe(),
|
||||||
new ElixirOfAquaticRejuvenation.Recipe(),
|
new ElixirOfAquaticRejuvenation.Recipe(),
|
||||||
new ElixirOfDragonsBlood.Recipe(),
|
new ElixirOfDragonsBlood.Recipe(),
|
||||||
new ElixirOfIcyTouch.Recipe(),
|
new ElixirOfIcyTouch.Recipe(),
|
||||||
new ElixirOfMight.Recipe(),
|
new ElixirOfMight.Recipe(),
|
||||||
new ElixirOfHoneyedHealing.Recipe(),
|
new ElixirOfHoneyedHealing.Recipe(),
|
||||||
new ElixirOfRestoration.Recipe(),
|
|
||||||
new ElixirOfToxicEssence.Recipe(),
|
new ElixirOfToxicEssence.Recipe(),
|
||||||
new ElixirOfVitality.Recipe(),
|
|
||||||
new BlizzardBrew.Recipe(),
|
new BlizzardBrew.Recipe(),
|
||||||
new CausticBrew.Recipe(),
|
|
||||||
new FrigidBrew.Recipe(),
|
|
||||||
new FrostfireBrew.Recipe(),
|
|
||||||
new InfernalBrew.Recipe(),
|
new InfernalBrew.Recipe(),
|
||||||
new ShockingBrew.Recipe(),
|
new ShockingBrew.Recipe(),
|
||||||
new WickedBrew.Recipe(),
|
new WickedBrew.Recipe(),
|
||||||
|
|
|
@ -0,0 +1,139 @@
|
||||||
|
/*
|
||||||
|
* Pixel Dungeon
|
||||||
|
* Copyright (C) 2012-2015 Oleg Dolya
|
||||||
|
*
|
||||||
|
* Shattered Pixel Dungeon
|
||||||
|
* Copyright (C) 2014-2019 Evan Debenham
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.shatteredpixel.shatteredpixeldungeon.items.potions;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class AlchemicalCatalyst extends Potion {
|
||||||
|
|
||||||
|
{
|
||||||
|
image = ItemSpriteSheet.POTION_CATALYST;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HashMap<Class<? extends Potion>, Float> potionChances = new HashMap<>();
|
||||||
|
static{
|
||||||
|
potionChances.put(PotionOfHealing.class, 3f);
|
||||||
|
potionChances.put(PotionOfMindVision.class, 2f);
|
||||||
|
potionChances.put(PotionOfFrost.class, 2f);
|
||||||
|
potionChances.put(PotionOfLiquidFlame.class, 2f);
|
||||||
|
potionChances.put(PotionOfToxicGas.class, 2f);
|
||||||
|
potionChances.put(PotionOfHaste.class, 2f);
|
||||||
|
potionChances.put(PotionOfInvisibility.class, 2f);
|
||||||
|
potionChances.put(PotionOfLevitation.class, 2f);
|
||||||
|
potionChances.put(PotionOfParalyticGas.class, 2f);
|
||||||
|
potionChances.put(PotionOfPurity.class, 2f);
|
||||||
|
potionChances.put(PotionOfExperience.class, 1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void apply(Hero hero) {
|
||||||
|
try {
|
||||||
|
Potion p = Random.chances(potionChances).newInstance();
|
||||||
|
p.anonymize();
|
||||||
|
p.apply(hero);
|
||||||
|
} catch (Exception e) {
|
||||||
|
ShatteredPixelDungeon.reportException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void shatter(int cell) {
|
||||||
|
try {
|
||||||
|
Potion p = Random.chances(potionChances).newInstance();
|
||||||
|
p.anonymize();
|
||||||
|
curItem = p;
|
||||||
|
p.shatter(cell);
|
||||||
|
} catch (Exception e) {
|
||||||
|
ShatteredPixelDungeon.reportException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isKnown() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int price() {
|
||||||
|
return 40 * quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean testIngredients(ArrayList<Item> ingredients) {
|
||||||
|
boolean potion = false;
|
||||||
|
boolean secondary = false;
|
||||||
|
|
||||||
|
for (Item i : ingredients){
|
||||||
|
if (i instanceof Plant.Seed || i instanceof Runestone){
|
||||||
|
secondary = true;
|
||||||
|
//if it is a regular or exotic potion
|
||||||
|
} else if (ExoticPotion.regToExo.containsKey(i.getClass())
|
||||||
|
|| ExoticPotion.regToExo.containsValue(i.getClass())) {
|
||||||
|
potion = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return potion && secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int cost(ArrayList<Item> ingredients) {
|
||||||
|
for (Item i : ingredients){
|
||||||
|
if (i instanceof Plant.Seed){
|
||||||
|
return 1;
|
||||||
|
} else if (i instanceof Runestone){
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item brew(ArrayList<Item> ingredients) {
|
||||||
|
|
||||||
|
for (Item i : ingredients){
|
||||||
|
i.quantity(i.quantity()-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sampleOutput(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item sampleOutput(ArrayList<Item> ingredients) {
|
||||||
|
return new AlchemicalCatalyst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -139,6 +139,8 @@ public class Potion extends Item {
|
||||||
|
|
||||||
private static final HashSet<Class<?extends Potion>> canThrowPots = new HashSet<>();
|
private static final HashSet<Class<?extends Potion>> canThrowPots = new HashSet<>();
|
||||||
static{
|
static{
|
||||||
|
canThrowPots.add(AlchemicalCatalyst.class);
|
||||||
|
|
||||||
canThrowPots.add(PotionOfPurity.class);
|
canThrowPots.add(PotionOfPurity.class);
|
||||||
canThrowPots.add(PotionOfLevitation.class);
|
canThrowPots.add(PotionOfLevitation.class);
|
||||||
|
|
||||||
|
@ -408,7 +410,7 @@ public class Potion extends Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int splashColor(){
|
protected int splashColor(){
|
||||||
return ItemSprite.pick( image, 5, 9 );
|
return anonymous ? 0x00AAFF : ItemSprite.pick( image, 5, 9 );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void splash( int cell ) {
|
protected void splash( int cell ) {
|
||||||
|
@ -434,6 +436,23 @@ public class Potion extends Item {
|
||||||
return 30 * quantity;
|
return 30 * quantity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PlaceHolder extends Potion {
|
||||||
|
|
||||||
|
{
|
||||||
|
image = ItemSpriteSheet.POTION_HOLDER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSimilar(Item item) {
|
||||||
|
return ExoticPotion.regToExo.containsKey(item.getClass())
|
||||||
|
|| ExoticPotion.regToExo.containsValue(item.getClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String info() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class SeedToPotion extends Recipe {
|
public static class SeedToPotion extends Recipe {
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blizzard;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blizzard;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfSnapFreeze;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
@ -50,13 +50,13 @@ public class BlizzardBrew extends Brew {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients
|
//prices of ingredients
|
||||||
return quantity * (50 + 30);
|
return quantity * (30 + 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{PotionOfSnapFreeze.class, PotionOfFrost.class};
|
inputs = new Class[]{PotionOfFrost.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -25,8 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Inferno;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Inferno;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfDragonsBreath;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
@ -53,13 +53,13 @@ public class InfernalBrew extends Brew {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients
|
//prices of ingredients
|
||||||
return quantity * (50 + 30);
|
return quantity * (30 + 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{PotionOfDragonsBreath.class, PotionOfLiquidFlame.class};
|
inputs = new Class[]{PotionOfLiquidFlame.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -25,8 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfStormClouds;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
||||||
|
@ -57,13 +57,13 @@ public class ShockingBrew extends Brew {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients
|
//prices of ingredients
|
||||||
return quantity * (40 + 60);
|
return quantity * (40 + 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{PotionOfParalyticGas.class, PotionOfStormClouds.class};
|
inputs = new Class[]{PotionOfParalyticGas.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 8;
|
cost = 8;
|
||||||
|
|
|
@ -26,8 +26,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FireImbue;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FireImbue;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfDragonsBreath;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
|
||||||
|
@ -53,13 +53,13 @@ public class ElixirOfDragonsBlood extends Elixir {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients
|
//prices of ingredients
|
||||||
return quantity * (30 + 40);
|
return quantity * (50 + 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{PotionOfLiquidFlame.class, PotionOfPurity.class};
|
inputs = new Class[]{PotionOfDragonsBreath.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -25,8 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbue;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbue;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfSnapFreeze;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
|
||||||
public class ElixirOfIcyTouch extends Elixir {
|
public class ElixirOfIcyTouch extends Elixir {
|
||||||
|
@ -50,13 +50,13 @@ public class ElixirOfIcyTouch extends Elixir {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients
|
//prices of ingredients
|
||||||
return quantity * (30 + 40);
|
return quantity * (50 + 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{PotionOfFrost.class, PotionOfPurity.class};
|
inputs = new Class[]{PotionOfSnapFreeze.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -25,7 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ToxicImbue;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ToxicImbue;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PoisonParticle;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PoisonParticle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public class ElixirOfToxicEssence extends Elixir {
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{PotionOfToxicGas.class, PotionOfPurity.class};
|
inputs = new Class[]{PotionOfToxicGas.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -192,8 +192,8 @@ public abstract class Scroll extends Item {
|
||||||
|
|
||||||
public abstract void doRead();
|
public abstract void doRead();
|
||||||
|
|
||||||
//currently only used in scrolls owned by the unstable spellbook
|
//currently unused. Used to be used for unstable spellbook prior to 0.7.0
|
||||||
public abstract void empoweredRead();
|
public void empoweredRead(){};
|
||||||
|
|
||||||
protected void readAnimation() {
|
protected void readAnimation() {
|
||||||
curUser.spend( TIME_TO_READ );
|
curUser.spend( TIME_TO_READ );
|
||||||
|
@ -267,6 +267,27 @@ public abstract class Scroll extends Item {
|
||||||
return 30 * quantity;
|
return 30 * quantity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PlaceHolder extends Scroll {
|
||||||
|
|
||||||
|
{
|
||||||
|
image = ItemSpriteSheet.SCROLL_HOLDER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSimilar(Item item) {
|
||||||
|
return ExoticScroll.regToExo.containsKey(item.getClass())
|
||||||
|
|| ExoticScroll.regToExo.containsValue(item.getClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doRead() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String info() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class ScrollToStone extends Recipe {
|
public static class ScrollToStone extends Recipe {
|
||||||
|
|
||||||
private static HashMap<Class<?extends Scroll>, Class<?extends Runestone>> stones = new HashMap<>();
|
private static HashMap<Class<?extends Scroll>, Class<?extends Runestone>> stones = new HashMap<>();
|
||||||
|
|
|
@ -23,8 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
@ -61,13 +60,13 @@ public class Alchemize extends Spell implements AlchemyScene.AlchemyProvider {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients, divided by output quantity
|
//prices of ingredients, divided by output quantity
|
||||||
return Math.round(quantity * ((30 + 30) / 4f));
|
return Math.round(quantity * ((40 + 40) / 4f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfRecharging.class, PotionOfLiquidFlame.class};
|
inputs = new Class[]{ArcaneCatalyst.class, AlchemicalCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -29,7 +29,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfStormClouds;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfStormClouds;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||||
|
@ -74,13 +73,13 @@ public class AquaBlast extends TargetedSpell {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients, divided by output quantity
|
//prices of ingredients, divided by output quantity
|
||||||
return Math.round(quantity * ((30 + 60) / 12f));
|
return Math.round(quantity * ((60 + 40) / 12f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfIdentify.class, PotionOfStormClouds.class};
|
inputs = new Class[]{PotionOfStormClouds.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 4;
|
cost = 4;
|
||||||
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
/*
|
||||||
|
* Pixel Dungeon
|
||||||
|
* Copyright (C) 2012-2015 Oleg Dolya
|
||||||
|
*
|
||||||
|
* Shattered Pixel Dungeon
|
||||||
|
* Copyright (C) 2014-2019 Evan Debenham
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMirrorImage;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRage;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRetribution;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class ArcaneCatalyst extends Spell {
|
||||||
|
|
||||||
|
{
|
||||||
|
image = ItemSpriteSheet.SCROLL_CATALYST;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HashMap<Class<? extends Scroll>, Float> scrollChances = new HashMap<>();
|
||||||
|
static{
|
||||||
|
scrollChances.put( ScrollOfIdentify.class, 3f );
|
||||||
|
scrollChances.put( ScrollOfRemoveCurse.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfMagicMapping.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfMirrorImage.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfRecharging.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfLullaby.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfRetribution.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfRage.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfTeleportation.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfTerror.class, 2f );
|
||||||
|
scrollChances.put( ScrollOfTransmutation.class, 1f );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCast(Hero hero) {
|
||||||
|
|
||||||
|
detach( curUser.belongings.backpack );
|
||||||
|
updateQuickslot();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Scroll s = Random.chances(scrollChances).newInstance();
|
||||||
|
s.anonymize();
|
||||||
|
curItem = s;
|
||||||
|
s.doRead();
|
||||||
|
} catch (Exception e) {
|
||||||
|
ShatteredPixelDungeon.reportException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int price() {
|
||||||
|
return 40 * quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean testIngredients(ArrayList<Item> ingredients) {
|
||||||
|
boolean scroll = false;
|
||||||
|
boolean secondary = false;
|
||||||
|
|
||||||
|
for (Item i : ingredients){
|
||||||
|
if (i instanceof Plant.Seed || i instanceof Runestone){
|
||||||
|
secondary = true;
|
||||||
|
//if it is a regular or exotic potion
|
||||||
|
} else if (ExoticScroll.regToExo.containsKey(i.getClass())
|
||||||
|
|| ExoticScroll.regToExo.containsValue(i.getClass())) {
|
||||||
|
scroll = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return scroll && secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int cost(ArrayList<Item> ingredients) {
|
||||||
|
for (Item i : ingredients){
|
||||||
|
if (i instanceof Plant.Seed){
|
||||||
|
return 2;
|
||||||
|
} else if (i instanceof Runestone){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item brew(ArrayList<Item> ingredients) {
|
||||||
|
|
||||||
|
for (Item i : ingredients){
|
||||||
|
i.quantity(i.quantity()-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sampleOutput(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item sampleOutput(ArrayList<Item> ingredients) {
|
||||||
|
return new ArcaneCatalyst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,7 +29,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPassage;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPassage;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
@ -183,7 +182,7 @@ public class BeaconOfReturning extends Spell {
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfPassage.class, ScrollOfMagicMapping.class};
|
inputs = new Class[]{ScrollOfPassage.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 10;
|
cost = 10;
|
||||||
|
|
|
@ -27,7 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
@ -60,13 +59,13 @@ public class FeatherFall extends Spell {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients, divided by output quantity
|
//prices of ingredients, divided by output quantity
|
||||||
return Math.round(quantity * ((40 + 30) / 2f));
|
return Math.round(quantity * ((30 + 40) / 2f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfLullaby.class, PotionOfLevitation.class};
|
inputs = new Class[]{PotionOfLevitation.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -27,8 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
@ -38,21 +36,19 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
||||||
public class MagicalInfusion extends InventorySpell {
|
public class MagicalInfusion extends InventorySpell {
|
||||||
|
|
||||||
{
|
{
|
||||||
mode = WndBag.Mode.ENCHANTABLE;
|
mode = WndBag.Mode.UPGRADEABLE;
|
||||||
image = ItemSpriteSheet.MAGIC_INFUSE;
|
image = ItemSpriteSheet.MAGIC_INFUSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onItemSelected( Item item ) {
|
protected void onItemSelected( Item item ) {
|
||||||
|
|
||||||
if (item instanceof SpiritBow){
|
if (item instanceof Weapon && ((Weapon) item).enchantment != null) {
|
||||||
if (((SpiritBow) item).enchantment == null){
|
|
||||||
((Weapon)item).enchant();
|
|
||||||
}
|
|
||||||
} else if (item instanceof Weapon) {
|
|
||||||
((Weapon) item).upgrade(true);
|
((Weapon) item).upgrade(true);
|
||||||
} else {
|
} else if (item instanceof Armor && ((Armor) item).glyph != null) {
|
||||||
((Armor) item).upgrade(true);
|
((Armor) item).upgrade(true);
|
||||||
|
} else {
|
||||||
|
item.upgrade();
|
||||||
}
|
}
|
||||||
|
|
||||||
GLog.p( Messages.get(this, "infuse", item.name()) );
|
GLog.p( Messages.get(this, "infuse", item.name()) );
|
||||||
|
@ -66,16 +62,16 @@ public class MagicalInfusion extends InventorySpell {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients, divided by output quantity
|
//prices of ingredients, divided by output quantity
|
||||||
return Math.round(quantity * ((50 + 30) / 1f));
|
return Math.round(quantity * ((50 + 40) / 1f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfUpgrade.class, StoneOfEnchantment.class};
|
inputs = new Class[]{ScrollOfUpgrade.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 3;
|
cost = 5;
|
||||||
|
|
||||||
output = MagicalInfusion.class;
|
output = MagicalInfusion.class;
|
||||||
outQuantity = 1;
|
outQuantity = 1;
|
||||||
|
|
|
@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.MerchantsBeacon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.MerchantsBeacon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
@ -65,13 +64,13 @@ public class MagicalPorter extends InventorySpell {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients, divided by output quantity
|
//prices of ingredients, divided by output quantity
|
||||||
return Math.round(quantity * ((30 + 5) / 8f));
|
return Math.round(quantity * ((5 + 40) / 8f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfIdentify.class, MerchantsBeacon.class};
|
inputs = new Class[]{MerchantsBeacon.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 4;
|
cost = 4;
|
||||||
|
|
|
@ -27,7 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
@ -85,7 +84,7 @@ public class PhaseShift extends TargetedSpell {
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfTeleportation.class, ScrollOfTerror.class};
|
inputs = new Class[]{ScrollOfTeleportation.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -32,7 +32,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotio
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfDivination;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
|
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
|
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
|
||||||
|
@ -94,13 +93,13 @@ public class Recycle extends InventorySpell {
|
||||||
@Override
|
@Override
|
||||||
public int price() {
|
public int price() {
|
||||||
//prices of ingredients, divided by output quantity
|
//prices of ingredients, divided by output quantity
|
||||||
return Math.round(quantity * ((50 + 50) / 8f));
|
return Math.round(quantity * ((50 + 40) / 8f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||||
|
|
||||||
{
|
{
|
||||||
inputs = new Class[]{ScrollOfTransmutation.class, ScrollOfDivination.class};
|
inputs = new Class[]{ScrollOfTransmutation.class, ArcaneCatalyst.class};
|
||||||
inQuantity = new int[]{1, 1};
|
inQuantity = new int[]{1, 1};
|
||||||
|
|
||||||
cost = 6;
|
cost = 6;
|
||||||
|
|
|
@ -119,8 +119,8 @@ public enum Document {
|
||||||
ALCHEMY_GUIDE.pages.put("Exotic_Scrolls", false);
|
ALCHEMY_GUIDE.pages.put("Exotic_Scrolls", false);
|
||||||
ALCHEMY_GUIDE.pages.put("Energy_Food", false);
|
ALCHEMY_GUIDE.pages.put("Energy_Food", false);
|
||||||
ALCHEMY_GUIDE.pages.put("Bombs", false);
|
ALCHEMY_GUIDE.pages.put("Bombs", false);
|
||||||
ALCHEMY_GUIDE.pages.put("Brews", false);
|
ALCHEMY_GUIDE.pages.put("Catalysts", false);
|
||||||
ALCHEMY_GUIDE.pages.put("Elixirs", false);
|
ALCHEMY_GUIDE.pages.put("Brews_Elixirs", false);
|
||||||
ALCHEMY_GUIDE.pages.put("Spells", false);
|
ALCHEMY_GUIDE.pages.put("Spells", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +161,11 @@ public enum Document {
|
||||||
if (doc.pages.containsKey(page)) {
|
if (doc.pages.containsKey(page)) {
|
||||||
doc.pages.put(page, true);
|
doc.pages.put(page, true);
|
||||||
}
|
}
|
||||||
|
//pre-0.7.2 saves
|
||||||
|
else if (page.equals("Brews")){
|
||||||
|
doc.pages.put("Catalysts", true);
|
||||||
|
doc.pages.put("Brews_Elixirs", true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class ItemSpriteSheet {
|
||||||
public static final int SCROLL_HOLDER = PLACEHOLDERS+11;
|
public static final int SCROLL_HOLDER = PLACEHOLDERS+11;
|
||||||
public static final int SEED_HOLDER = PLACEHOLDERS+10;
|
public static final int SEED_HOLDER = PLACEHOLDERS+10;
|
||||||
public static final int STONE_HOLDER = PLACEHOLDERS+12;
|
public static final int STONE_HOLDER = PLACEHOLDERS+12;
|
||||||
public static final int BREW_HOLDER = PLACEHOLDERS+13;
|
public static final int CATA_HOLDER = PLACEHOLDERS+13;
|
||||||
public static final int ELIXIR_HOLDER = PLACEHOLDERS+14;
|
public static final int ELIXIR_HOLDER = PLACEHOLDERS+14;
|
||||||
public static final int SPELL_HOLDER = PLACEHOLDERS+15;
|
public static final int SPELL_HOLDER = PLACEHOLDERS+15;
|
||||||
static{
|
static{
|
||||||
|
@ -67,7 +67,7 @@ public class ItemSpriteSheet {
|
||||||
assignItemRect(SEED_HOLDER, 10, 10);
|
assignItemRect(SEED_HOLDER, 10, 10);
|
||||||
assignItemRect(SCROLL_HOLDER, 15, 14);
|
assignItemRect(SCROLL_HOLDER, 15, 14);
|
||||||
assignItemRect(STONE_HOLDER, 14, 12);
|
assignItemRect(STONE_HOLDER, 14, 12);
|
||||||
assignItemRect(BREW_HOLDER, 12, 14);
|
assignItemRect(CATA_HOLDER, 6, 15);
|
||||||
assignItemRect(ELIXIR_HOLDER, 12, 14);
|
assignItemRect(ELIXIR_HOLDER, 12, 14);
|
||||||
assignItemRect(SPELL_HOLDER, 8, 16);
|
assignItemRect(SPELL_HOLDER, 8, 16);
|
||||||
}
|
}
|
||||||
|
@ -443,9 +443,12 @@ public class ItemSpriteSheet {
|
||||||
public static final int SCROLL_BERKANAN = SCROLLS+9;
|
public static final int SCROLL_BERKANAN = SCROLLS+9;
|
||||||
public static final int SCROLL_ODAL = SCROLLS+10;
|
public static final int SCROLL_ODAL = SCROLLS+10;
|
||||||
public static final int SCROLL_TIWAZ = SCROLLS+11;
|
public static final int SCROLL_TIWAZ = SCROLLS+11;
|
||||||
|
|
||||||
|
public static final int SCROLL_CATALYST = SCROLLS+13;
|
||||||
static {
|
static {
|
||||||
for (int i = SCROLLS; i < SCROLLS+16; i++)
|
for (int i = SCROLLS; i < SCROLLS+16; i++)
|
||||||
assignItemRect(i, 15, 14);
|
assignItemRect(i, 15, 14);
|
||||||
|
assignItemRect(SCROLL_CATALYST, 9, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int EXOTIC_SCROLLS = xy(1, 20); //16 slots
|
private static final int EXOTIC_SCROLLS = xy(1, 20); //16 slots
|
||||||
|
@ -497,9 +500,11 @@ public class ItemSpriteSheet {
|
||||||
public static final int POTION_CHARCOAL = POTIONS+9;
|
public static final int POTION_CHARCOAL = POTIONS+9;
|
||||||
public static final int POTION_SILVER = POTIONS+10;
|
public static final int POTION_SILVER = POTIONS+10;
|
||||||
public static final int POTION_IVORY = POTIONS+11;
|
public static final int POTION_IVORY = POTIONS+11;
|
||||||
|
public static final int POTION_CATALYST = POTIONS+13;
|
||||||
static {
|
static {
|
||||||
for (int i = POTIONS; i < POTIONS+16; i++)
|
for (int i = POTIONS; i < POTIONS+16; i++)
|
||||||
assignItemRect(i, 12, 14);
|
assignItemRect(i, 12, 14);
|
||||||
|
assignItemRect(POTION_CATALYST, 6, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int EXOTIC_POTIONS = xy(1, 23); //16 slots
|
private static final int EXOTIC_POTIONS = xy(1, 23); //16 slots
|
||||||
|
@ -538,46 +543,31 @@ public class ItemSpriteSheet {
|
||||||
assignItemRect(i, 10, 10);
|
assignItemRect(i, 10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int ELIXIRS = xy(1, 25); //16 slots
|
private static final int BREWS = xy(1, 25); //8 slots
|
||||||
public static final int ELIXIR_DRAGON = ELIXIRS+0;
|
public static final int BREW_INFERNAL = BREWS+0;
|
||||||
public static final int ELIXIR_TOXIC = ELIXIRS+1;
|
public static final int BREW_BLIZZARD = BREWS+1;
|
||||||
public static final int ELIXIR_ICY = ELIXIRS+2;
|
public static final int BREW_SHOCKING = BREWS+3;
|
||||||
public static final int ELIXIR_MIGHT = ELIXIRS+3;
|
public static final int BREW_CAUSTIC = BREWS+4;
|
||||||
public static final int ELIXIR_AQUA = ELIXIRS+4;
|
public static final int BREW_WICKED = BREWS+5; //discontinued
|
||||||
public static final int ELIXIR_RESTO = ELIXIRS+5;
|
public static final int BREW_FRIGID = BREWS+6; //discontinued
|
||||||
public static final int ELIXIR_SURGE = ELIXIRS+6;
|
public static final int BREW_FROSTFIRE = BREWS+7; //discontinued
|
||||||
public static final int ELIXIR_HONEY = ELIXIRS+7;
|
|
||||||
|
private static final int ELIXIRS = xy(9, 25); //8 slots
|
||||||
|
public static final int ELIXIR_HONEY = ELIXIRS+0;
|
||||||
|
public static final int ELIXIR_AQUA = ELIXIRS+1;
|
||||||
|
public static final int ELIXIR_MIGHT = ELIXIRS+2;
|
||||||
|
public static final int ELIXIR_DRAGON = ELIXIRS+3;
|
||||||
|
public static final int ELIXIR_ICY = ELIXIRS+4;
|
||||||
|
public static final int ELIXIR_TOXIC = ELIXIRS+5;
|
||||||
|
public static final int ELIXIR_RESTO = ELIXIRS+6; //discontinued
|
||||||
|
public static final int ELIXIR_SURGE = ELIXIRS+7; //discontinued
|
||||||
static{
|
static{
|
||||||
assignItemRect(ELIXIR_DRAGON, 12, 14);
|
for (int i = BREWS; i < BREWS+16; i++)
|
||||||
assignItemRect(ELIXIR_TOXIC, 12, 14);
|
assignItemRect(i, 12, 14);
|
||||||
assignItemRect(ELIXIR_ICY, 12, 14);
|
|
||||||
assignItemRect(ELIXIR_MIGHT, 12, 14);
|
|
||||||
assignItemRect(ELIXIR_AQUA, 12, 14);
|
|
||||||
assignItemRect(ELIXIR_RESTO, 12, 14);
|
|
||||||
assignItemRect(ELIXIR_SURGE, 12, 14);
|
|
||||||
assignItemRect(ELIXIR_HONEY, 12, 14);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int BREWS = xy(1, 26); //16 slots
|
//16 free slots
|
||||||
public static final int BREW_WICKED = BREWS+0;
|
|
||||||
public static final int BREW_FRIGID = BREWS+1;
|
|
||||||
public static final int BREW_FROSTFIRE= BREWS+2;
|
|
||||||
|
|
||||||
public static final int BREW_CAUSTIC = BREWS+4;
|
|
||||||
public static final int BREW_INFERNAL = BREWS+5;
|
|
||||||
public static final int BREW_BLIZZARD = BREWS+6;
|
|
||||||
public static final int BREW_SHOCKING = BREWS+7;
|
|
||||||
static{
|
|
||||||
assignItemRect(BREW_WICKED, 12, 14);
|
|
||||||
assignItemRect(BREW_FRIGID, 12, 14);
|
|
||||||
assignItemRect(BREW_FROSTFIRE, 12, 14);
|
|
||||||
|
|
||||||
assignItemRect(BREW_CAUSTIC, 12, 14);
|
|
||||||
assignItemRect(BREW_INFERNAL, 12, 14);
|
|
||||||
assignItemRect(BREW_BLIZZARD, 12, 14);
|
|
||||||
assignItemRect(BREW_SHOCKING, 12, 14);
|
|
||||||
}
|
|
||||||
//sprites still pretty WIP
|
|
||||||
private static final int SPELLS = xy(1, 27); //16 slots
|
private static final int SPELLS = xy(1, 27); //16 slots
|
||||||
public static final int PHASE_SHIFT = SPELLS+0;
|
public static final int PHASE_SHIFT = SPELLS+0;
|
||||||
public static final int AQUA_BLAST = SPELLS+1;
|
public static final int AQUA_BLAST = SPELLS+1;
|
||||||
|
|
|
@ -33,27 +33,24 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty;
|
import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat;
|
import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.FrigidBrew;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.FrostfireBrew;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.WickedBrew;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfAquaticRejuvenation;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfAquaticRejuvenation;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfRestoration;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfVitality;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.Alchemize;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.Alchemize;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.ArcaneCatalyst;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.BeaconOfReturning;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.BeaconOfReturning;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.CurseInfusion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.CurseInfusion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall;
|
import com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall;
|
||||||
|
@ -344,27 +341,26 @@ public class QuickRecipe extends Component {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
case 7:
|
case 7:
|
||||||
result.add(new QuickRecipe(new WickedBrew.Recipe()));
|
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 FrigidBrew.Recipe()));
|
result.add(new QuickRecipe(new AlchemicalCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Runestone.PlaceHolder())), new AlchemicalCatalyst()));
|
||||||
result.add(new QuickRecipe(new FrostfireBrew.Recipe()));
|
|
||||||
result.add(null);
|
result.add(null);
|
||||||
result.add(null);
|
result.add(null);
|
||||||
|
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 8:
|
||||||
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()));
|
||||||
result.add(new QuickRecipe(new ShockingBrew.Recipe()));
|
result.add(new QuickRecipe(new ShockingBrew.Recipe()));
|
||||||
result.add(new QuickRecipe(new CausticBrew.Recipe()));
|
result.add(new QuickRecipe(new CausticBrew.Recipe()));
|
||||||
return result;
|
result.add(null);
|
||||||
case 8:
|
result.add(null);
|
||||||
result.add(new QuickRecipe(new ElixirOfRestoration.Recipe()));
|
|
||||||
result.add(new QuickRecipe(new ElixirOfVitality.Recipe()));
|
|
||||||
result.add(new QuickRecipe(new ElixirOfHoneyedHealing.Recipe()));
|
result.add(new QuickRecipe(new ElixirOfHoneyedHealing.Recipe()));
|
||||||
result.add(new QuickRecipe(new ElixirOfAquaticRejuvenation.Recipe()));
|
result.add(new QuickRecipe(new ElixirOfAquaticRejuvenation.Recipe()));
|
||||||
result.add(null);
|
result.add(new QuickRecipe(new ElixirOfMight.Recipe()));
|
||||||
result.add(null);
|
|
||||||
result.add(new QuickRecipe(new ElixirOfDragonsBlood.Recipe()));
|
result.add(new QuickRecipe(new ElixirOfDragonsBlood.Recipe()));
|
||||||
result.add(new QuickRecipe(new ElixirOfIcyTouch.Recipe()));
|
result.add(new QuickRecipe(new ElixirOfIcyTouch.Recipe()));
|
||||||
result.add(new QuickRecipe(new ElixirOfToxicEssence.Recipe()));
|
result.add(new QuickRecipe(new ElixirOfToxicEssence.Recipe()));
|
||||||
result.add(new QuickRecipe(new ElixirOfMight.Recipe()));
|
|
||||||
return result;
|
return result;
|
||||||
case 9:
|
case 9:
|
||||||
result.add(new QuickRecipe(new MagicalPorter.Recipe()));
|
result.add(new QuickRecipe(new MagicalPorter.Recipe()));
|
||||||
|
@ -377,8 +373,8 @@ public class QuickRecipe extends Component {
|
||||||
result.add(new QuickRecipe(new ReclaimTrap.Recipe()));
|
result.add(new QuickRecipe(new ReclaimTrap.Recipe()));
|
||||||
result.add(null);
|
result.add(null);
|
||||||
result.add(null);
|
result.add(null);
|
||||||
result.add(new QuickRecipe(new MagicalInfusion.Recipe()));
|
|
||||||
result.add(new QuickRecipe(new CurseInfusion.Recipe()));
|
result.add(new QuickRecipe(new CurseInfusion.Recipe()));
|
||||||
|
result.add(new QuickRecipe(new MagicalInfusion.Recipe()));
|
||||||
result.add(new QuickRecipe(new Alchemize.Recipe()));
|
result.add(new QuickRecipe(new Alchemize.Recipe()));
|
||||||
result.add(new QuickRecipe(new Recycle.Recipe()));
|
result.add(new QuickRecipe(new Recycle.Recipe()));
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -515,8 +515,12 @@ items.potions.potion.no=No, I changed my mind
|
||||||
items.potions.potion.sure_drink=Are you sure you want to drink it? In most cases you should throw such potions at your enemies.
|
items.potions.potion.sure_drink=Are you sure you want to drink it? In most cases you should throw such potions at your enemies.
|
||||||
items.potions.potion.sure_throw=Are you sure you want to throw it? In most cases it makes sense to drink it.
|
items.potions.potion.sure_throw=Are you sure you want to throw it? In most cases it makes sense to drink it.
|
||||||
items.potions.potion.shatter=The flask shatters and the liquid splashes harmlessly.
|
items.potions.potion.shatter=The flask shatters and the liquid splashes harmlessly.
|
||||||
|
items.potions.potion$placeholder.name=potion
|
||||||
items.potions.potion$seedtopotion.name=Random Potion
|
items.potions.potion$seedtopotion.name=Random Potion
|
||||||
|
|
||||||
|
items.potions.alchemicalcatalyst.name=alchemical catalyst
|
||||||
|
items.potions.alchemicalcatalyst.desc=This thin vial of magical liquid is made from the deconstructed essence of a potion. The liquid is translucent, and glows with shifting colors of the rainbow.\n\nThis catalyst is primarily useful as an alchemy ingredient, but you can also use it directly to get the effect of a random potion.
|
||||||
|
|
||||||
items.potions.potionofexperience.name=potion of experience
|
items.potions.potionofexperience.name=potion of experience
|
||||||
items.potions.potionofexperience.desc=The storied experiences of multitudes of battles reduced to liquid form, this draught will instantly raise your experience level.
|
items.potions.potionofexperience.desc=The storied experiences of multitudes of battles reduced to liquid form, this draught will instantly raise your experience level.
|
||||||
|
|
||||||
|
@ -803,6 +807,7 @@ items.scrolls.scroll.unknown_desc=An indecipherable magical rune is written on t
|
||||||
items.scrolls.scroll.blinded=You can't read a scroll while blinded.
|
items.scrolls.scroll.blinded=You can't read a scroll while blinded.
|
||||||
items.scrolls.scroll.no_magic=You can't read a scroll while magic immune.
|
items.scrolls.scroll.no_magic=You can't read a scroll while magic immune.
|
||||||
items.scrolls.scroll.cursed=Your cursed spellbook prevents you from invoking this scroll's magic! A scroll of remove curse might be strong enough to still work though...
|
items.scrolls.scroll.cursed=Your cursed spellbook prevents you from invoking this scroll's magic! A scroll of remove curse might be strong enough to still work though...
|
||||||
|
items.scrolls.scroll$placeholder.name=scroll
|
||||||
|
|
||||||
items.scrolls.inventoryscroll.warning=Do you really want to cancel this scroll usage? It will be consumed anyway.
|
items.scrolls.inventoryscroll.warning=Do you really want to cancel this scroll usage? It will be consumed anyway.
|
||||||
items.scrolls.inventoryscroll.yes=Yes, I'm positive
|
items.scrolls.inventoryscroll.yes=Yes, I'm positive
|
||||||
|
@ -937,6 +942,9 @@ items.spells.alchemize.desc=This spell channels alchemical energy, allowing you
|
||||||
items.spells.aquablast.name=aqua blast
|
items.spells.aquablast.name=aqua blast
|
||||||
items.spells.aquablast.desc=This spell will create a burst of water at the target location. It isn't forceful enough to do damage (even to fiery enemies), but it will spread water to nearby terrain and very briefly stun anything caught in the center of the burst.
|
items.spells.aquablast.desc=This spell will create a burst of water at the target location. It isn't forceful enough to do damage (even to fiery enemies), but it will spread water to nearby terrain and very briefly stun anything caught in the center of the burst.
|
||||||
|
|
||||||
|
items.spells.arcanecatalyst.name=arcane catalyst
|
||||||
|
items.spells.arcanecatalyst.desc=This tiny dark crystal is made from the deconstructed magic of a scroll. It is quite heavy, despite its size.\n\nThis catalyst is primarily useful as an alchemy ingredient, but you can also channel the magic directly to get the effect of a random scroll.
|
||||||
|
|
||||||
items.spells.beaconofreturning.name=beacon of returning
|
items.spells.beaconofreturning.name=beacon of returning
|
||||||
items.spells.beaconofreturning.preventing=The strong magic aura of this place prevents you from using the spell!
|
items.spells.beaconofreturning.preventing=The strong magic aura of this place prevents you from using the spell!
|
||||||
items.spells.beaconofreturning.creatures=The Psychic aura of neighbouring creatures doesn't allow you to teleport at this moment.
|
items.spells.beaconofreturning.creatures=The Psychic aura of neighbouring creatures doesn't allow you to teleport at this moment.
|
||||||
|
@ -961,7 +969,7 @@ items.spells.spell.no_magic=You can't cast spells while magic immune.
|
||||||
items.spells.magicalinfusion.name=magical infusion
|
items.spells.magicalinfusion.name=magical infusion
|
||||||
items.spells.magicalinfusion.inv_title=Infuse an item
|
items.spells.magicalinfusion.inv_title=Infuse an item
|
||||||
items.spells.magicalinfusion.infuse=Your %s is infused with arcane energy!
|
items.spells.magicalinfusion.infuse=Your %s is infused with arcane energy!
|
||||||
items.spells.magicalinfusion.desc=This spell will infuse a weapon or armor with powerful magical energy.\n\nIn addition to being upgraded, a weapon will gain a magical enchantment, or armor will be imbued with a magical glyph.\n\nIf the item already has an enchantment or glyph, it will not be erased by the upgrade.
|
items.spells.magicalinfusion.desc=This spell posses the same magical power as a scroll of upgrade, but in a more stable form.\n\nIn addition to upgrading an item, it will also never erase an enchantment on a weapon or glyph on armor.
|
||||||
|
|
||||||
items.spells.magicalporter.name=magical porter
|
items.spells.magicalporter.name=magical porter
|
||||||
items.spells.magicalporter.inv_title=Port an item
|
items.spells.magicalporter.inv_title=Port an item
|
||||||
|
|
|
@ -35,12 +35,12 @@ 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.brews.title=Brews
|
journal.document.alchemy_guide.catalysts.title=Catalysts
|
||||||
journal.document.alchemy_guide.brews.body=Brews are made from potion-based recipes, and focus on harming your enemies.
|
journal.document.alchemy_guide.catalysts.body=Catalysts are made by combining a scroll or potion with a single seed or runestone. If the pair of items match, the alchemical energy cost is reduced.\n\nCatalysts are most useful as components in recipes covered in the next two pages, but also can be used in a pinch for a random effect.
|
||||||
journal.document.alchemy_guide.elixirs.title=Elixirs
|
journal.document.alchemy_guide.brews_elixirs.title=Brews and Elixirs
|
||||||
journal.document.alchemy_guide.elixirs.body=Elixirs are made from potion-based recipes, and focus on healing or boosting your abilities.
|
journal.document.alchemy_guide.brews_elixirs.body=Brews and elixirs are advanced potions which provide a variety of effects with a single use.
|
||||||
journal.document.alchemy_guide.spells.title=Spells
|
journal.document.alchemy_guide.spells.title=Spells
|
||||||
journal.document.alchemy_guide.spells.body=Spells are made from scroll-based recipes, and provide a variety of effects with multiple uses.
|
journal.document.alchemy_guide.spells.body=Spells are contained in crystals and provide a variety of effects with multiple uses.
|
||||||
|
|
||||||
journal.notes$landmark.well_of_health=well of health
|
journal.notes$landmark.well_of_health=well of health
|
||||||
journal.notes$landmark.well_of_awareness=well of awareness
|
journal.notes$landmark.well_of_awareness=well of awareness
|
||||||
|
|
Loading…
Reference in New Issue
Block a user