v0.7.0: lots of implementation:
- refined 12 brews/elixirs - nerfed earth imbue effect - bees now attack eachother
This commit is contained in:
parent
a429a55007
commit
520257ea1f
Binary file not shown.
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* 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.blobs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.BlobEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
|
||||
public class Blizzard extends Blob {
|
||||
|
||||
@Override
|
||||
protected void evolve() {
|
||||
super.evolve();
|
||||
|
||||
int cell;
|
||||
|
||||
Fire fire = (Fire)Dungeon.level.blobs.get( Fire.class );
|
||||
Freezing freeze = (Freezing)Dungeon.level.blobs.get( Freezing.class );
|
||||
|
||||
Inferno inf = (Inferno)Dungeon.level.blobs.get( Inferno.class );
|
||||
|
||||
for (int i = area.left; i < area.right; i++) {
|
||||
for (int j = area.top; j < area.bottom; j++) {
|
||||
cell = i + j * Dungeon.level.width();
|
||||
if (cur[cell] > 0) {
|
||||
|
||||
if (fire != null) fire.clear(cell);
|
||||
if (freeze != null) freeze.clear(cell);
|
||||
|
||||
if (inf != null && inf.volume > 0 && inf.cur[cell] > 0){
|
||||
inf.clear(cell);
|
||||
off[cell] = cur[cell] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
Freezing.freeze(cell);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void use( BlobEmitter emitter ) {
|
||||
super.use( emitter );
|
||||
emitter.pour( Speck.factory( Speck.BLIZZARD ), 0.2f );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String tileDesc() {
|
||||
return Messages.get(this, "desc");
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -96,9 +96,9 @@ public class Fire extends Blob {
|
|||
}
|
||||
}
|
||||
|
||||
private void burn( int pos ) {
|
||||
public static void burn( int pos ) {
|
||||
Char ch = Actor.findChar( pos );
|
||||
if (ch != null && !ch.isImmune(this.getClass())) {
|
||||
if (ch != null && !ch.isImmune(Fire.class)) {
|
||||
Buff.affect( ch, Burning.class ).reignite( ch );
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,7 @@ public class Fire extends Blob {
|
|||
@Override
|
||||
public void use( BlobEmitter emitter ) {
|
||||
super.use( emitter );
|
||||
emitter.start( FlameParticle.FACTORY, 0.03f, 0 );
|
||||
emitter.pour( FlameParticle.FACTORY, 0.03f );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -39,7 +39,6 @@ public class Freezing extends Blob {
|
|||
@Override
|
||||
protected void evolve() {
|
||||
|
||||
boolean[] water = Dungeon.level.water;
|
||||
int cell;
|
||||
|
||||
Fire fire = (Fire)Dungeon.level.blobs.get( Fire.class );
|
||||
|
@ -55,21 +54,7 @@ public class Freezing extends Blob {
|
|||
continue;
|
||||
}
|
||||
|
||||
Char ch = Actor.findChar( cell );
|
||||
if (ch != null && !ch.isImmune(this.getClass())) {
|
||||
if (ch.buff(Frost.class) != null){
|
||||
Buff.affect(ch, Frost.class, 2f);
|
||||
} else {
|
||||
Buff.affect(ch, Chill.class, water[cell] ? 5f : 3f);
|
||||
Chill chill = ch.buff(Chill.class);
|
||||
if (chill != null && chill.cooldown() >= 10f){
|
||||
Buff.affect(ch, Frost.class, 5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Heap heap = Dungeon.level.heaps.get( cell );
|
||||
if (heap != null) heap.freeze();
|
||||
Freezing.freeze(cell);
|
||||
|
||||
off[cell] = cur[cell] - 1;
|
||||
volume += off[cell];
|
||||
|
@ -80,6 +65,24 @@ public class Freezing extends Blob {
|
|||
}
|
||||
}
|
||||
|
||||
public static void freeze( int cell ){
|
||||
Char ch = Actor.findChar( cell );
|
||||
if (ch != null && !ch.isImmune(Freezing.class)) {
|
||||
if (ch.buff(Frost.class) != null){
|
||||
Buff.affect(ch, Frost.class, 2f);
|
||||
} else {
|
||||
Buff.affect(ch, Chill.class, Dungeon.level.water[cell] ? 5f : 3f);
|
||||
Chill chill = ch.buff(Chill.class);
|
||||
if (chill != null && chill.cooldown() >= 10f){
|
||||
Buff.affect(ch, Frost.class, 5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Heap heap = Dungeon.level.heaps.get( cell );
|
||||
if (heap != null) heap.freeze();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void use( BlobEmitter emitter ) {
|
||||
super.use( emitter );
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* 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.blobs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.BlobEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
|
||||
public class Inferno extends Blob {
|
||||
|
||||
@Override
|
||||
protected void evolve() {
|
||||
super.evolve();
|
||||
|
||||
int cell;
|
||||
boolean observe = false;
|
||||
|
||||
Fire fire = (Fire)Dungeon.level.blobs.get( Fire.class );
|
||||
Freezing freeze = (Freezing)Dungeon.level.blobs.get( Freezing.class );
|
||||
|
||||
Blizzard bliz = (Blizzard)Dungeon.level.blobs.get( Blizzard.class );
|
||||
|
||||
for (int i = area.left-1; i <= area.right; i++) {
|
||||
for (int j = area.top-1; j <= area.bottom; j++) {
|
||||
cell = i + j * Dungeon.level.width();
|
||||
if (cur[cell] > 0) {
|
||||
|
||||
if (fire != null) fire.clear(cell);
|
||||
if (freeze != null) freeze.clear(cell);
|
||||
|
||||
if (bliz != null && bliz.volume > 0 && bliz.cur[cell] > 0){
|
||||
bliz.clear(cell);
|
||||
off[cell] = cur[cell] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
Fire.burn(cell);
|
||||
|
||||
} else if (Dungeon.level.flamable[cell]
|
||||
&& (cur[cell-1] > 0
|
||||
|| cur[cell+1] > 0
|
||||
|| cur[cell-Dungeon.level.width()] > 0
|
||||
|| cur[cell+Dungeon.level.width()] > 0)) {
|
||||
Fire.burn(cell);
|
||||
Dungeon.level.destroy( cell );
|
||||
|
||||
observe = true;
|
||||
GameScene.updateMap( cell );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (observe) {
|
||||
Dungeon.observe();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void use( BlobEmitter emitter ) {
|
||||
super.use( emitter );
|
||||
|
||||
emitter.pour( Speck.factory( Speck.INFERNO ), 0.2f );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String tileDesc() {
|
||||
return Messages.get(this, "desc");
|
||||
}
|
||||
|
||||
}
|
|
@ -38,7 +38,7 @@ public class EarthImbue extends FlavourBuff {
|
|||
public static final float DURATION = 30f;
|
||||
|
||||
public void proc(Char enemy){
|
||||
Buff.affect(enemy, Roots.class, 2);
|
||||
Buff.affect(enemy, Cripple.class, 2);
|
||||
CellEmitter.bottom(enemy.pos).start(EarthParticle.FACTORY, 0.05f, 8);
|
||||
}
|
||||
|
||||
|
@ -61,10 +61,5 @@ public class EarthImbue extends FlavourBuff {
|
|||
public String desc() {
|
||||
return Messages.get(this, "desc", dispTurns());
|
||||
}
|
||||
|
||||
{
|
||||
immunities.add( Paralysis.class );
|
||||
immunities.add( Roots.class );
|
||||
immunities.add( Slow.class );
|
||||
}
|
||||
|
||||
}
|
|
@ -25,13 +25,16 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.BeeSprite;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
//FIXME the AI for these things is becoming a complete mess, should refactor
|
||||
public class Bee extends Mob {
|
||||
|
||||
{
|
||||
|
@ -55,6 +58,7 @@ public class Bee extends Mob {
|
|||
private static final String LEVEL = "level";
|
||||
private static final String POTPOS = "potpos";
|
||||
private static final String POTHOLDER = "potholder";
|
||||
private static final String ALIGMNENT = "alignment";
|
||||
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
|
@ -62,6 +66,7 @@ public class Bee extends Mob {
|
|||
bundle.put( LEVEL, level );
|
||||
bundle.put( POTPOS, potPos );
|
||||
bundle.put( POTHOLDER, potHolder );
|
||||
bundle.put( ALIGMNENT, alignment);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -70,6 +75,7 @@ public class Bee extends Mob {
|
|||
spawn( bundle.getInt( LEVEL ) );
|
||||
potPos = bundle.getInt( POTPOS );
|
||||
potHolder = bundle.getInt( POTHOLDER );
|
||||
if (bundle.contains(ALIGMNENT)) alignment = bundle.getEnum( ALIGMNENT, Alignment.class);
|
||||
}
|
||||
|
||||
public void spawn( int level ) {
|
||||
|
@ -109,7 +115,7 @@ public class Bee extends Mob {
|
|||
@Override
|
||||
protected Char chooseEnemy() {
|
||||
//if the pot is no longer present, default to regular AI behaviour
|
||||
if (potHolder == -1 && potPos == -1)
|
||||
if (alignment == Alignment.ALLY || (potHolder == -1 && potPos == -1))
|
||||
return super.chooseEnemy();
|
||||
|
||||
//if something is holding the pot, target that
|
||||
|
@ -127,7 +133,7 @@ public class Bee extends Mob {
|
|||
//find all mobs near the pot
|
||||
HashSet<Char> enemies = new HashSet<>();
|
||||
for (Mob mob : Dungeon.level.mobs) {
|
||||
if (!(mob instanceof Bee)
|
||||
if (!(mob == this)
|
||||
&& Dungeon.level.distance(mob.pos, potPos) <= 3
|
||||
&& mob.alignment != Alignment.NEUTRAL
|
||||
&& !(alignment == Alignment.ALLY && mob.alignment == Alignment.ALLY)) {
|
||||
|
@ -155,13 +161,24 @@ public class Bee extends Mob {
|
|||
|
||||
@Override
|
||||
protected boolean getCloser(int target) {
|
||||
if (enemy != null && Actor.findById(potHolder) == enemy) {
|
||||
if (alignment == Alignment.ALLY && enemy == null && buff(Corruption.class) == null){
|
||||
target = Dungeon.hero.pos;
|
||||
} else if (enemy != null && Actor.findById(potHolder) == enemy) {
|
||||
target = enemy.pos;
|
||||
} else if (potPos != -1 && (state == WANDERING || Dungeon.level.distance(target, potPos) > 3))
|
||||
this.target = target = potPos;
|
||||
return super.getCloser( target );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
if (alignment == Alignment.ALLY && buff(Corruption.class) == null){
|
||||
return Messages.get(this, "desc_honey");
|
||||
} else {
|
||||
return super.description();
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
immunities.add( Poison.class );
|
||||
immunities.add( Amok.class );
|
||||
|
|
|
@ -35,39 +35,41 @@ import com.watabou.utils.Random;
|
|||
|
||||
public class Speck extends Image {
|
||||
|
||||
public static final int HEALING = 0;
|
||||
public static final int STAR = 1;
|
||||
public static final int LIGHT = 2;
|
||||
public static final int QUESTION = 3;
|
||||
public static final int UP = 4;
|
||||
public static final int SCREAM = 5;
|
||||
public static final int BONE = 6;
|
||||
public static final int WOOL = 7;
|
||||
public static final int ROCK = 8;
|
||||
public static final int NOTE = 9;
|
||||
public static final int CHANGE = 10;
|
||||
public static final int HEART = 11;
|
||||
public static final int BUBBLE = 12;
|
||||
public static final int STEAM = 13;
|
||||
public static final int COIN = 14;
|
||||
public static final int HEALING = 0;
|
||||
public static final int STAR = 1;
|
||||
public static final int LIGHT = 2;
|
||||
public static final int QUESTION = 3;
|
||||
public static final int UP = 4;
|
||||
public static final int SCREAM = 5;
|
||||
public static final int BONE = 6;
|
||||
public static final int WOOL = 7;
|
||||
public static final int ROCK = 8;
|
||||
public static final int NOTE = 9;
|
||||
public static final int CHANGE = 10;
|
||||
public static final int HEART = 11;
|
||||
public static final int BUBBLE = 12;
|
||||
public static final int STEAM = 13;
|
||||
public static final int COIN = 14;
|
||||
|
||||
public static final int DISCOVER = 101;
|
||||
public static final int EVOKE = 102;
|
||||
public static final int MASTERY = 103;
|
||||
public static final int KIT = 104;
|
||||
public static final int RATTLE = 105;
|
||||
public static final int JET = 106;
|
||||
public static final int TOXIC = 107;
|
||||
public static final int DISCOVER = 101;
|
||||
public static final int EVOKE = 102;
|
||||
public static final int MASTERY = 103;
|
||||
public static final int KIT = 104;
|
||||
public static final int RATTLE = 105;
|
||||
public static final int JET = 106;
|
||||
public static final int TOXIC = 107;
|
||||
public static final int CORROSION = 108;
|
||||
public static final int PARALYSIS = 109;
|
||||
public static final int DUST = 110;
|
||||
public static final int PARALYSIS = 109;
|
||||
public static final int DUST = 110;
|
||||
public static final int STENCH = 111;
|
||||
public static final int FORGE = 112;
|
||||
public static final int CONFUSION = 113;
|
||||
public static final int FORGE = 112;
|
||||
public static final int CONFUSION = 113;
|
||||
public static final int RED_LIGHT = 114;
|
||||
public static final int CALM = 115;
|
||||
public static final int SMOKE = 116;
|
||||
public static final int STORM = 117;
|
||||
public static final int SMOKE = 116;
|
||||
public static final int STORM = 117;
|
||||
public static final int INFERNO = 118;
|
||||
public static final int BLIZZARD = 119;
|
||||
|
||||
private static final int SIZE = 7;
|
||||
|
||||
|
@ -117,6 +119,8 @@ public class Speck extends Image {
|
|||
case STORM:
|
||||
case DUST:
|
||||
case SMOKE:
|
||||
case BLIZZARD:
|
||||
case INFERNO:
|
||||
frame( film.get( STEAM ) );
|
||||
break;
|
||||
case CALM:
|
||||
|
@ -325,6 +329,20 @@ public class Speck extends Image {
|
|||
lifespan = Random.Float( 1f, 3f );
|
||||
break;
|
||||
|
||||
case INFERNO:
|
||||
hardlight( 0xFF0000 );
|
||||
angularSpeed = Random.Float( -20, +20 );
|
||||
angle = Random.Float( 360 );
|
||||
lifespan = Random.Float( 1f, 3f );
|
||||
break;
|
||||
|
||||
case BLIZZARD:
|
||||
hardlight( 0xFFFFFF );
|
||||
angularSpeed = Random.Float( -20, +20 );
|
||||
angle = Random.Float( 360 );
|
||||
lifespan = Random.Float( 1f, 3f );
|
||||
break;
|
||||
|
||||
case SMOKE:
|
||||
hardlight( 0x000000 );
|
||||
angularSpeed = 30;
|
||||
|
@ -443,6 +461,8 @@ public class Speck extends Image {
|
|||
case PARALYSIS:
|
||||
case CONFUSION:
|
||||
case STORM:
|
||||
case BLIZZARD:
|
||||
case INFERNO:
|
||||
case DUST:
|
||||
am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) * 0.5f );
|
||||
scale.set( 1 + p );
|
||||
|
|
|
@ -195,7 +195,7 @@ public class Honeypot extends Item {
|
|||
return;
|
||||
|
||||
Bee bee = (Bee)Actor.findById( myBee );
|
||||
if (bee != null)
|
||||
if (bee != null && bee.alignment == Char.Alignment.ENEMY)
|
||||
bee.setPotInfo( cell, holder );
|
||||
}
|
||||
|
||||
|
|
|
@ -311,6 +311,18 @@ public class Bomb extends Item {
|
|||
validIngredients.put(ScrollOfRage.class, Noisemaker.class);
|
||||
}
|
||||
|
||||
private static final HashMap<Class<?extends Bomb>, Integer> bombCosts = new HashMap<>();
|
||||
static {
|
||||
bombCosts.put(Firebomb.class, 0);
|
||||
bombCosts.put(FrostBomb.class, 0);
|
||||
bombCosts.put(HealingBomb.class, 0);
|
||||
bombCosts.put(Flashbang.class, 0);
|
||||
bombCosts.put(ShockBomb.class, 0);
|
||||
bombCosts.put(HolyBomb.class, 0);
|
||||
bombCosts.put(WoollyBomb.class, 0);
|
||||
bombCosts.put(Noisemaker.class, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean testIngredients(ArrayList<Item> ingredients) {
|
||||
boolean seedOrStone = false;
|
||||
|
@ -332,6 +344,11 @@ public class Bomb extends Item {
|
|||
|
||||
@Override
|
||||
public int cost(ArrayList<Item> ingredients) {
|
||||
for (Item i : ingredients){
|
||||
if (validIngredients.containsKey(i.getClass())){
|
||||
return (bombCosts.get(validIngredients.get(i.getClass())));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -389,7 +389,7 @@ public class Potion extends Item {
|
|||
}
|
||||
|
||||
protected int splashColor(){
|
||||
return ItemSprite.pick( image, 8, 10 );
|
||||
return ItemSprite.pick( image, 5, 9 );
|
||||
}
|
||||
|
||||
protected void splash( int cell ) {
|
||||
|
|
|
@ -21,9 +21,15 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.potions.brews;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blizzard;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
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.sprites.ItemSpriteSheet;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
public class BlizzardBrew extends Brew {
|
||||
|
||||
|
@ -33,7 +39,14 @@ public class BlizzardBrew extends Brew {
|
|||
|
||||
@Override
|
||||
public void shatter(int cell) {
|
||||
//TODO
|
||||
if (Dungeon.level.heroFOV[cell]) {
|
||||
setKnown();
|
||||
|
||||
splash( cell );
|
||||
Sample.INSTANCE.play( Assets.SND_SHATTER );
|
||||
}
|
||||
|
||||
GameScene.add( Blob.seed( cell, 1000, Blizzard.class ) );
|
||||
}
|
||||
|
||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||
|
@ -42,7 +55,7 @@ public class BlizzardBrew extends Brew {
|
|||
inputs = new Class[]{PotionOfSnapFreeze.class, PotionOfFrost.class};
|
||||
inQuantity = new int[]{1, 1};
|
||||
|
||||
cost = 1;
|
||||
cost = 5;
|
||||
|
||||
output = BlizzardBrew.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 = 3;
|
||||
cost = 5;
|
||||
|
||||
output = FrostfireBrew.class;
|
||||
outQuantity = 1;
|
||||
|
|
|
@ -21,9 +21,15 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.potions.brews;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Inferno;
|
||||
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.sprites.ItemSpriteSheet;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
public class InfernalBrew extends Brew {
|
||||
|
||||
|
@ -33,7 +39,15 @@ public class InfernalBrew extends Brew {
|
|||
|
||||
@Override
|
||||
public void shatter(int cell) {
|
||||
//TODO
|
||||
|
||||
if (Dungeon.level.heroFOV[cell]) {
|
||||
setKnown();
|
||||
|
||||
splash( cell );
|
||||
Sample.INSTANCE.play( Assets.SND_SHATTER );
|
||||
}
|
||||
|
||||
GameScene.add( Blob.seed( cell, 1000, Inferno.class ) );
|
||||
}
|
||||
|
||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe {
|
||||
|
@ -42,7 +56,7 @@ public class InfernalBrew extends Brew {
|
|||
inputs = new Class[]{PotionOfDragonsBreath.class, PotionOfLiquidFlame.class};
|
||||
inQuantity = new int[]{1, 1};
|
||||
|
||||
cost = 1;
|
||||
cost = 5;
|
||||
|
||||
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 = 1;
|
||||
cost = 5;
|
||||
|
||||
output = ShockingBrew.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 = 2;
|
||||
cost = 4;
|
||||
|
||||
output = ElixirOfDragonsBlood.class;
|
||||
outQuantity = 1;
|
||||
|
|
|
@ -53,7 +53,7 @@ public class ElixirOfEarthenPower extends Elixir {
|
|||
inputs = new Class[]{PotionOfParalyticGas.class, PotionOfHaste.class};
|
||||
inQuantity = new int[]{1, 1};
|
||||
|
||||
cost = 2;
|
||||
cost = 4;
|
||||
|
||||
output = ElixirOfEarthenPower.class;
|
||||
outQuantity = 1;
|
||||
|
|
|
@ -26,10 +26,10 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
@ -57,10 +57,10 @@ public class ElixirOfHoneyedHealing extends Elixir {
|
|||
Char ch = Actor.findChar(cell);
|
||||
if (ch != null){
|
||||
Buff.affect( ch, Healing.class ).setHeal((int)(0.8f*ch.HT + 14), 0.25f, 0);
|
||||
if (ch.alignment != curUser.alignment){
|
||||
//TODO this is effectively a free kill against enemies, do we want that?
|
||||
Buff.affect(ch, Charm.class, 999f).object = curUser.id();
|
||||
//TODO specific bee interactions?
|
||||
if (ch instanceof Bee && ch.alignment != curUser.alignment){
|
||||
ch.alignment = Char.Alignment.ALLY;
|
||||
((Bee)ch).setPotInfo(-1, null);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ public class ElixirOfHoneyedHealing extends Elixir {
|
|||
inputs = new Class[]{PotionOfHealing.class, Honeypot.ShatteredPot.class};
|
||||
inQuantity = new int[]{1, 1};
|
||||
|
||||
cost = 2;
|
||||
cost = 5;
|
||||
|
||||
output = ElixirOfHoneyedHealing.class;
|
||||
outQuantity = 1;
|
||||
|
|
|
@ -46,7 +46,7 @@ public class ElixirOfRestoration extends Elixir {
|
|||
inputs = new Class[]{PotionOfHealing.class, PotionOfCleansing.class};
|
||||
inQuantity = new int[]{1, 1};
|
||||
|
||||
cost = 2;
|
||||
cost = 1;
|
||||
|
||||
output = ElixirOfRestoration.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 = 2;
|
||||
cost = 4;
|
||||
|
||||
output = ElixirOfToxicEssence.class;
|
||||
outQuantity = 1;
|
||||
|
|
|
@ -575,7 +575,7 @@ public class ItemSpriteSheet {
|
|||
assignItemRect(PASTY, 16, 11);
|
||||
assignItemRect(PUMPKIN_PIE, 16, 12);
|
||||
assignItemRect(CANDY_CANE, 13, 16);
|
||||
assignItemRect(FEAST, 16, 11);
|
||||
assignItemRect(FEAST, 16, 12);
|
||||
assignItemRect(BLANDFRUIT, 9, 12);
|
||||
assignItemRect(BLAND_CHUNKS,14, 6);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
###blobs
|
||||
actors.blobs.blizzard.desc=A blizzard is swirling here.
|
||||
|
||||
actors.blobs.confusiongas.desc=A cloud of confusion gas is swirling here.
|
||||
|
||||
actors.blobs.electricity.desc=A field of electricity is sparking brightly here.
|
||||
|
@ -12,6 +14,8 @@ actors.blobs.freezing.desc=The air is unnaturally frigid here.
|
|||
|
||||
actors.blobs.goowarn.desc=Specks of dark energy are swarming here!
|
||||
|
||||
actors.blobs.inferno.desc=An inferno is raging here.
|
||||
|
||||
actors.blobs.paralyticgas.desc=A cloud of paralytic gas is swirling here.
|
||||
|
||||
actors.blobs.smokescreen.desc=A cloud of thick black smoke is swirling here.
|
||||
|
@ -125,7 +129,7 @@ actors.buffs.drowsy.name=Drowsy
|
|||
actors.buffs.drowsy.desc=A magical force is making it difficult to stay awake.\n\nThe hero can resist drowsiness by taking damage or by being at full health.\n\nAfter a few turns, the target will fall into a deep magical sleep.
|
||||
|
||||
actors.buffs.earthimbue.name=Imbued with Earth
|
||||
actors.buffs.earthimbue.desc=You are imbued with the power of earth!\n\nAll physical attacks will command roots to lock the enemy in place while the effect lasts.\n\nTurns of earth imbue remaining: %s.
|
||||
actors.buffs.earthimbue.desc=You are imbued with the power of earth!\n\nAll physical attacks will shift the earth under the enemy, crippling them for a short time.\n\nTurns of earth imbue remaining: %s.
|
||||
|
||||
actors.buffs.fireimbue.name=Imbued with Fire
|
||||
actors.buffs.fireimbue.desc=You are imbued with the power of fire!\n\nAll physical attacks will have a chance to light enemies ablaze. Additionally, you are completely immune to the effects of fire.\n\nTurns of fire imbue remaining: %s.
|
||||
|
@ -426,6 +430,7 @@ actors.mobs.bat.def_verb=evaded
|
|||
actors.mobs.bat.desc=These brisk and tenacious inhabitants of cave domes may defeat much larger opponents by replenishing their health with each successful attack.
|
||||
|
||||
actors.mobs.bee.name=golden bee
|
||||
actors.mobs.bee.desc_honey=Despite their small size, golden bees tend to protect their home fiercely. This one has been placated, and seems to want to follow you.
|
||||
actors.mobs.bee.desc=Despite their small size, golden bees tend to protect their home fiercely. This one is very mad, better keep your distance.
|
||||
|
||||
actors.mobs.brute.name=gnoll brute
|
||||
|
|
|
@ -555,43 +555,43 @@ items.potions.potionoftoxicgas.desc=Uncorking or shattering this pressurized gla
|
|||
|
||||
###brews
|
||||
items.potions.brews.blizzardbrew.name=blizzard brew
|
||||
items.potions.brews.blizzardbrew.desc=TODO
|
||||
items.potions.brews.blizzardbrew.desc=When shattered, this brew will unleash a swirling blizzard which spreads like a gas.
|
||||
|
||||
items.potions.brews.frigidbrew.name=frigid brew
|
||||
items.potions.brews.frigidbrew.desc=TODO
|
||||
items.potions.brews.frigidbrew.desc=This brew combines the properties of a frost and storm clouds potion. When thrown it will erupt into a cloud which both freezes and spreads water to surrounding terrain.
|
||||
|
||||
items.potions.brews.frostfirebrew.name=frostfire brew
|
||||
items.potions.brews.frostfirebrew.desc=TODO
|
||||
items.potions.brews.frostfirebrew.desc=This brew combines the properties of a liquid flame and snap freeze potion. The area around where the vial is thrown will be snap-frozen, then set ablaze for an extended duration.
|
||||
|
||||
items.potions.brews.infernalbrew.name=infernal brew
|
||||
items.potions.brews.infernalbrew.desc=TODO
|
||||
items.potions.brews.infernalbrew.desc=When shattered, this brew will unleash a raging inferno which spreads like a gas.
|
||||
|
||||
items.potions.brews.shockingbrew.name=shocking brew
|
||||
items.potions.brews.shockingbrew.desc=TODO
|
||||
items.potions.brews.shockingbrew.desc=When shattered, this brew will unleash an electrical storm in an area around the location it breaks at.
|
||||
|
||||
items.potions.brews.wickedbrew.name=wicked brew
|
||||
items.potions.brews.wickedbrew.desc=TODO
|
||||
items.potions.brews.wickedbrew.desc=This brew combines the properties of a toxic gas and paralytic gas potion. When exposed to open air the liquid of the brew will erupt into both gasses at once.
|
||||
|
||||
|
||||
|
||||
###elixirs
|
||||
items.potions.elixirs.elixirofdragonsblood.name=elixir of dragon's blood
|
||||
items.potions.elixirs.elixirofdragonsblood.desc=TODO
|
||||
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=TODO
|
||||
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=TODO
|
||||
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.elixirofrestoration.name=elixir of restoration
|
||||
items.potions.elixirs.elixirofrestoration.desc=TODO
|
||||
items.potions.elixirs.elixirofrestoration.desc=This elixir combines the properties of a healing and cleansing potion. When consumed, the drinker will start to rapidly heal, and will be cleansed of all negative effects.
|
||||
|
||||
items.potions.elixirs.elixirofsurgingvitality.name=elixir of surging vitality
|
||||
items.potions.elixirs.elixirofsurgingvitality.desc=TODO
|
||||
items.potions.elixirs.elixirofsurgingvitality.desc=This elixir combines the properties of a healing and shielding potion, granting a massive burst of survivability to whomever drinks it.
|
||||
|
||||
items.potions.elixirs.elixiroftoxicessence.name=elixir of toxic essence
|
||||
items.potions.elixirs.elixiroftoxicessence.desc=TODO
|
||||
items.potions.elixirs.elixiroftoxicessence.desc=When consumed, this elixir will imbue the drinker with toxic energy. The drinker will be immune to toxic gas and poison, and will continuously spread toxic gas as they move.
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user