v0.7.0: significant implementation and polish for exotic potions
This commit is contained in:
parent
c14995902e
commit
ef3c7b03db
|
@ -58,6 +58,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.SewerBossLevel;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret.SecretRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.SpecialRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.ShadowCaster;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
||||
|
@ -695,7 +696,7 @@ public class Dungeon {
|
|||
}
|
||||
|
||||
public static void observe(){
|
||||
observe( hero.viewDistance+1 );
|
||||
observe( ShadowCaster.MAX_DISTANCE+1 );
|
||||
}
|
||||
|
||||
public static void observe( int dist ) {
|
||||
|
|
|
@ -55,13 +55,14 @@ public class SmokeScreen extends Blob {
|
|||
@Override
|
||||
public void clear(int cell) {
|
||||
super.clear(cell);
|
||||
//TODO
|
||||
Level l = Dungeon.level;
|
||||
l.losBlocking[cell] = cur[cell] > 0 || (Terrain.flags[l.map[cell]] & Terrain.LOS_BLOCKING) != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fullyClear() {
|
||||
super.fullyClear();
|
||||
//TODO
|
||||
Dungeon.level.buildFlagMaps();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -60,8 +60,7 @@ public class StormCloud extends Blob {
|
|||
@Override
|
||||
public void use( BlobEmitter emitter ) {
|
||||
super.use( emitter );
|
||||
//TODO finalize VFX
|
||||
emitter.pour( Speck.factory( Speck.CONFUSION ), 0.4f );
|
||||
emitter.pour( Speck.factory( Speck.STORM ), 0.4f );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2018 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
public class AdrenalineSurge extends Buff {
|
||||
|
||||
private int boost;
|
||||
private static final float INTERVAL = TICK * 500f;
|
||||
|
||||
public void reset(){
|
||||
boost = 2;
|
||||
spend(INTERVAL - cooldown());
|
||||
}
|
||||
|
||||
public int boost(){
|
||||
return boost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
boost --;
|
||||
if (boost > 0){
|
||||
spend( INTERVAL );
|
||||
} else {
|
||||
detach();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.FURY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", boost, dispTurns(cooldown()+1));
|
||||
}
|
||||
|
||||
private static final String BOOST = "boost";
|
||||
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
super.storeInBundle( bundle );
|
||||
bundle.put( BOOST, boost );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
super.restoreFromBundle( bundle );
|
||||
boost = bundle.getInt( BOOST );
|
||||
}
|
||||
}
|
|
@ -57,7 +57,7 @@ public class Barkskin extends Buff {
|
|||
if (Math.sqrt(interval)*level < Math.sqrt(time)*value) {
|
||||
level = value;
|
||||
interval = time;
|
||||
spend(cooldown() - time);
|
||||
spend(time - cooldown());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@ public class Barkskin extends Buff {
|
|||
@Override
|
||||
//TODO
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", level);
|
||||
return Messages.get(this, "desc", level, dispTurns(cooldown()+1));
|
||||
}
|
||||
|
||||
private static final String LEVEL = "level";
|
||||
|
|
|
@ -21,7 +21,10 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.noosa.Image;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
public class Barrier extends ShieldBuff {
|
||||
|
@ -62,4 +65,24 @@ public class Barrier extends ShieldBuff {
|
|||
shielding = bundle.getInt("level");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.ARMOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tintIcon(Image icon) {
|
||||
icon.tint(0, 0.5f, 1, 0.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", shielding);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Freezing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ParalyticGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Regrowth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.SmokeScreen;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StenchGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StormCloud;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Web;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
|
@ -63,7 +65,9 @@ public class BlobImmunity extends FlavourBuff {
|
|||
immunities.add( Freezing.class );
|
||||
immunities.add( ParalyticGas.class );
|
||||
immunities.add( Regrowth.class );
|
||||
immunities.add( SmokeScreen.class );
|
||||
immunities.add( StenchGas.class );
|
||||
immunities.add( StormCloud.class );
|
||||
immunities.add( ToxicGas.class );
|
||||
immunities.add( Web.class );
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ public class Buff extends Actor {
|
|||
|
||||
//determines how the buff is announced when it is shown.
|
||||
//buffs that work behind the scenes, or have other visual indicators can usually be silent.
|
||||
//FIXME should extend this to more buffs, want silent positive and silent negative?
|
||||
public enum buffType {POSITIVE, NEGATIVE, NEUTRAL, SILENT};
|
||||
public buffType type = buffType.SILENT;
|
||||
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2018 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.noosa.Image;
|
||||
|
||||
public class MagicalSight extends FlavourBuff {
|
||||
|
||||
public static final float DURATION = 30f;
|
||||
|
||||
public int distance = 8;
|
||||
|
||||
{
|
||||
type = buffType.POSITIVE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.MIND_VISION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tintIcon(Image icon) {
|
||||
greyIcon(icon, 5f, cooldown());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detach() {
|
||||
super.detach();
|
||||
Dungeon.observe();
|
||||
GameScene.updateFog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", dispTurns());
|
||||
}
|
||||
|
||||
}
|
|
@ -21,6 +21,31 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
|
||||
//TODO
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.noosa.Image;
|
||||
|
||||
public class Stamina extends FlavourBuff {
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.MOMENTUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tintIcon(Image icon) {
|
||||
icon.tint(1, 1, 0, 0.5f);
|
||||
if (cooldown() < 5f) greyIcon(icon, 5f, cooldown());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Messages.get(this, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", dispTurns());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AdrenalineSurge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Awareness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barkskin;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Berserk;
|
||||
|
@ -76,7 +77,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfAdrenalineSurge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEvasion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfForce;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfFuror;
|
||||
|
@ -200,7 +200,7 @@ public class Hero extends Char {
|
|||
|
||||
STR += RingOfMight.strengthBonus( this );
|
||||
|
||||
PotionOfAdrenalineSurge.strBoost buff = buff(PotionOfAdrenalineSurge.strBoost.class);
|
||||
AdrenalineSurge buff = buff(AdrenalineSurge.class);
|
||||
if (buff != null){
|
||||
STR += buff.boost();
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ public class Speck extends Image {
|
|||
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;
|
||||
|
||||
private static final int SIZE = 7;
|
||||
|
||||
|
@ -113,6 +114,7 @@ public class Speck extends Image {
|
|||
case PARALYSIS:
|
||||
case STENCH:
|
||||
case CONFUSION:
|
||||
case STORM:
|
||||
case DUST:
|
||||
case SMOKE:
|
||||
frame( film.get( STEAM ) );
|
||||
|
@ -316,6 +318,13 @@ public class Speck extends Image {
|
|||
lifespan = Random.Float( 1f, 3f );
|
||||
break;
|
||||
|
||||
case STORM:
|
||||
hardlight( 0x8AD8D8 );
|
||||
angularSpeed = Random.Float( -20, +20 );
|
||||
angle = Random.Float( 360 );
|
||||
lifespan = Random.Float( 1f, 3f );
|
||||
break;
|
||||
|
||||
case SMOKE:
|
||||
hardlight( 0x000000 );
|
||||
angularSpeed = 30;
|
||||
|
@ -433,6 +442,7 @@ public class Speck extends Image {
|
|||
case TOXIC:
|
||||
case PARALYSIS:
|
||||
case CONFUSION:
|
||||
case STORM:
|
||||
case DUST:
|
||||
am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) * 0.5f );
|
||||
scale.set( 1 + p );
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.ItemStatusHandler;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Recipe;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfCleansing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfCorrosiveGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfShroudingFog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfSnapFreeze;
|
||||
|
@ -137,11 +138,12 @@ public class Potion extends Item {
|
|||
static{
|
||||
canThrowPots.add(PotionOfPurity.class);
|
||||
canThrowPots.add(PotionOfLevitation.class);
|
||||
canThrowPots.add(PotionOfCleansing.class);
|
||||
}
|
||||
|
||||
protected static ItemStatusHandler<Potion> handler;
|
||||
|
||||
private String color;
|
||||
protected String color;
|
||||
|
||||
public boolean ownedByFruit = false;
|
||||
|
||||
|
@ -344,14 +346,12 @@ public class Potion extends Item {
|
|||
|
||||
@Override
|
||||
public String name() {
|
||||
return isKnown() ? super.name() : Messages.get(Potion.class, color);
|
||||
return isKnown() ? super.name() : Messages.get(this, color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String info() {
|
||||
return isKnown() ?
|
||||
desc() :
|
||||
Messages.get(Potion.class, "unknown_desc");
|
||||
return isKnown() ? desc() : Messages.get(this, "unknown_desc");
|
||||
}
|
||||
|
||||
public Integer initials(){
|
||||
|
|
|
@ -111,6 +111,7 @@ public class ExoticPotion extends Potion {
|
|||
super.reset();
|
||||
if (handler != null && handler.contains(exoToReg.get(this.getClass()))) {
|
||||
image = handler.image(exoToReg.get(this.getClass())) + 16;
|
||||
color = handler.label(exoToReg.get(this.getClass()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,58 +21,16 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AdrenalineSurge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
|
||||
public class PotionOfAdrenalineSurge extends ExoticPotion {
|
||||
|
||||
@Override
|
||||
public void apply(Hero hero) {
|
||||
setKnown();
|
||||
Buff.affect(hero, strBoost.class).reset();
|
||||
Buff.affect(hero, AdrenalineSurge.class).reset();
|
||||
}
|
||||
|
||||
public static class strBoost extends Buff {
|
||||
|
||||
int boost;
|
||||
private static final float INTERVAL = TICK * 500f;
|
||||
|
||||
public void reset(){
|
||||
boost = 2;
|
||||
spend(INTERVAL - cooldown());
|
||||
}
|
||||
|
||||
public int boost(){
|
||||
return boost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
boost --;
|
||||
if (boost > 0){
|
||||
spend( INTERVAL );
|
||||
} else {
|
||||
detach();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO visuals
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.MOMENTUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "surge";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return "cur boost: +" + boost + "\n\nleft: " + dispTurns(cooldown());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,15 +21,50 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
public class PotionOfCleansing extends ExoticPotion {
|
||||
|
||||
@Override
|
||||
public void apply( Hero hero ) {
|
||||
setKnown();
|
||||
//TODO detach all debuffs, and satifsy hunger
|
||||
//perhaps heal a little too?
|
||||
|
||||
cleanse( hero );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shatter(int cell) {
|
||||
if (Actor.findChar(cell) == null){
|
||||
super.shatter(cell);
|
||||
} else {
|
||||
if (Dungeon.level.heroFOV[cell]) {
|
||||
Sample.INSTANCE.play(Assets.SND_SHATTER);
|
||||
splash(cell);
|
||||
setKnown();
|
||||
}
|
||||
|
||||
if (Actor.findChar(cell) != null){
|
||||
cleanse(Actor.findChar(cell));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void cleanse(Char ch){
|
||||
for (Buff b : ch.buffs()){
|
||||
if (b.type == Buff.buffType.NEGATIVE && !(b instanceof Corruption)){
|
||||
b.detach();
|
||||
}
|
||||
if (b instanceof Hunger){
|
||||
((Hunger) b).satisfy(Hunger.STARVING);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,6 @@ public class PotionOfCorrosiveGas extends ExoticPotion {
|
|||
Sample.INSTANCE.play( Assets.SND_SHATTER );
|
||||
}
|
||||
|
||||
GameScene.add( Blob.seed( cell, 100, CorrosiveGas.class ).setStrength( 1 + Dungeon.depth/5));
|
||||
GameScene.add( Blob.seed( cell, 120, CorrosiveGas.class ).setStrength( 1 + Dungeon.depth/5));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,10 +57,6 @@ public class PotionOfDragonsBreath extends ExoticPotion {
|
|||
detach( hero.belongings.backpack );
|
||||
setKnown();
|
||||
|
||||
//hero.spend( TIME_TO_DRINK );
|
||||
//hero.busy();
|
||||
//apply( hero );
|
||||
|
||||
GameScene.selectCell(targeter);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
|
||||
public class PotionOfMagicalSight extends ExoticPotion {
|
||||
|
@ -31,13 +31,9 @@ public class PotionOfMagicalSight extends ExoticPotion {
|
|||
@Override
|
||||
public void apply(Hero hero) {
|
||||
setKnown();
|
||||
Buff.affect(hero, MagicalSight.class, 30f);
|
||||
Buff.affect(hero, MagicalSight.class, MagicalSight.DURATION);
|
||||
Dungeon.observe();
|
||||
|
||||
}
|
||||
|
||||
public static class MagicalSight extends FlavourBuff {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Awareness;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicalSight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MindVision;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Shadows;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
|
@ -51,7 +52,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.SmallRation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfMagicalSight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfIntuition;
|
||||
|
@ -566,7 +566,7 @@ public abstract class Level implements Bundlable {
|
|||
return null;
|
||||
}
|
||||
|
||||
protected void buildFlagMaps() {
|
||||
public void buildFlagMaps() {
|
||||
|
||||
for (int i=0; i < length(); i++) {
|
||||
int flags = Terrain.flags[map[i]];
|
||||
|
@ -861,23 +861,32 @@ public abstract class Level implements Bundlable {
|
|||
for (Buff b : c.buffs( MindVision.class )) {
|
||||
sense = Math.max( ((MindVision)b).distance, sense );
|
||||
}
|
||||
if (c.buff(PotionOfMagicalSight.MagicalSight.class) != null){
|
||||
if (c.buff(MagicalSight.class) != null){
|
||||
sense = 8;
|
||||
}
|
||||
}
|
||||
|
||||
//TODO rounding
|
||||
if ((sighted && sense > 1) || !sighted) {
|
||||
//uses rounding
|
||||
if (!sighted || sense > 1) {
|
||||
|
||||
int ax = Math.max( 0, cx - sense );
|
||||
int bx = Math.min( cx + sense, width() - 1 );
|
||||
int ay = Math.max( 0, cy - sense );
|
||||
int by = Math.min( cy + sense, height() - 1 );
|
||||
|
||||
int len = bx - ax + 1;
|
||||
int pos = ax + ay * width();
|
||||
for (int y = ay; y <= by; y++, pos+=width()) {
|
||||
System.arraycopy(discoverable, pos, fieldOfView, pos, len);
|
||||
int[][] rounding = ShadowCaster.rounding;
|
||||
|
||||
int left, right;
|
||||
int pos;
|
||||
for (int y = Math.max(0, cy - sense); y <= Math.min(height()-1, cy + sense); y++) {
|
||||
if (rounding[sense][Math.abs(cy - y)] < Math.abs(cy - y)) {
|
||||
left = cx - rounding[sense][Math.abs(cy - y)];
|
||||
} else {
|
||||
left = sense;
|
||||
while (rounding[sense][left] < rounding[sense][Math.abs(cy - y)]){
|
||||
left--;
|
||||
}
|
||||
left = cx - left;
|
||||
}
|
||||
right = Math.min(width()-1, cx + cx - left);
|
||||
left = Math.max(0, left);
|
||||
pos = left + y * width();
|
||||
System.arraycopy(discoverable, pos, fieldOfView, pos, right - left);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ public final class ShadowCaster {
|
|||
|
||||
//max length of rows as FOV moves out, for each FOV distance
|
||||
//This is used to make the overall FOV circular, instead of square
|
||||
private static int[][] rounding;
|
||||
public static int[][] rounding;
|
||||
static {
|
||||
rounding = new int[MAX_DISTANCE+1][];
|
||||
for (int i=1; i <= MAX_DISTANCE; i++) {
|
||||
|
|
|
@ -14,8 +14,12 @@ actors.blobs.goowarn.desc=Specks of dark energy are swarming 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.
|
||||
|
||||
actors.blobs.stenchgas.desc=A cloud of fetid stench is swirling here.
|
||||
|
||||
actors.blobs.stormcloud.desc=A cloud of billowing water vapor is swirling here.
|
||||
|
||||
actors.blobs.toxicgas.desc=A greenish cloud of toxic gas is swirling here.
|
||||
actors.blobs.toxicgas.rankings_desc=Suffocated
|
||||
actors.blobs.toxicgas.ondeath=You died from the toxic gas...
|
||||
|
@ -38,11 +42,17 @@ actors.blobs.web.desc=Everything is covered with a thick web here.
|
|||
actors.buffs.adrenaline.name=Adrenaline
|
||||
actors.buffs.adrenaline.desc=A surge of physical power, adrenaline enhanced both attack and movement speed.\n\nAdrenaline allows its target to run at 2x speed, and attack at 1.5x speed.\n\nTurns remaining: %s.
|
||||
|
||||
actors.buffs.adrenalinesurge.name=Adrenaline Surge
|
||||
actors.buffs.adrenalinesurge.desc=A surge of great might, but sadly not permanent.\n\nStrength boost: +%d.\nTurns until boost weakens: %s.
|
||||
|
||||
actors.buffs.amok.name=Amok
|
||||
actors.buffs.amok.desc=Amok causes a state of great rage and confusion in its target.\n\nWhen a creature is amoked, they will attack whatever is near them, whether they be friend or foe.\n\nTurns of amok remaining: %s.
|
||||
|
||||
actors.buffs.barkskin.name=Barkskin
|
||||
actors.buffs.barkskin.desc=Your skin is hardened, it feels rough and solid like bark.\n\nThe hardened skin increases your effective armor, allowing you to better defend against physical attack. The armor bonus will decrease by one point each turn until it expires.\n\nYour armor is currently increased by: %d.
|
||||
actors.buffs.barkskin.desc=Your skin is hardened, it feels rough and solid like bark.\n\nThe hardened skin increases your effective armor, allowing you to better defend against physical attack.\n\nYour armor is currently increased by: %d.\nTurns until barkskin weakens: %s.
|
||||
|
||||
actors.buffs.barrier.name=Barrier
|
||||
actors.buffs.barrier.desc=A durable bubble of force which blocks all damage.\n\nThe barrier will take damage for whatever it is protecting so long as there is shielding left. The shielding will also decay at a rate of 1 per turn.\n\nShielding remaining: %d.
|
||||
|
||||
actors.buffs.berserk.angered=Angered
|
||||
actors.buffs.berserk.berserk=Berserking
|
||||
|
@ -156,6 +166,9 @@ actors.buffs.light.desc=Even in the Darkest Dungeon, a steady light at your side
|
|||
actors.buffs.lockedfloor.name=Floor is Locked
|
||||
actors.buffs.lockedfloor.desc=The current floor is locked, and you are unable to leave it!\n\nWhile a floor is locked, you will not gain hunger or take damage from starving. In addition, if you do not work towards defeating this floor's boss, passive regeneration effects will also stop.\n\nAdditionally, if you are revived by an unblessed ankh while the floor is locked, then it will reset.\n\nKill this floor's boss to break the lock.
|
||||
|
||||
actors.buffs.magicalsight.name=Magical Sight
|
||||
actors.buffs.magicalsight.desc=Somehow you are able to see with your mind, rather than your eyes.\n\nAll terrain or effects which reduce or block vision are broken while magical sight is active.\n\nTurns of magical sight remaining: %s.
|
||||
|
||||
actors.buffs.magicalsleep.name=Magical Sleep
|
||||
actors.buffs.magicalsleep.toohealthy=You are too healthy, and resist the urge to sleep.
|
||||
actors.buffs.magicalsleep.fallasleep=You fall into a deep magical sleep.
|
||||
|
@ -217,6 +230,9 @@ actors.buffs.snipersmark.desc=The sniper is honed in on a nearby target, gaining
|
|||
actors.buffs.soulmark.name=Soul Marked
|
||||
actors.buffs.soulmark.desc=The warlock has tapped into the soul of this creature. He will heal and satisfy his hunger as it takes physical damage.\n\nTurns of soul mark remaining: %s.
|
||||
|
||||
actors.buffs.stamina.name=Stamina
|
||||
actors.buffs.stamina.desc=You have unending stamina, allowing for faster movement!\n\nWhile under the effects of stamina you will run at +50%% speed, but will perform all other actions at normal speed.\n\nTurns of stamina remaining: %s.
|
||||
|
||||
actors.buffs.terror.name=Terrified
|
||||
actors.buffs.terror.desc=Terror is manipulative magic which forces its target into an uncontrollable panic.\n\nTerrified characters are forced to run away from their opponent, trying to put as many doors and walls between them as possible. The shock of pain is enough to break this effect, however.\n\nTurns of terror remaining: %s.
|
||||
|
||||
|
|
|
@ -541,6 +541,59 @@ items.potions.potionoftoxicgas.desc=Uncorking or shattering this pressurized gla
|
|||
|
||||
|
||||
|
||||
###exotic potions
|
||||
items.potions.exotic.exoticpotion.turquoise=exotic turquoise potion
|
||||
items.potions.exotic.exoticpotion.crimson=exotic crimson potion
|
||||
items.potions.exotic.exoticpotion.azure=exotic azure potion
|
||||
items.potions.exotic.exoticpotion.jade=exotic jade potion
|
||||
items.potions.exotic.exoticpotion.golden=exotic golden potion
|
||||
items.potions.exotic.exoticpotion.magenta=exotic magenta potion
|
||||
items.potions.exotic.exoticpotion.charcoal=exotic charcoal potion
|
||||
items.potions.exotic.exoticpotion.ivory=exotic ivory potion
|
||||
items.potions.exotic.exoticpotion.amber=exotic amber potion
|
||||
items.potions.exotic.exoticpotion.bistre=exotic bistre potion
|
||||
items.potions.exotic.exoticpotion.indigo=exotic indigo potion
|
||||
items.potions.exotic.exoticpotion.silver=exotic silver potion
|
||||
items.potions.exotic.exoticpotion.unknown_desc=This round flask contains a grainy colorful liquid. It seems to be foreign to this land, who knows what it might do when drunk or thrown?
|
||||
|
||||
items.potions.exotic.potionofadrenalinesurge.name=potion of adrenaline surge
|
||||
items.potions.exotic.potionofadrenalinesurge.desc=This powerful liquid will give you a greater boost of strength that withers after an extended period of time.
|
||||
|
||||
items.potions.exotic.potionofcleansing.name=potion of cleansing
|
||||
items.potions.exotic.potionofcleansing.desc=This power reagent will completely neutralize all harmful effects on the drinker when quaffed. It can be thrown at a target to cleanse them as well.
|
||||
|
||||
items.potions.exotic.potionofcorrosivegas.name=potion of corrosive gas
|
||||
items.potions.exotic.potionofcorrosivegas.desc=Uncorking or shattering this pressurized glass will cause its contents to explode into a deadly cloud of corrosive rust-colored gas. The gas is less concentrated however, and will not last for very long.
|
||||
|
||||
items.potions.exotic.potionofdragonsbreath.name=potion of dragon's breath
|
||||
items.potions.exotic.potionofdragonsbreath.desc=This flask contains an unusual compound which bursts into flame shortly after mixing with saliva. Quickly spitting the liquid will allow the user to spew flame from their mouth!
|
||||
|
||||
items.potions.exotic.potionofearthenarmor.name=potion of earthen armor
|
||||
items.potions.exotic.potionofearthenarmor.desc=Rather than paralyze, this liquid has a hardening effect on the skin which will turn it into temporary natural armor.
|
||||
|
||||
items.potions.exotic.potionofholyfuror.name=potion of holy furor
|
||||
items.potions.exotic.potionofholyfuror.desc=The power of holy energy reduced to liquid form, this draught will bless you for an extended period of time.
|
||||
|
||||
items.potions.exotic.potionofmagicalsight.name=potion of magical sight
|
||||
items.potions.exotic.potionofmagicalsight.desc=After drinking this, your senses will be breifly heightened to incredible levels, allowing you to see through walls!
|
||||
|
||||
items.potions.exotic.potionofshielding.name=potion of shielding
|
||||
items.potions.exotic.potionofshielding.desc=Rather than heal, this potion will instead project a durable shield around the users body, blocking a considerable amount of damage.
|
||||
|
||||
items.potions.exotic.potionofshroudingfog.name=potion of shrouding fog
|
||||
items.potions.exotic.potionofshroudingfog.desc=When exposed to air, the liquid in this flask will produce a thick smoky fog which completely blocks vision.
|
||||
|
||||
items.potions.exotic.potionofsnapfreeze.name=potion of snap freeze
|
||||
items.potions.exotic.potionofsnapfreeze.desc=The chemical contained in this potion will rapidly react with the air, instantly freezing and rooting all within its effect.
|
||||
|
||||
items.potions.exotic.potionofstamina.name=potion of stamina
|
||||
items.potions.exotic.potionofstamina.desc=Drinking this oddly sweet liquid will imbue you with a long-lasting boost of energy, allowing you to run at a quickened pace for an extended period of time.
|
||||
|
||||
items.potions.exotic.potionofstormclouds.name=potion of storm clouds
|
||||
items.potions.exotic.potionofstormclouds.desc=Throwing this potion will create a cloud of concentrated vapor, which will condense and pour down onto the environment. Most terrain will be converted to water, and traps will be overwhelmed and break.
|
||||
|
||||
|
||||
|
||||
###quest items
|
||||
items.quest.ceremonialcandle.name=ceremonial candle
|
||||
items.quest.ceremonialcandle.desc=A set of candles, melted down and fused together through use.\n\nAlone they are worthless, but used with other candles in a pattern, they can focus the energy for a summoning ritual.
|
||||
|
|
Loading…
Reference in New Issue
Block a user