v0.8.1: new shading and fading vfx added to many buffs

Also several buff durations have changed, to improve consistency:
Blindness:
- Bandit: 5 from 2-5
- Bright Fist attack: 5 from 4
- Retribution: 10 from 6-10
- Blindweed: 10 from 5-10
Cripple:
- Bandit: 5 from 3-8
- Blindweed: 10 from 5-10
Chill:
- breaking frost in water: 5 from 4
Charm:
- Succubus: 5 from 3-4
- Affection: 10 from 8-12
- Friendly curse defender: 5 from 3-5
- Friendly curse attacker: 10 from 13-15
Frost:
- Freezing: 10 from 5-7.5 (icecap / snap freeze)
- Freezing+water: 30 from 25-37.5
- Anti-Entropy: 10 from 2.5-5
- Cursed Wand: 10 from 15-25
- Frost blob: 10 from 5
- Frost Battlemage proc: 10 from 5-10
Others:
- Drowsy: 5 from 3-6
This commit is contained in:
Evan Debenham
2020-05-07 17:15:23 -04:00
parent 05b70dce87
commit e943055564
71 changed files with 279 additions and 86 deletions
@@ -73,8 +73,8 @@ public class Freezing extends Blob {
} else { } else {
Buff.affect(ch, Chill.class, Dungeon.level.water[cell] ? 5f : 3f); Buff.affect(ch, Chill.class, Dungeon.level.water[cell] ? 5f : 3f);
Chill chill = ch.buff(Chill.class); Chill chill = ch.buff(Chill.class);
if (chill != null && chill.cooldown() >= 10f){ if (chill != null && chill.cooldown() >= Chill.DURATION){
Buff.affect(ch, Frost.class, 5f); Buff.affect(ch, Frost.class, Frost.DURATION);
} }
} }
} }
@@ -100,9 +100,9 @@ public class Freezing extends Blob {
Char ch = Actor.findChar( cell ); Char ch = Actor.findChar( cell );
if (ch != null) { if (ch != null) {
if (Dungeon.level.water[ch.pos]){ if (Dungeon.level.water[ch.pos]){
Buff.prolong(ch, Frost.class, Frost.duration(ch) * Random.Float(5f, 7.5f)); Buff.prolong(ch, Frost.class, Frost.DURATION * 3);
} else { } else {
Buff.prolong(ch, Frost.class, Frost.duration(ch) * Random.Float(1.0f, 1.5f)); Buff.prolong(ch, Frost.class, Frost.DURATION);
} }
} }
@@ -65,7 +65,7 @@ public class Web extends Blob {
//affects characters as they step on it. See Level.OccupyCell and Level.PressCell //affects characters as they step on it. See Level.OccupyCell and Level.PressCell
public static void affectChar( Char ch ){ public static void affectChar( Char ch ){
Buff.prolong( ch, Roots.class, 5f ); Buff.prolong( ch, Roots.class, Roots.DURATION );
} }
@Override @Override
@@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
@@ -74,7 +75,16 @@ public class ArcaneArmor extends Buff {
@Override @Override
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
icon.tint(0.5f, 0, 1, 0.5f); icon.hardlight(1f, 0.5f, 2f);
}
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl/2 + 5;
return (max-level)/max;
}
return 0;
} }
@Override @Override
@@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@@ -69,7 +70,16 @@ public class Barkskin extends Buff {
public int icon() { public int icon() {
return BuffIndicator.BARKSKIN; return BuffIndicator.BARKSKIN;
} }
@Override
public float iconFadePercent() {
if (target instanceof Hero){
float max = ((Hero) target).lvl + 5;
return (max-level)/max;
}
return 0;
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -59,7 +59,7 @@ public class Barrier extends ShieldBuff {
@Override @Override
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
icon.tint(0, 0.5f, 1, 0.5f); icon.hardlight(0.5f, 1f, 2f);
} }
@Override @Override
@@ -27,6 +27,8 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Blindness extends FlavourBuff { public class Blindness extends FlavourBuff {
public static final float DURATION = 10f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
announced = true; announced = true;
@@ -42,7 +44,12 @@ public class Blindness extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.BLINDNESS; return BuffIndicator.BLINDNESS;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -31,6 +31,8 @@ public class Charm extends FlavourBuff {
private static final String OBJECT = "object"; private static final String OBJECT = "object";
public static final float DURATION = 10f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
announced = true; announced = true;
@@ -52,6 +54,11 @@ public class Charm extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.HEART; return BuffIndicator.HEART;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -30,6 +30,8 @@ import java.text.DecimalFormat;
public class Chill extends FlavourBuff { public class Chill extends FlavourBuff {
public static final float DURATION = 10f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
announced = true; announced = true;
@@ -58,6 +60,11 @@ public class Chill extends FlavourBuff {
return BuffIndicator.FROST; return BuffIndicator.FROST;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add(CharSprite.State.CHILLED); if (on) target.sprite.add(CharSprite.State.CHILLED);
@@ -37,6 +37,11 @@ public class Cripple extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.CRIPPLE; return BuffIndicator.CRIPPLE;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -68,7 +68,12 @@ public class Degrade extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.DEGRADE; return BuffIndicator.DEGRADE;
} }
@Override
public float iconFadePercent() {
return (DURATION - visualcooldown())/DURATION;
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -28,6 +28,8 @@ import com.watabou.utils.Random;
public class Drowsy extends Buff { public class Drowsy extends Buff {
public static final float DURATION = 5f;
{ {
type = buffType.NEUTRAL; type = buffType.NEUTRAL;
announced = true; announced = true;
@@ -38,10 +40,16 @@ public class Drowsy extends Buff {
return BuffIndicator.DROWSY; return BuffIndicator.DROWSY;
} }
public boolean attachTo( Char target ) { @Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
public boolean attachTo(Char target ) {
if (!target.isImmune(Sleep.class) && super.attachTo(target)) { if (!target.isImmune(Sleep.class) && super.attachTo(target)) {
if (cooldown() == 0) if (cooldown() == 0) {
spend(Random.Int(3, 6)); spend(DURATION);
}
return true; return true;
} }
return false; return false;
@@ -25,7 +25,9 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Foresight extends FlavourBuff { public class Foresight extends FlavourBuff {
public static final float DURATION = 600f;
{ {
type = buffType.POSITIVE; type = buffType.POSITIVE;
announced = true; announced = true;
@@ -35,6 +37,11 @@ public class Foresight extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.FORESIGHT; return BuffIndicator.FORESIGHT;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -34,13 +34,14 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Image;
import com.watabou.utils.Random; import com.watabou.utils.Random;
import java.util.ArrayList; import java.util.ArrayList;
public class Frost extends FlavourBuff { public class Frost extends FlavourBuff {
private static final float DURATION = 5f; public static final float DURATION = 10f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
@@ -105,7 +106,7 @@ public class Frost extends FlavourBuff {
if (target.paralysed > 0) if (target.paralysed > 0)
target.paralysed--; target.paralysed--;
if (Dungeon.level.water[target.pos]) if (Dungeon.level.water[target.pos])
Buff.prolong(target, Chill.class, 4f); Buff.prolong(target, Chill.class, Chill.DURATION/2f);
} }
@Override @Override
@@ -113,6 +114,16 @@ public class Frost extends FlavourBuff {
return BuffIndicator.FROST; return BuffIndicator.FROST;
} }
@Override
public void tintIcon(Image icon) {
icon.hardlight(0f, 0.75f, 1f);
}
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add(CharSprite.State.FROZEN); if (on) target.sprite.add(CharSprite.State.FROZEN);
@@ -129,7 +140,4 @@ public class Frost extends FlavourBuff {
return Messages.get(this, "desc", dispTurns()); return Messages.get(this, "desc", dispTurns());
} }
public static float duration( Char ch ) {
return DURATION;
}
} }
@@ -37,6 +37,11 @@ public class Hex extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.HEX; return BuffIndicator.HEX;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -27,6 +27,8 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
public class MagicImmune extends FlavourBuff { public class MagicImmune extends FlavourBuff {
public static final float DURATION = 20f;
{ {
type = buffType.POSITIVE; type = buffType.POSITIVE;
@@ -48,6 +50,11 @@ public class MagicImmune extends FlavourBuff {
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
icon.hardlight(0, 1, 0); icon.hardlight(0, 1, 0);
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -43,6 +43,11 @@ public class MagicalSight extends FlavourBuff {
return BuffIndicator.MIND_VISION; return BuffIndicator.MIND_VISION;
} }
@Override
public void tintIcon(Image icon) {
icon.hardlight(1f, 1.67f, 1f);
}
@Override @Override
public float iconFadePercent() { public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION); return Math.max(0, (DURATION - visualcooldown()) / DURATION);
@@ -30,6 +30,8 @@ import com.watabou.utils.Random;
public class Ooze extends Buff { public class Ooze extends Buff {
public static final float DURATION = 20f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
announced = true; announced = true;
@@ -59,6 +61,11 @@ public class Ooze extends Buff {
public int icon() { public int icon() {
return BuffIndicator.OOZE; return BuffIndicator.OOZE;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - left) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -75,6 +75,11 @@ public class Paralysis extends FlavourBuff {
return BuffIndicator.PARALYSIS; return BuffIndicator.PARALYSIS;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add(CharSprite.State.PARALYSED); if (on) target.sprite.add(CharSprite.State.PARALYSED);
@@ -96,9 +101,6 @@ public class Paralysis extends FlavourBuff {
return Messages.get(this, "desc", dispTurns()); return Messages.get(this, "desc", dispTurns());
} }
public static float duration( Char ch ) {
return DURATION;
}
public static class ParalysisResist extends Buff { public static class ParalysisResist extends Buff {
@@ -112,9 +112,14 @@ public class PrismaticGuard extends Buff {
@Override @Override
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
icon.tint(0.5f, 0.5f, 1, 0.5f); icon.hardlight(1f, 1f, 2f);
} }
@Override
public float iconFadePercent() {
return 1f - HP/(float)maxHP();
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -27,6 +27,8 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Roots extends FlavourBuff { public class Roots extends FlavourBuff {
public static final float DURATION = 5f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
announced = true; announced = true;
@@ -52,6 +54,11 @@ public class Roots extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.ROOTS; return BuffIndicator.ROOTS;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -37,6 +37,11 @@ public class Slow extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.SLOW; return BuffIndicator.SLOW;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -40,6 +40,12 @@ public class SnipersMark extends FlavourBuff implements ActionIndicator.Action {
public int object = 0; public int object = 0;
private static final String OBJECT = "object"; private static final String OBJECT = "object";
public static final float DURATION = 2f;
{
type = buffType.POSITIVE;
}
@Override @Override
public boolean attachTo(Char target) { public boolean attachTo(Char target) {
@@ -70,6 +76,11 @@ public class SnipersMark extends FlavourBuff implements ActionIndicator.Action {
public int icon() { public int icon() {
return BuffIndicator.MARK; return BuffIndicator.MARK;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class SoulMark extends FlavourBuff { public class SoulMark extends FlavourBuff {
@@ -39,6 +40,16 @@ public class SoulMark extends FlavourBuff {
return BuffIndicator.CORRUPT; return BuffIndicator.CORRUPT;
} }
@Override
public void tintIcon(Image icon) {
icon.hardlight(0.5f, 0.5f, 0.5f);
}
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add(CharSprite.State.MARKED); if (on) target.sprite.add(CharSprite.State.MARKED);
@@ -31,6 +31,8 @@ public class Terror extends FlavourBuff {
private static final String OBJECT = "object"; private static final String OBJECT = "object";
public static final float DURATION = 20f;
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
announced = true; announced = true;
@@ -53,6 +55,11 @@ public class Terror extends FlavourBuff {
return BuffIndicator.TERROR; return BuffIndicator.TERROR;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -38,6 +38,11 @@ public class Vertigo extends FlavourBuff {
return BuffIndicator.VERTIGO; return BuffIndicator.VERTIGO;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -37,6 +37,11 @@ public class Vulnerable extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.VULNERABLE; return BuffIndicator.VULNERABLE;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -37,6 +37,11 @@ public class Weakness extends FlavourBuff {
public int icon() { public int icon() {
return BuffIndicator.WEAKNESS; return BuffIndicator.WEAKNESS;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (DURATION - visualcooldown()) / DURATION);
}
@Override @Override
public String toString() { public String toString() {
@@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
public class WellFed extends Buff { public class WellFed extends Buff {
{ {
type = buffType.POSITIVE; type = buffType.POSITIVE;
announced = true; announced = true;
@@ -58,6 +58,11 @@ public class WellFed extends Buff {
public int icon() { public int icon() {
return BuffIndicator.WELL_FED; return BuffIndicator.WELL_FED;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (Hunger.STARVING - left) / Hunger.STARVING);
}
@Override @Override
public String toString() { public String toString() {
@@ -991,7 +991,7 @@ public class Hero extends Char {
@Override @Override
protected boolean act() { protected boolean act() {
if (enemy.isAlive()) { if (enemy.isAlive()) {
Buff.prolong(Hero.this, SnipersMark.class, 2f).object = enemy.id(); Buff.prolong(Hero.this, SnipersMark.class, SnipersMark.DURATION).object = enemy.id();
} }
Actor.remove(this); Actor.remove(this);
return true; return true;
@@ -40,14 +40,14 @@ public class Acidic extends Scorpio {
} }
@Override @Override
public int attackProc(Char enemy, int damage) { public int attackProc(Char enemy, int damage) {
Buff.affect(enemy, Ooze.class).set( 20f ); Buff.affect(enemy, Ooze.class).set( Ooze.DURATION );
return super.attackProc(enemy, damage); return super.attackProc(enemy, damage);
} }
@Override @Override
public int defenseProc( Char enemy, int damage ) { public int defenseProc( Char enemy, int damage ) {
if (Dungeon.level.adjacent(pos, enemy.pos)){ if (Dungeon.level.adjacent(pos, enemy.pos)){
Buff.affect(enemy, Ooze.class).set( 20f ); Buff.affect(enemy, Ooze.class).set( Ooze.DURATION );
} }
return super.defenseProc( enemy, damage ); return super.defenseProc( enemy, damage );
} }
@@ -46,9 +46,9 @@ public class Bandit extends Thief {
protected boolean steal( Hero hero ) { protected boolean steal( Hero hero ) {
if (super.steal( hero )) { if (super.steal( hero )) {
Buff.prolong( hero, Blindness.class, Random.Int( 2, 5 ) ); Buff.prolong( hero, Blindness.class, Blindness.DURATION/2f );
Buff.affect( hero, Poison.class ).set(Random.Int(5, 7) ); Buff.affect( hero, Poison.class ).set(Random.Int(5, 7) );
Buff.prolong( hero, Cripple.class, Random.Int( 3, 8 ) ); Buff.prolong( hero, Cripple.class, Cripple.DURATION/2f );
Dungeon.observe(); Dungeon.observe();
return true; return true;
@@ -41,7 +41,7 @@ public class CausticSlime extends Slime {
@Override @Override
public int attackProc( Char enemy, int damage ) { public int attackProc( Char enemy, int damage ) {
if (Random.Int( 2 ) == 0) { if (Random.Int( 2 ) == 0) {
Buff.affect( enemy, Ooze.class ).set( 20f ); Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
enemy.sprite.burst( 0x000000, 5 ); enemy.sprite.burst( 0x000000, 5 );
} }
@@ -287,7 +287,7 @@ public abstract class Elemental extends Mob {
@Override @Override
protected void rangedProc( Char enemy ) { protected void rangedProc( Char enemy ) {
Buff.affect( enemy, Blindness.class, 5f ); Buff.affect( enemy, Blindness.class, Blindness.DURATION/2f );
if (enemy == Dungeon.hero) { if (enemy == Dungeon.hero) {
GameScene.flash(0xFFFFFF); GameScene.flash(0xFFFFFF);
} }
@@ -61,7 +61,7 @@ public class FetidRat extends Rat {
public int attackProc( Char enemy, int damage ) { public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage ); damage = super.attackProc( enemy, damage );
if (Random.Int(3) == 0) { if (Random.Int(3) == 0) {
Buff.affect(enemy, Ooze.class).set( 20f ); Buff.affect(enemy, Ooze.class).set( Ooze.DURATION );
} }
return damage; return damage;
@@ -137,7 +137,7 @@ public class Goo extends Mob {
public int attackProc( Char enemy, int damage ) { public int attackProc( Char enemy, int damage ) {
damage = super.attackProc( enemy, damage ); damage = super.attackProc( enemy, damage );
if (Random.Int( 3 ) == 0) { if (Random.Int( 3 ) == 0) {
Buff.affect( enemy, Ooze.class ).set( 20f ); Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
enemy.sprite.burst( 0x000000, 5 ); enemy.sprite.burst( 0x000000, 5 );
} }
@@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MonkSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.MonkSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@@ -147,7 +148,12 @@ public class Monk extends Mob {
public int icon() { public int icon() {
return BuffIndicator.MIND_VISION; return BuffIndicator.MIND_VISION;
} }
@Override
public void tintIcon(Image icon) {
icon.hardlight(0.25f, 1.5f, 1f);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -86,8 +86,8 @@ public class Succubus extends Mob {
sprite.emitter().burst( Speck.factory( Speck.HEALING ), 2 ); sprite.emitter().burst( Speck.factory( Speck.HEALING ), 2 );
Sample.INSTANCE.play( Assets.SND_CHARMS ); Sample.INSTANCE.play( Assets.SND_CHARMS );
} else if (Random.Int( 3 ) == 0) { } else if (Random.Int( 3 ) == 0) {
//attack will reduce by 5 turns, so effectively 3-4 turns //attack will reduce by 5 turns, so effectively DURATION-5 turns
Buff.affect( enemy, Charm.class, Random.IntRange( 3, 4 ) + 5 ).object = id(); Buff.affect( enemy, Charm.class, Charm.DURATION ).object = id();
enemy.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); enemy.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 );
Sample.INSTANCE.play( Assets.SND_CHARMS ); Sample.INSTANCE.play( Assets.SND_CHARMS );
} }
@@ -246,7 +246,7 @@ public class Yog extends Mob {
damage = super.attackProc( enemy, damage ); damage = super.attackProc( enemy, damage );
if (Random.Int( 3 ) == 0) { if (Random.Int( 3 ) == 0) {
Buff.affect( enemy, Ooze.class ).set( 20f ); Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
enemy.sprite.burst( 0xFF000000, 5 ); enemy.sprite.burst( 0xFF000000, 5 );
} }
@@ -378,7 +378,7 @@ public abstract class YogFist extends Mob {
damage = super.attackProc( enemy, damage ); damage = super.attackProc( enemy, damage );
if (Random.Int( 2 ) == 0) { if (Random.Int( 2 ) == 0) {
Buff.affect( enemy, Ooze.class ).set( 20f ); Buff.affect( enemy, Ooze.class ).set( Ooze.DURATION );
enemy.sprite.burst( 0xFF000000, 5 ); enemy.sprite.burst( 0xFF000000, 5 );
} }
@@ -448,7 +448,7 @@ public abstract class YogFist extends Mob {
if (hit( this, enemy, true )) { if (hit( this, enemy, true )) {
enemy.damage( Random.NormalIntRange(12, 24), new LightBeam() ); enemy.damage( Random.NormalIntRange(12, 24), new LightBeam() );
Buff.prolong( enemy, Blindness.class, 4f ); Buff.prolong( enemy, Blindness.class, Blindness.DURATION/2f );
if (!enemy.isAlive() && enemy == Dungeon.hero) { if (!enemy.isAlive() && enemy == Dungeon.hero) {
Dungeon.fail( getClass() ); Dungeon.fail( getClass() );
@@ -468,7 +468,7 @@ public abstract class YogFist extends Mob {
super.damage(dmg, src); super.damage(dmg, src);
if (isAlive() && beforeHP > HT/2 && HP < HT/2){ if (isAlive() && beforeHP > HT/2 && HP < HT/2){
HP = HT/2; HP = HT/2;
Buff.prolong( Dungeon.hero, Blindness.class, 15f ); Buff.prolong( Dungeon.hero, Blindness.class, Blindness.DURATION*1.5f );
int i; int i;
do { do {
i = Random.Int(Dungeon.level.length()); i = Random.Int(Dungeon.level.length());
@@ -481,7 +481,7 @@ public abstract class YogFist extends Mob {
GameScene.flash(0xFFFFFF); GameScene.flash(0xFFFFFF);
GLog.w( Messages.get( this, "teleport" )); GLog.w( Messages.get( this, "teleport" ));
} else if (!isAlive()){ } else if (!isAlive()){
Buff.prolong( Dungeon.hero, Blindness.class, 30f ); Buff.prolong( Dungeon.hero, Blindness.class, Blindness.DURATION*3f );
GameScene.flash(0xFFFFFF); GameScene.flash(0xFFFFFF);
} }
} }
@@ -52,7 +52,7 @@ public class MageArmor extends ClassArmor {
if (Dungeon.level.heroFOV[mob.pos] if (Dungeon.level.heroFOV[mob.pos]
&& mob.alignment != Char.Alignment.ALLY) { && mob.alignment != Char.Alignment.ALLY) {
Buff.affect( mob, Burning.class ).reignite( mob ); Buff.affect( mob, Burning.class ).reignite( mob );
Buff.prolong( mob, Roots.class, 5 ); Buff.prolong( mob, Roots.class, Roots.DURATION );
mob.damage(Random.NormalIntRange(4, 16 + Dungeon.depth), new Burning()); mob.damage(Random.NormalIntRange(4, 16 + Dungeon.depth), new Burning());
} }
} }
@@ -73,7 +73,7 @@ public class RogueArmor extends ClassArmor {
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) { for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) {
if (Dungeon.level.adjacent(mob.pos, curUser.pos) && mob.alignment != Char.Alignment.ALLY) { if (Dungeon.level.adjacent(mob.pos, curUser.pos) && mob.alignment != Char.Alignment.ALLY) {
Buff.prolong( mob, Blindness.class, 5 ); Buff.prolong( mob, Blindness.class, Blindness.DURATION/2f );
if (mob.state == mob.HUNTING) mob.state = mob.WANDERING; if (mob.state == mob.HUNTING) mob.state = mob.WANDERING;
mob.sprite.emitter().burst( Speck.factory( Speck.LIGHT ), 4 ); mob.sprite.emitter().burst( Speck.factory( Speck.LIGHT ), 4 );
} }
@@ -45,7 +45,7 @@ public class AntiEntropy extends Glyph {
if (Random.Int( 8 ) == 0) { if (Random.Int( 8 ) == 0) {
if (Dungeon.level.adjacent( attacker.pos, defender.pos )) { if (Dungeon.level.adjacent( attacker.pos, defender.pos )) {
Buff.prolong(attacker, Frost.class, Frost.duration(attacker) * Random.Float(0.5f, 1f)); Buff.prolong(attacker, Frost.class, Frost.DURATION);
CellEmitter.get(attacker.pos).start(SnowParticle.FACTORY, 0.2f, 6); CellEmitter.get(attacker.pos).start(SnowParticle.FACTORY, 0.2f, 6);
} }
@@ -43,7 +43,7 @@ public class Corrosion extends Armor.Glyph {
for (int i : PathFinder.NEIGHBOURS9){ for (int i : PathFinder.NEIGHBOURS9){
Splash.at(pos+i, 0x000000, 5); Splash.at(pos+i, 0x000000, 5);
if (Actor.findChar(pos+i) != null) if (Actor.findChar(pos+i) != null)
Buff.affect(Actor.findChar(pos+i), Ooze.class).set( 20f ); Buff.affect(Actor.findChar(pos+i), Ooze.class).set( Ooze.DURATION );
} }
} }
@@ -44,10 +44,8 @@ public class Affection extends Glyph {
// lvl 1 ~ 19% // lvl 1 ~ 19%
// lvl 2 ~ 23% // lvl 2 ~ 23%
if (Random.Int( level + 20 ) >= 17) { if (Random.Int( level + 20 ) >= 17) {
int duration = Random.IntRange( 8, 12 );
Buff.affect( attacker, Charm.class, duration ).object = defender.id(); Buff.affect( attacker, Charm.class, Charm.DURATION ).object = defender.id();
attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 );
} }
@@ -220,6 +220,11 @@ public class CloakOfShadows extends Artifact {
return BuffIndicator.INVISIBLE; return BuffIndicator.INVISIBLE;
} }
@Override
public float iconFadePercent() {
return (5f - turnsToCost) / 5f;
}
@Override @Override
public boolean attachTo( Char target ) { public boolean attachTo( Char target ) {
if (super.attachTo( target )) { if (super.attachTo( target )) {
@@ -85,7 +85,7 @@ public class SandalsOfNature extends Artifact {
if (!isEquipped( hero )) GLog.i( Messages.get(Artifact.class, "need_to_equip") ); if (!isEquipped( hero )) GLog.i( Messages.get(Artifact.class, "need_to_equip") );
else if (charge == 0) GLog.i( Messages.get(this, "no_charge") ); else if (charge == 0) GLog.i( Messages.get(this, "no_charge") );
else { else {
Buff.prolong(hero, Roots.class, 5); Buff.prolong(hero, Roots.class, Roots.DURATION);
Buff.affect(hero, Earthroot.Armor.class).level(charge); Buff.affect(hero, Earthroot.Armor.class).level(charge);
CellEmitter.bottom(hero.pos).start(EarthParticle.FACTORY, 0.05f, 8); CellEmitter.bottom(hero.pos).start(EarthParticle.FACTORY, 0.05f, 8);
Camera.main.shake(1, 0.4f); Camera.main.shake(1, 0.4f);
@@ -60,7 +60,7 @@ public class MysteryMeat extends Food {
break; break;
case 1: case 1:
GLog.w( Messages.get(MysteryMeat.class, "legs") ); GLog.w( Messages.get(MysteryMeat.class, "legs") );
Buff.prolong( hero, Roots.class, Paralysis.DURATION ); Buff.prolong( hero, Roots.class, Roots.DURATION*2f );
break; break;
case 2: case 2:
GLog.w( Messages.get(MysteryMeat.class, "not_well") ); GLog.w( Messages.get(MysteryMeat.class, "not_well") );
@@ -57,7 +57,7 @@ public class CausticBrew extends Brew {
Char ch = Actor.findChar(i); Char ch = Actor.findChar(i);
if (ch != null){ if (ch != null){
Buff.affect(ch, Ooze.class).set( 20f ); Buff.affect(ch, Ooze.class).set( Ooze.DURATION );
} }
} }
} }
@@ -98,7 +98,7 @@ public class ElixirOfAquaticRejuvenation extends Elixir {
@Override @Override
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
icon.hardlight(0, 1, 1); icon.hardlight(0, 0.75f, 0.75f);
} }
@Override @Override
@@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
public class ElixirOfMight extends Elixir { public class ElixirOfMight extends Elixir {
@@ -112,6 +113,16 @@ public class ElixirOfMight extends Elixir {
public int icon() { public int icon() {
return BuffIndicator.HEALING; return BuffIndicator.HEALING;
} }
@Override
public void tintIcon(Image icon) {
icon.hardlight(1f, 0.5f, 0f);
}
@Override
public float iconFadePercent() {
return (5f - left) / 5f;
}
@Override @Override
public String toString() { public String toString() {
@@ -57,7 +57,7 @@ public class PotionOfSnapFreeze extends ExoticPotion {
Char ch = Actor.findChar( cell + offset); Char ch = Actor.findChar( cell + offset);
if (ch != null){ if (ch != null){
Buff.affect(ch, Roots.class, 10f); Buff.affect(ch, Roots.class, Roots.DURATION*2f);
} }
} }
@@ -54,13 +54,13 @@ public class ScrollOfRetribution extends Scroll {
//deals 10%HT, plus 0-90%HP based on scaling //deals 10%HT, plus 0-90%HP based on scaling
mob.damage(Math.round(mob.HT/10f + (mob.HP * power * 0.225f)), this); mob.damage(Math.round(mob.HT/10f + (mob.HP * power * 0.225f)), this);
if (mob.isAlive()) { if (mob.isAlive()) {
Buff.prolong(mob, Blindness.class, Math.round(6 + power)); Buff.prolong(mob, Blindness.class, Blindness.DURATION);
} }
} }
} }
Buff.prolong(curUser, Weakness.class, Weakness.DURATION); Buff.prolong(curUser, Weakness.class, Weakness.DURATION);
Buff.prolong(curUser, Blindness.class, Math.round(6 + power)); Buff.prolong(curUser, Blindness.class, Blindness.DURATION);
Dungeon.observe(); Dungeon.observe();
setKnown(); setKnown();
@@ -51,7 +51,7 @@ public class ScrollOfTerror extends Scroll {
Mob affected = null; Mob affected = null;
for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) { for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) {
if (mob.alignment != Char.Alignment.ALLY && Dungeon.level.heroFOV[mob.pos]) { if (mob.alignment != Char.Alignment.ALLY && Dungeon.level.heroFOV[mob.pos]) {
Buff.affect( mob, Terror.class, 20f ).object = curUser.id(); Buff.affect( mob, Terror.class, Terror.DURATION ).object = curUser.id();
if (mob.buff(Terror.class) != null){ if (mob.buff(Terror.class) != null){
count++; count++;
@@ -45,7 +45,7 @@ public class ScrollOfAffection extends ExoticScroll {
for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) { for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) {
if (Dungeon.level.heroFOV[mob.pos]) { if (Dungeon.level.heroFOV[mob.pos]) {
Buff.affect( mob, Charm.class, 20f ).object = curUser.id(); Buff.affect( mob, Charm.class, Charm.DURATION*2f ).object = curUser.id();
mob.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); mob.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 );
} }
} }
@@ -37,7 +37,7 @@ public class ScrollOfAntiMagic extends ExoticScroll {
Invisibility.dispel(); Invisibility.dispel();
Buff.affect( curUser, MagicImmune.class, 20f ); Buff.affect( curUser, MagicImmune.class, MagicImmune.DURATION );
new Flare( 5, 32 ).color( 0xFF0000, true ).show( curUser.sprite, 2f ); new Flare( 5, 32 ).color( 0xFF0000, true ).show( curUser.sprite, 2f );
setKnown(); setKnown();
@@ -42,8 +42,8 @@ public class ScrollOfConfusion extends ExoticScroll {
public void doRead() { public void doRead() {
for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) { for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) {
if (mob.alignment != Char.Alignment.ALLY && Dungeon.level.heroFOV[mob.pos]) { if (mob.alignment != Char.Alignment.ALLY && Dungeon.level.heroFOV[mob.pos]) {
Buff.prolong(mob, Vertigo.class, 10f); Buff.prolong(mob, Vertigo.class, Vertigo.DURATION);
Buff.prolong(mob, Blindness.class, 10f); Buff.prolong(mob, Blindness.class, Blindness.DURATION);
} }
} }
@@ -40,7 +40,7 @@ public class ScrollOfForesight extends ExoticScroll {
Sample.INSTANCE.play( Assets.SND_READ ); Sample.INSTANCE.play( Assets.SND_READ );
Invisibility.dispel(); Invisibility.dispel();
Buff.affect(curUser, Foresight.class, 600f); Buff.affect(curUser, Foresight.class, Foresight.DURATION);
setKnown(); setKnown();
@@ -53,15 +53,15 @@ public class ScrollOfPsionicBlast extends ExoticScroll {
targets ++; targets ++;
mob.damage(Math.round(mob.HT/2f + mob.HP/2f), this); mob.damage(Math.round(mob.HT/2f + mob.HP/2f), this);
if (mob.isAlive()) { if (mob.isAlive()) {
Buff.prolong(mob, Blindness.class, 10); Buff.prolong(mob, Blindness.class, Blindness.DURATION);
} }
} }
} }
curUser.damage(Math.max(0, Math.round(curUser.HT*(0.5f * (float)Math.pow(0.9, targets)))), this); curUser.damage(Math.max(0, Math.round(curUser.HT*(0.5f * (float)Math.pow(0.9, targets)))), this);
if (curUser.isAlive()) { if (curUser.isAlive()) {
Buff.prolong(curUser, Blindness.class, 10); Buff.prolong(curUser, Blindness.class, Blindness.DURATION);
Buff.prolong(curUser, Weakness.class, 100); Buff.prolong(curUser, Weakness.class, Weakness.DURATION*5f);
Dungeon.observe(); Dungeon.observe();
readAnimation(); readAnimation();
} else { } else {
@@ -49,7 +49,7 @@ public class StoneOfAffection extends Runestone {
Char ch = Actor.findChar( cell + i ); Char ch = Actor.findChar( cell + i );
if (ch != null && ch.alignment == Char.Alignment.ENEMY){ if (ch != null && ch.alignment == Char.Alignment.ENEMY){
Buff.prolong(ch, Charm.class, 10f).object = curUser.id(); Buff.prolong(ch, Charm.class, Charm.DURATION).object = curUser.id();
} }
} }
@@ -112,12 +112,12 @@ public class CursedWand {
case 0: case 0:
if (target != null) if (target != null)
Buff.affect(target, Burning.class).reignite(target); Buff.affect(target, Burning.class).reignite(target);
Buff.affect(user, Frost.class, Frost.duration(user) * Random.Float(3f, 5f)); Buff.affect(user, Frost.class, Frost.DURATION);
break; break;
case 1: case 1:
Buff.affect(user, Burning.class).reignite(user); Buff.affect(user, Burning.class).reignite(user);
if (target != null) if (target != null)
Buff.affect(target, Frost.class, Frost.duration(target) * Random.Float(3f, 5f)); Buff.affect(target, Frost.class, Frost.DURATION);
break; break;
} }
afterZap.call(); afterZap.call();
@@ -87,7 +87,7 @@ public class WandOfCorrosion extends Wand {
// lvl 2 - 60% // lvl 2 - 60%
if (Random.Int( buffedLvl() + 3 ) >= 2) { if (Random.Int( buffedLvl() + 3 ) >= 2) {
Buff.affect( defender, Ooze.class ).set( 20f ); Buff.affect( defender, Ooze.class ).set( Ooze.DURATION );
CellEmitter.center(defender.pos).burst( CorrosionParticle.SPLASH, 5 ); CellEmitter.center(defender.pos).burst( CorrosionParticle.SPLASH, 5 );
} }
@@ -104,12 +104,12 @@ public class WandOfFrost extends DamageWand {
@Override @Override
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) { public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
Chill chill = defender.buff(Chill.class); Chill chill = defender.buff(Chill.class);
if (chill != null && Random.IntRange(2, 10) <= chill.cooldown()){ if (chill != null && Random.IntRange(2, (int)Chill.DURATION) <= chill.cooldown()){
//need to delay this through an actor so that the freezing isn't broken by taking damage from the staff hit. //need to delay this through an actor so that the freezing isn't broken by taking damage from the staff hit.
new FlavourBuff(){ new FlavourBuff(){
{actPriority = VFX_PRIO;} {actPriority = VFX_PRIO;}
public boolean act() { public boolean act() {
Buff.affect(target, Frost.class, Frost.duration(target) * Random.Float(1f, 2f)); Buff.affect(target, Frost.class, Frost.DURATION);
return super.act(); return super.act();
} }
}.attachTo(defender); }.attachTo(defender);
@@ -249,6 +249,11 @@ public class WandOfLivingEarth extends DamageWand {
return BuffIndicator.ARMOR; return BuffIndicator.ARMOR;
} }
@Override
public float iconFadePercent() {
return Math.max(0, (armorToGuardian() - armor) / armorToGuardian());
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");
@@ -104,7 +104,7 @@ public class WandOfTransfusion extends Wand {
//charms living enemies //charms living enemies
if (!ch.properties().contains(Char.Property.UNDEAD)) { if (!ch.properties().contains(Char.Property.UNDEAD)) {
Buff.affect(ch, Charm.class, 5).object = curUser.id(); Buff.affect(ch, Charm.class, Charm.DURATION/2f).object = curUser.id();
ch.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 3 + buffedLvl()/2 ); ch.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 3 + buffedLvl()/2 );
//harms the undead //harms the undead
@@ -38,13 +38,11 @@ public class Friendly extends Weapon.Enchantment {
if (Random.Int(10) == 0){ if (Random.Int(10) == 0){
int base = Random.IntRange(3, 5); Buff.affect( attacker, Charm.class, Charm.DURATION ).object = defender.id();
Buff.affect( attacker, Charm.class, base + 10 ).object = defender.id();
attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); attacker.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 );
//5 turns will be reduced by the attack, so effectively lasts for base turns //5 turns will be reduced by the attack, so effectively lasts for Charm.DURATION-5 turns
Buff.affect( defender, Charm.class, base + 5 ).object = attacker.id(); Buff.affect( defender, Charm.class, Charm.DURATION ).object = attacker.id();
defender.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 ); defender.sprite.centerEmitter().start( Speck.factory( Speck.HEART ), 0.2f, 5 );
} }
@@ -70,7 +70,12 @@ public class Blocking extends Weapon.Enchantment {
@Override @Override
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
icon.tint(0, 0.5f, 1, 0.5f); icon.hardlight(0.5f, 1f, 2f);
}
@Override
public float iconFadePercent() {
return Math.max(0, (5f - visualcooldown()) / 5f);
} }
@Override @Override
@@ -36,7 +36,7 @@ public class BlindingDart extends TippedDart {
@Override @Override
public int proc(Char attacker, Char defender, int damage) { public int proc(Char attacker, Char defender, int damage) {
Buff.affect(defender, Blindness.class, 10f); Buff.affect(defender, Blindness.class, Blindness.DURATION);
return super.proc(attacker, defender, damage); return super.proc(attacker, defender, damage);
} }
@@ -37,7 +37,7 @@ public class ChillingDart extends TippedDart {
public int proc(Char attacker, Char defender, int damage) { public int proc(Char attacker, Char defender, int damage) {
if (Dungeon.level.water[defender.pos]){ if (Dungeon.level.water[defender.pos]){
Buff.prolong(defender, Chill.class, 10f); Buff.prolong(defender, Chill.class, Chill.DURATION);
} else { } else {
Buff.prolong(defender, Chill.class, 6f); Buff.prolong(defender, Chill.class, 6f);
} }
@@ -61,8 +61,8 @@ public class FlashingTrap extends Trap {
if (c != null) { if (c != null) {
int damage = Math.max( 0, (4 + Dungeon.depth) - c.drRoll() ); int damage = Math.max( 0, (4 + Dungeon.depth) - c.drRoll() );
Buff.affect( c, Bleeding.class ).set( damage ); Buff.affect( c, Bleeding.class ).set( damage );
Buff.prolong( c, Blindness.class, 10f ); Buff.prolong( c, Blindness.class, Blindness.DURATION );
Buff.prolong( c, Cripple.class, 20f ); Buff.prolong( c, Cripple.class, Cripple.DURATION*2f );
if (c instanceof Mob) { if (c instanceof Mob) {
if (((Mob)c).state == ((Mob)c).HUNTING) ((Mob)c).state = ((Mob)c).WANDERING; if (((Mob)c).state == ((Mob)c).HUNTING) ((Mob)c).state = ((Mob)c).WANDERING;
@@ -44,7 +44,7 @@ public class OozeTrap extends Trap {
Splash.at( pos + i, 0x000000, 5); Splash.at( pos + i, 0x000000, 5);
Char ch = Actor.findChar( pos + i ); Char ch = Actor.findChar( pos + i );
if (ch != null && !ch.flying){ if (ch != null && !ch.flying){
Buff.affect(ch, Ooze.class).set( 20f ); Buff.affect(ch, Ooze.class).set( Ooze.DURATION );
} }
} }
} }
@@ -48,9 +48,8 @@ public class Blindweed extends Plant {
if (ch instanceof Hero && ((Hero) ch).subClass == HeroSubClass.WARDEN){ if (ch instanceof Hero && ((Hero) ch).subClass == HeroSubClass.WARDEN){
Buff.affect(ch, Invisibility.class, Invisibility.DURATION/2f); Buff.affect(ch, Invisibility.class, Invisibility.DURATION/2f);
} else { } else {
int len = Random.Int(5, 10); Buff.prolong(ch, Blindness.class, Blindness.DURATION);
Buff.prolong(ch, Blindness.class, len); Buff.prolong(ch, Cripple.class, Cripple.DURATION);
Buff.prolong(ch, Cripple.class, len);
if (ch instanceof Mob) { if (ch instanceof Mob) {
if (((Mob) ch).state == ((Mob) ch).HUNTING) ((Mob) ch).state = ((Mob) ch).WANDERING; if (((Mob) ch).state == ((Mob) ch).HUNTING) ((Mob) ch).state = ((Mob) ch).WANDERING;
((Mob) ch).beckon(Dungeon.level.randomDestination( ch )); ((Mob) ch).beckon(Dungeon.level.randomDestination( ch ));