v0.7.0: many alchemy balance changes

This commit is contained in:
Evan Debenham 2018-09-28 19:57:58 -04:00
parent 4c56360184
commit 27708be112
46 changed files with 231 additions and 86 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -40,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Doom;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.EarthImbue;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FireImbue;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Frost;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbue;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSleep;
@ -226,6 +227,8 @@ public abstract class Char extends Actor {
buff(FireImbue.class).proc(enemy);
if (buff(EarthImbue.class) != null)
buff(EarthImbue.class).proc(enemy);
if (buff(FrostImbue.class) != null)
buff(FrostImbue.class).proc(enemy);
enemy.sprite.bloodBurstA( sprite.center(), effectiveDamage );
enemy.sprite.flash();

View File

@ -281,6 +281,8 @@ public class Combo extends Buff implements ActionIndicator.Action {
target.buff(FireImbue.class).proc(enemy);
if (target.buff(EarthImbue.class) != null)
target.buff(EarthImbue.class).proc(enemy);
if (target.buff(FrostImbue.class) != null)
target.buff(FrostImbue.class).proc(enemy);
Sample.INSTANCE.play( Assets.SND_HIT, 1, 1, Random.Float( 0.8f, 1.25f ) );
enemy.sprite.bloodBurstA( target.sprite.center(), dmg );

View File

@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
//pre-0.7.0, otherwise unused
public class EarthImbue extends FlavourBuff {
{

View File

@ -39,7 +39,7 @@ public class FireImbue extends Buff {
announced = true;
}
public static final float DURATION = 30f;
public static final float DURATION = 50f;
protected float left;

View File

@ -0,0 +1,68 @@
/*
* Pixel Dungeon
* Copyright (C) 2012-2015 Oleg Dolya
*
* Shattered Pixel Dungeon
* Copyright (C) 2014-2018 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.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class FrostImbue extends FlavourBuff {
{
type = buffType.POSITIVE;
announced = true;
}
public static final float DURATION = 50f;
public void proc(Char enemy){
Buff.affect(enemy, Chill.class, 2f);
enemy.sprite.emitter().burst( SnowParticle.FACTORY, 2 );
}
@Override
public int icon() {
return BuffIndicator.FROST;
}
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override
public String toString() {
return Messages.get(this, "name");
}
@Override
public String desc() {
return Messages.get(this, "desc", dispTurns());
}
{
immunities.add( Frost.class );
immunities.add( Chill.class );
}
}

View File

@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
public class Ooze extends Buff {
@ -34,6 +35,26 @@ public class Ooze extends Buff {
announced = true;
}
private float left;
private static final String LEFT = "left";
@Override
public void storeInBundle( Bundle bundle ) {
super.storeInBundle( bundle );
bundle.put( LEFT, left );
}
@Override
public void restoreFromBundle( Bundle bundle ) {
super.restoreFromBundle(bundle);
//pre-0.7.0
if (bundle.contains( LEFT )) {
left = bundle.getFloat(LEFT);
} else {
left = 20;
}
}
@Override
public int icon() {
return BuffIndicator.OOZE;
@ -51,7 +72,11 @@ public class Ooze extends Buff {
@Override
public String desc() {
return Messages.get(this, "desc");
return Messages.get(this, "desc", dispTurns(left));
}
public void set(float left){
this.left = left;
}
@Override
@ -66,6 +91,10 @@ public class Ooze extends Buff {
GLog.n( Messages.get(this, "ondeath") );
}
spend( TICK );
left -= TICK;
if (left <= 0){
detach();
}
} else {
detach();
}

View File

@ -36,7 +36,7 @@ public class ToxicImbue extends Buff {
announced = true;
}
public static final float DURATION = 30f;
public static final float DURATION = 50f;
protected float left;

View File

@ -61,7 +61,7 @@ public class FetidRat extends Rat {
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
if (Random.Int(3) == 0) {
Buff.affect(enemy, Ooze.class);
Buff.affect(enemy, Ooze.class).set( 20f );
}
return damage;

View File

@ -123,7 +123,7 @@ public class Goo extends Mob {
public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage );
if (Random.Int( 3 ) == 0) {
Buff.affect( enemy, Ooze.class );
Buff.affect( enemy, Ooze.class ).set( 20f );
enemy.sprite.burst( 0x000000, 5 );
}

View File

@ -238,7 +238,7 @@ public class Yog extends Mob {
damage = super.attackProc( enemy, damage );
if (Random.Int( 3 ) == 0) {
Buff.affect( enemy, Ooze.class );
Buff.affect( enemy, Ooze.class ).set( 20f );
enemy.sprite.burst( 0xFF000000, 5 );
}

View File

@ -37,8 +37,8 @@ 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.ElixirOfDragonsBlood;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfEarthenPower;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfRestoration;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
@ -167,7 +167,7 @@ public abstract class Recipe {
new Bomb.EnhanceBomb(),
new ElixirOfAquaticRejuvenation.Recipe(),
new ElixirOfDragonsBlood.Recipe(),
new ElixirOfEarthenPower.Recipe(),
new ElixirOfIcyTouch.Recipe(),
new ElixirOfHoneyedHealing.Recipe(),
new ElixirOfRestoration.Recipe(),
new ElixirOfToxicEssence.Recipe(),

View File

@ -43,7 +43,7 @@ public class Corrosion extends Armor.Glyph {
for (int i : PathFinder.NEIGHBOURS9){
Splash.at(pos+i, 0x000000, 5);
if (Actor.findChar(pos+i) != null)
Buff.affect(Actor.findChar(pos+i), Ooze.class);
Buff.affect(Actor.findChar(pos+i), Ooze.class).set( 20f );
}
}

View File

@ -234,7 +234,7 @@ public class Bomb extends Item {
public static class Fuse extends Actor{
{
actPriority = BUFF_PRIO; //as if it were a buff
actPriority = BLOB_PRIO+1; //after hero, before other actors
}
private Bomb bomb;
@ -303,7 +303,7 @@ public class Bomb extends Item {
static {
validIngredients.put(PotionOfLiquidFlame.class, Firebomb.class);
validIngredients.put(PotionOfFrost.class, FrostBomb.class);
validIngredients.put(PotionOfHealing.class, HealingBomb.class);
validIngredients.put(PotionOfHealing.class, RegrowthBomb.class);
validIngredients.put(PotionOfInvisibility.class, Flashbang.class);
validIngredients.put(ScrollOfRecharging.class, ShockBomb.class);
@ -317,18 +317,18 @@ public class Bomb extends Item {
private static final HashMap<Class<?extends Bomb>, Integer> bombCosts = new HashMap<>();
static {
bombCosts.put(Firebomb.class, 2);
bombCosts.put(FrostBomb.class, 1);
bombCosts.put(HealingBomb.class, 4);
bombCosts.put(Flashbang.class, 3);
bombCosts.put(Firebomb.class, 4);
bombCosts.put(FrostBomb.class, 3);
bombCosts.put(RegrowthBomb.class, 6);
bombCosts.put(Flashbang.class, 5);
bombCosts.put(ShockBomb.class, 3);
bombCosts.put(HolyBomb.class, 4);
bombCosts.put(WoollyBomb.class, 1);
bombCosts.put(Noisemaker.class, 2);
bombCosts.put(ShockBomb.class, 5);
bombCosts.put(HolyBomb.class, 6);
bombCosts.put(WoollyBomb.class, 3);
bombCosts.put(Noisemaker.class, 4);
bombCosts.put(ArcaneBomb.class, 6);
bombCosts.put(ShrapnelBomb.class, 6);
bombCosts.put(ArcaneBomb.class, 8);
bombCosts.put(ShrapnelBomb.class, 8);
}
@Override

View File

@ -59,7 +59,7 @@ public class Flashbang extends Bomb {
Level l = Dungeon.level;
for (Char ch : Actor.chars()){
if (ch.fieldOfView != null && ch.fieldOfView[cell]){
int power = 10 - l.distance(ch.pos, cell);
int power = 15 - 2*l.distance(ch.pos, cell);
if (power > 0){
Buff.prolong(ch, Blindness.class, power);
Buff.prolong(ch, Cripple.class, power);

View File

@ -65,7 +65,7 @@ public class Noisemaker extends Bomb {
public void set(int cell){
floor = Dungeon.depth;
this.cell = cell;
left = 5;
left = 8;
}
@Override
@ -88,7 +88,7 @@ public class Noisemaker extends Bomb {
}
if (left > 0) {
spend(TICK * 20f);
spend(TICK * 15f);
left--;
} else {
detach();

View File

@ -25,20 +25,30 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Regrowth;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
public class HealingBomb extends Bomb {
import java.util.ArrayList;
public class RegrowthBomb extends Bomb {
{
//TODO visuals
image = ItemSpriteSheet.HEAL_BOMB;
image = ItemSpriteSheet.REGROWTH_BOMB;
}
@Override
@ -54,16 +64,44 @@ public class HealingBomb extends Bomb {
//no regular explosion damage
ArrayList<Integer> plantCandidates = new ArrayList<>();
PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 );
for (int i = 0; i < PathFinder.distance.length; i++) {
if (PathFinder.distance[i] < Integer.MAX_VALUE) {
Char ch = Actor.findChar(i);
if (ch != null){
//same as a healing potion
Buff.affect( ch, Healing.class ).setHeal((int)(0.8f*ch.HT + 14), 0.25f, 0);
if (ch.alignment == Dungeon.hero.alignment) {
//same as a healing dart
Buff.affect(ch, Healing.class).setHeal((int) (0.5f * ch.HT + 30), 0.25f, 0);
PotionOfHealing.cure(ch);
}
}
} else if ( Dungeon.level.map[i] == Terrain.EMPTY ||
Dungeon.level.map[i] == Terrain.EMBERS ||
Dungeon.level.map[i] == Terrain.EMPTY_DECO ||
Dungeon.level.map[i] == Terrain.GRASS ||
Dungeon.level.map[i] == Terrain.HIGH_GRASS){
plantCandidates.add(i);
}
GameScene.add( Blob.seed( i, 10, Regrowth.class ) );
}
}
Integer plantPos = Random.element(plantCandidates);
if (plantPos != null){
Dungeon.level.plant((Plant.Seed) Generator.random(Generator.Category.SEED), plantPos);
plantCandidates.remove(plantPos);
}
plantPos = Random.element(plantCandidates);
if (plantPos != null){
if (Random.Int(2) == 0){
Dungeon.level.plant( new WandOfRegrowth.Dewcatcher.Seed(), plantPos);
} else {
Dungeon.level.plant((Plant.Seed) Generator.random(Generator.Category.SEED), plantPos);
}
plantCandidates.remove(plantPos);
}
}
}

View File

@ -273,7 +273,7 @@ public class Blandfruit extends Food {
@Override
public int cost(ArrayList<Item> ingredients) {
return 2;
return 3;
}
@Override

View File

@ -76,7 +76,7 @@ public class Feast extends Food {
@Override
public int cost(ArrayList<Item> ingredients) {
return 8;
return (int)Hunger.STARVING/50;
}
@Override

View File

@ -55,7 +55,7 @@ public class BlizzardBrew extends Brew {
inputs = new Class[]{PotionOfSnapFreeze.class, PotionOfFrost.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 6;
output = BlizzardBrew.class;
outQuantity = 1;

View File

@ -46,7 +46,7 @@ public class CausticBrew extends Brew {
Char ch = Actor.findChar(cell + offset);
if (ch != null){
Buff.affect(ch, Ooze.class);
Buff.affect(ch, Ooze.class).set( 20f );
}
}
@ -58,7 +58,7 @@ public class CausticBrew extends Brew {
inputs = new Class[]{PotionOfToxicGas.class, GooBlob.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 8;
output = CausticBrew.class;
outQuantity = 1;

View File

@ -75,7 +75,7 @@ public class FrostfireBrew extends Brew {
inputs = new Class[]{PotionOfSnapFreeze.class, PotionOfLiquidFlame.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 8;
output = FrostfireBrew.class;
outQuantity = 1;

View File

@ -56,7 +56,7 @@ public class InfernalBrew extends Brew {
inputs = new Class[]{PotionOfDragonsBreath.class, PotionOfLiquidFlame.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 6;
output = InfernalBrew.class;
outQuantity = 1;

View File

@ -60,7 +60,7 @@ public class ShockingBrew extends Brew {
inputs = new Class[]{PotionOfParalyticGas.class, PotionOfStormClouds.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 8;
output = ShockingBrew.class;
outQuantity = 1;

View File

@ -120,7 +120,7 @@ public class ElixirOfAquaticRejuvenation extends Elixir {
inputs = new Class[]{PotionOfHealing.class, GooBlob.class};
inQuantity = new int[]{1, 1};
cost = 3;
cost = 4;
output = ElixirOfAquaticRejuvenation.class;
outQuantity = 1;

View File

@ -56,7 +56,7 @@ public class ElixirOfDragonsBlood extends Elixir {
inputs = new Class[]{PotionOfLiquidFlame.class, PotionOfPurity.class};
inQuantity = new int[]{1, 1};
cost = 4;
cost = 6;
output = ElixirOfDragonsBlood.class;
outQuantity = 1;

View File

@ -71,7 +71,7 @@ public class ElixirOfHoneyedHealing extends Elixir {
inputs = new Class[]{PotionOfHealing.class, Honeypot.ShatteredPot.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 4;
output = ElixirOfHoneyedHealing.class;
outQuantity = 1;

View File

@ -22,40 +22,40 @@
package com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.EarthImbue;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbue;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHaste;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
public class ElixirOfEarthenPower extends Elixir {
public class ElixirOfIcyTouch extends Elixir {
{
//TODO finish visuals
image = ItemSpriteSheet.ELIXIR_EARTH;
image = ItemSpriteSheet.ELIXIR_ICY;
}
@Override
public void apply(Hero hero) {
Buff.affect(hero, EarthImbue.class, EarthImbue.DURATION);
hero.sprite.emitter().burst(EarthParticle.FACTORY, 5);
Buff.affect(hero, FrostImbue.class, FrostImbue.DURATION);
hero.sprite.emitter().burst(SnowParticle.FACTORY, 5);
}
@Override
protected int splashColor() {
return 0xFF603913;
return 0xFF18C3E6;
}
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
{
inputs = new Class[]{PotionOfParalyticGas.class, PotionOfHaste.class};
inputs = new Class[]{PotionOfFrost.class, PotionOfPurity.class};
inQuantity = new int[]{1, 1};
cost = 4;
cost = 6;
output = ElixirOfEarthenPower.class;
output = ElixirOfIcyTouch.class;
outQuantity = 1;
}

View File

@ -59,7 +59,7 @@ public class ElixirOfMight extends Elixir {
inputs = new Class[]{PotionOfStrength.class};
inQuantity = new int[]{1};
cost = 12;
cost = 15;
output = ElixirOfMight.class;
outQuantity = 1;

View File

@ -53,7 +53,7 @@ public class ElixirOfToxicEssence extends Elixir {
inputs = new Class[]{PotionOfToxicGas.class, PotionOfPurity.class};
inQuantity = new int[]{1, 1};
cost = 4;
cost = 6;
output = ElixirOfToxicEssence.class;
outQuantity = 1;

View File

@ -64,10 +64,10 @@ public class Alchemize extends Spell implements AlchemyScene.AlchemyProvider {
inputs = new Class[]{ScrollOfRecharging.class, PotionOfLiquidFlame.class};
inQuantity = new int[]{1, 1};
cost = 6;
cost = 10;
output = Alchemize.class;
outQuantity = 3;
outQuantity = 5;
}
}

View File

@ -77,7 +77,7 @@ public class AquaBlast extends TargetedSpell {
inputs = new Class[]{ScrollOfIdentify.class, PotionOfStormClouds.class};
inQuantity = new int[]{1, 1};
cost = 4;
cost = 3;
output = AquaBlast.class;
outQuantity = 8;

View File

@ -184,7 +184,7 @@ public class BeaconOfReturning extends Spell {
cost = 12;
output = BeaconOfReturning.class;
outQuantity = 4;
outQuantity = 3;
}
}

View File

@ -68,7 +68,7 @@ public class CurseInfusion extends InventorySpell {
inputs = new Class[]{ScrollOfRemoveCurse.class, MetalShard.class};
inQuantity = new int[]{1, 1};
cost = 2;
cost = 1;
output = CurseInfusion.class;
outQuantity = 3;

View File

@ -61,7 +61,7 @@ public class FeatherFall extends Spell {
inputs = new Class[]{ScrollOfLullaby.class, PotionOfLevitation.class};
inQuantity = new int[]{1, 1};
cost = 8;
cost = 6;
output = FeatherFall.class;
outQuantity = 2;

View File

@ -25,7 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.MerchantsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMirrorImage;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@ -66,13 +66,13 @@ public class MagicalPorter extends InventorySpell {
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
{
inputs = new Class[]{ScrollOfMirrorImage.class, MerchantsBeacon.class};
inputs = new Class[]{ScrollOfIdentify.class, MerchantsBeacon.class};
inQuantity = new int[]{1, 1};
cost = 2;
cost = 8;
output = MagicalPorter.class;
outQuantity = 10;
outQuantity = 8;
}
}

View File

@ -82,10 +82,10 @@ public class PhaseShift extends TargetedSpell {
inputs = new Class[]{ScrollOfTeleportation.class, ScrollOfTerror.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 6;
output = PhaseShift.class;
outQuantity = 8;
outQuantity = 5;
}
}

View File

@ -62,7 +62,7 @@ public class ReclaimTrap extends TargetedSpell {
inputs = new Class[]{ScrollOfRecharging.class, MetalShard.class};
inQuantity = new int[]{1, 1};
cost = 5;
cost = 8;
output = ReclaimTrap.class;
outQuantity = 4;

View File

@ -25,8 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMirrorImage;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfDivination;
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
@ -72,10 +72,10 @@ public class Recycle extends InventorySpell {
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
{
inputs = new Class[]{ScrollOfTransmutation.class, ScrollOfMirrorImage.class};
inputs = new Class[]{ScrollOfTransmutation.class, ScrollOfDivination.class};
inQuantity = new int[]{1, 1};
cost = 6;
cost = 8;
output = Recycle.class;
outQuantity = 5;

View File

@ -87,7 +87,7 @@ public class WandOfCorrosion extends Wand {
// lvl 2 - 60%
if (Random.Int( level() + 3 ) >= 2) {
Buff.affect( defender, Ooze.class );
Buff.affect( defender, Ooze.class ).set( 20f );
CellEmitter.center(defender.pos).burst( CorrosionParticle.SPLASH, 5 );
}

View File

@ -43,6 +43,7 @@ public class Chilling extends Weapon.Enchantment {
if (Random.Int( level + 5 ) >= 4) {
//FIXME this should probably stack chilled
Buff.prolong( defender, Chill.class, Random.Float( 2f, 3f ) );
Splash.at( defender.sprite.center(), 0xFFB2D6FF, 5);

View File

@ -39,7 +39,7 @@ public class OozeTrap extends Trap {
Char ch = Actor.findChar( pos );
if (ch != null){
Buff.affect(ch, Ooze.class);
Buff.affect(ch, Ooze.class).set( 20f );
Splash.at( pos, 0x000000, 5);
}
}

View File

@ -142,7 +142,7 @@ public class ItemSpriteSheet {
public static final int DBL_BOMB = BOMBS+1;
public static final int FIRE_BOMB = BOMBS+2;
public static final int FROST_BOMB = BOMBS+3;
public static final int HEAL_BOMB = BOMBS+4;
public static final int REGROWTH_BOMB = BOMBS+4;
public static final int FLASHBANG = BOMBS+5;
public static final int SHOCK_BOMB = BOMBS+6;
public static final int HOLY_BOMB = BOMBS+7;
@ -156,7 +156,7 @@ public class ItemSpriteSheet {
assignItemRect(DBL_BOMB, 14, 13);
assignItemRect(FIRE_BOMB, 10, 13);
assignItemRect(FROST_BOMB, 10, 13);
assignItemRect(HEAL_BOMB, 10, 13);
assignItemRect(REGROWTH_BOMB, 10, 13);
assignItemRect(FLASHBANG, 10, 13);
assignItemRect(SHOCK_BOMB, 10, 13);
assignItemRect(HOLY_BOMB, 10, 13);
@ -528,7 +528,7 @@ public class ItemSpriteSheet {
private static final int ELIXIRS = xy(1, 25); //16 slots
public static final int ELIXIR_DRAGON = ELIXIRS+0;
public static final int ELIXIR_TOXIC = ELIXIRS+1;
public static final int ELIXIR_EARTH = ELIXIRS+2;
public static final int ELIXIR_ICY = ELIXIRS+2;
public static final int ELIXIR_MIGHT = ELIXIRS+3;
public static final int ELIXIR_AQUA = ELIXIRS+4;
public static final int ELIXIR_RESTO = ELIXIRS+5;
@ -537,7 +537,7 @@ public class ItemSpriteSheet {
static{
assignItemRect(ELIXIR_DRAGON, 10, 14);
assignItemRect(ELIXIR_TOXIC, 10, 14);
assignItemRect(ELIXIR_EARTH, 10, 14);
assignItemRect(ELIXIR_ICY, 10, 14);
assignItemRect(ELIXIR_MIGHT, 10, 14);
assignItemRect(ELIXIR_AQUA, 10, 14);
assignItemRect(ELIXIR_RESTO, 10, 14);

View File

@ -141,6 +141,9 @@ actors.buffs.frost.name=Frozen
actors.buffs.frost.freezes=%s freezes!
actors.buffs.frost.desc=Not to be confused with freezing solid, this more benign freezing simply encases the target in ice.\n\nFreezing acts similarly to paralysis, making it impossible for the target to act. Unlike paralysis, freezing is immediately cancelled if the target takes damage, as the ice will shatter.\n\nTurns of freeze remaining: %s.
actors.buffs.frostimbue.name=Imbued with Frost
actors.buffs.frostimbue.desc=You are imbued with icy power!\n\nAll physical attacks will steadily stack chill on enemies. Additionally, you are completely immune to the cold.\n\nTurns of frost imbue remaining: %s.
actors.buffs.fury.name=Furious
actors.buffs.fury.heromsg=You become furious!
actors.buffs.fury.desc=You are angry, enemies won't like you when you're angry.\n\nA great rage burns within you, increasing the damage you deal with physical attacks by 50%%.\n\nThis rage will last as long as you are injured below 50%% health.
@ -198,7 +201,7 @@ actors.buffs.ooze.name=Caustic ooze
actors.buffs.ooze.heromsg=Caustic ooze eats your flesh. Wash it away!
actors.buffs.ooze.ondeath=You melt away...
actors.buffs.ooze.rankings_desc=Dissolved
actors.buffs.ooze.desc=This sticky acid clings to flesh, slowly melting it away.\n\nOoze will deal consistent damage until it is washed off in water.\n\nOoze does not expire on its own and must be removed with water.
actors.buffs.ooze.desc=This sticky acid clings to flesh, slowly melting it away.\n\nOoze will deal consistent damage over time, but can be immediately washed off in water.\n\nTurns of ooze remaining: %s.
actors.buffs.paralysis.name=Paralysed
actors.buffs.paralysis.heromsg=You are paralysed!

View File

@ -377,9 +377,6 @@ items.bombs.flashbang.desc=This customized bomb will erupt into a burst of blind
items.bombs.frostbomb.name=frost bomb
items.bombs.frostbomb.desc=This bomb has been modified to burst into a sustained gust of freezing air when it explodes.
items.bombs.healingbomb.name=healing bomb
items.bombs.healingbomb.desc=This customized bomb will splash healing liquid all around it instead of exploding. Anything caught in the burst will be healed a considerable amount.
items.bombs.holybomb.name=holy bomb
items.bombs.holybomb.desc=This bomb has been modified to flash holy light when it explodes, dealing bonus damage to undead and demonic enemies.
@ -389,6 +386,9 @@ items.bombs.noisemaker.desc=This customized bomb will repeatedly make noise inst
items.bombs.shockbomb.name=shock bomb
items.bombs.shockbomb.desc=This bomb has been modified to unleash a storm of electricity around it when it explodes.
items.bombs.regrowthbomb.name=regrowth bomb
items.bombs.regrowthbomb.desc=This customized bomb will splash life-giving liquid all around it instead of exploding. The area caught in the blast with rapidly sprout glass and plants, and any allies caught in the blast will be healed.
items.bombs.shrapnelbomb.name=shrapnel bomb
items.bombs.shrapnelbomb.desc=This bomb has been modified with scraps of DM-300's metal, which will fragment and fly everywhere when it explodes. You had better hide behind something when using it...
@ -597,12 +597,12 @@ items.potions.elixirs.elixirofaquaticrejuvenation$aquahealing.desc=You have temp
items.potions.elixirs.elixirofdragonsblood.name=elixir of dragon's blood
items.potions.elixirs.elixirofdragonsblood.desc=When consumed, this elixir will send fiery power coursing through the drinker's veins. This effect will make the drinker immune to fire, and allow them to set enemies aflame with physical attacks.
items.potions.elixirs.elixirofearthenpower.name=elixir of earthen power
items.potions.elixirs.elixirofearthenpower.desc=When consumed, this elixir will allow the drinker to bend the earth around them to their will. Any physical attack the drinker makes will shift the earth under the target, slowing their movement speed.
items.potions.elixirs.elixirofhoneyedhealing.name=elixir of honeyed healing
items.potions.elixirs.elixirofhoneyedhealing.desc=This elixir combines healing with the sweetness of honey. When drank, it will satisfy a small amount of hunger, but it can also be thrown to heal an ally.\n\nCreatures with an affinity for honey might be pacified if this item is used on them.
items.potions.elixirs.elixiroficytouch.name=elixir of icy touch
items.potions.elixirs.elixiroficytouch.desc=When consumed, this elixir will allow the drinker to sap the heat from enemies they attack. This effect will make the drinker immune to the cold, and allow them to chill enemies with physical attacks.
items.potions.elixirs.elixirofmight.name=elixir of might
items.potions.elixirs.elixirofmight.msg_1=+1 str, +5 hp
items.potions.elixirs.elixirofmight.msg_2=Newfound strength surges through your body.

View File

@ -42,11 +42,11 @@ journal.document.alchemy_guide.heal_elixirs.body=Healing elixirs are also quite
journal.document.alchemy_guide.aoe_brews.title=Area of Effect Brews
journal.document.alchemy_guide.aoe_brews.body=Area of effect brews spread a harmful effect over a large area. They are more expensive than combination brews, but also more powerful.\n\n\nAn infernal brew is created by mixing a potion of dragon's breath and a potion of liquid flame.\n\nA blizzard brew is created by mixing a potion of snap freeze and a potion of frost.\n\nA shocking brew is created by mixing a potion of paralytic gas and a potion of storm clouds.\n\nA caustic brew is created by mixing a potion of toxic gas and a blob of goo.
journal.document.alchemy_guide.imbue_elixirs.title=Imbuing Elixirs
journal.document.alchemy_guide.imbue_elixirs.body=Imbuing Elixirs will imbue the drinker with a unique power which may be temporary or permanent. They are more expensive than healing elixirs, but also more powerful.\n\n\nAn elixir of dragon's blood is created by mixing a potion of liquid flame and a potion of purity.\n\nAn elixir of toxic essence is created by mixing a potion of toxic gas and a potion of purity.\n\nAn elixir of earthen power is created by mixing a potion of paralytic gas and a potion of haste.\n\nAn elixir of might is created by mixing a potion of strength and a large amount of alchemical energy.
journal.document.alchemy_guide.imbue_elixirs.body=Imbuing Elixirs will imbue the drinker with a unique power which may be temporary or permanent. They are more expensive than healing elixirs, but also more powerful.\n\n\nAn elixir of dragon's blood is created by mixing a potion of liquid flame and a potion of purity.\n\nAn elixir of toxic essence is created by mixing a potion of toxic gas and a potion of purity.\n\nAn elixir of icy touch is created by mixing a potion of frost and a potion of purity.\n\nAn elixir of might is created by mixing a potion of strength and a large amount of alchemical energy.
journal.document.alchemy_guide.tele_spells.title=Teleportation Spells
journal.document.alchemy_guide.tele_spells.body=Combining certain ingredients in an alchemy pot will cause magical crystals to precipitate out of the water. The energy in these crystals can be channeled to cast spells! Most spells have multiple uses, but the specific amount varies by spell.\n\nTeleportation spells contain magic that changes the positioning of yourself, enemies, or items in various useful ways.\n\n\nMagical porter is created by mixing a scroll of mirror image with a merchant's beacon.\n\nPhase shift is created by mixing a scroll of teleportation with a scroll of terror.\n\nBeacon of returning is created by mixing a scroll of passage, a scroll of magic mapping, and a lot of alchemical energy.
journal.document.alchemy_guide.tele_spells.body=Combining certain ingredients in an alchemy pot will cause magical crystals to precipitate out of the water. The energy in these crystals can be channeled to cast spells! Most spells have multiple uses, but the specific amount varies by spell.\n\nTeleportation spells contain magic that changes the positioning of yourself, enemies, or items in various useful ways.\n\n\nMagical porter is created by mixing a scroll of identification with a merchant's beacon.\n\nPhase shift is created by mixing a scroll of teleportation with a scroll of terror.\n\nBeacon of returning is created by mixing a scroll of passage, a scroll of magic mapping, and a lot of alchemical energy.
journal.document.alchemy_guide.item_spells.title=Item Manipulation Spells
journal.document.alchemy_guide.item_spells.body=Item manipulation spells affect the items in your inventory in a variety of different ways.\n\n\nMagical infusion is created by mixing a scroll of upgrade with a stone of enchantment.\n\nCurse infusion is created by mixing a scroll of remove curse with a cursed metal shard.\n\nAlchemize is created by mixing a scroll of recharging with a potion of liquid flame.\n\nRecycle is created by mixing a scroll of transmutation with a scroll of mirror image.
journal.document.alchemy_guide.item_spells.body=Item manipulation spells affect the items in your inventory in a variety of different ways.\n\n\nMagical infusion is created by mixing a scroll of upgrade with a stone of enchantment.\n\nCurse infusion is created by mixing a scroll of remove curse with a cursed metal shard.\n\nAlchemize is created by mixing a scroll of recharging with a potion of liquid flame.\n\nRecycle is created by mixing a scroll of transmutation with a scroll of divination.
journal.document.alchemy_guide.enviro_spells.title=Environmental Spells
journal.document.alchemy_guide.enviro_spells.body=Environmental spells give you new ways to change or interact with the terrain of the dungeon.\n\n\nReclaim trap is created by mixing a scroll of recharging with a cursed metal shard.\n\nAqua blast is created by mixing a scroll of identify with a potion of storm clouds.\n\nFeather fall is created by mixing a scroll of lullaby, a potion of levitation, and a good amount of alchemical energy.