v0.7.0: lots of implementation:

- refined 12 brews/elixirs
- nerfed earth imbue effect
- bees now attack eachother
This commit is contained in:
Evan Debenham 2018-08-22 20:54:33 -04:00
parent a429a55007
commit 520257ea1f
23 changed files with 339 additions and 89 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -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");
}
}

View File

@ -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

View File

@ -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 );

View File

@ -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");
}
}

View File

@ -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 );
}
}

View File

@ -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 );

View File

@ -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 );

View File

@ -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 );
}

View File

@ -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;
}

View File

@ -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 ) {

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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

View File

@ -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.