v0.7.0: many alchemy balance changes
This commit is contained in:
parent
4c56360184
commit
27708be112
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
@ -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();
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 {
|
||||
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -273,7 +273,7 @@ public class Blandfruit extends Food {
|
|||
|
||||
@Override
|
||||
public int cost(ArrayList<Item> ingredients) {
|
||||
return 2;
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -76,7 +76,7 @@ public class Feast extends Food {
|
|||
|
||||
@Override
|
||||
public int cost(ArrayList<Item> ingredients) {
|
||||
return 8;
|
||||
return (int)Hunger.STARVING/50;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -184,7 +184,7 @@ public class BeaconOfReturning extends Spell {
|
|||
cost = 12;
|
||||
|
||||
output = BeaconOfReturning.class;
|
||||
outQuantity = 4;
|
||||
outQuantity = 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 );
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user