v0.7.0: polish pass on elixirs, brews, and spells
- Improved several sprites and vfx - Beacon of returning no longer forgets return depth when used
This commit is contained in:
parent
cec9f60e89
commit
dd5d54f289
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
|
@ -64,7 +64,7 @@ public class Blizzard extends Blob {
|
||||||
@Override
|
@Override
|
||||||
public void use( BlobEmitter emitter ) {
|
public void use( BlobEmitter emitter ) {
|
||||||
super.use( emitter );
|
super.use( emitter );
|
||||||
emitter.pour( Speck.factory( Speck.BLIZZARD ), 0.2f );
|
emitter.pour( Speck.factory( Speck.BLIZZARD, true ), 0.4f );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -80,7 +80,7 @@ public class Inferno extends Blob {
|
||||||
public void use( BlobEmitter emitter ) {
|
public void use( BlobEmitter emitter ) {
|
||||||
super.use( emitter );
|
super.use( emitter );
|
||||||
|
|
||||||
emitter.pour( Speck.factory( Speck.INFERNO ), 0.2f );
|
emitter.pour( Speck.factory( Speck.INFERNO, true ), 0.4f );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -330,15 +330,15 @@ public class Speck extends Image {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INFERNO:
|
case INFERNO:
|
||||||
hardlight( 0xFF0000 );
|
hardlight( 0xEE7722 );
|
||||||
angularSpeed = Random.Float( -20, +20 );
|
angularSpeed = Random.Float( 200, 300 ) * (Random.Int(2) == 0 ? -1 : 1);
|
||||||
angle = Random.Float( 360 );
|
angle = Random.Float( 360 );
|
||||||
lifespan = Random.Float( 1f, 3f );
|
lifespan = Random.Float( 1f, 3f );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BLIZZARD:
|
case BLIZZARD:
|
||||||
hardlight( 0xFFFFFF );
|
hardlight( 0xFFFFFF );
|
||||||
angularSpeed = Random.Float( -20, +20 );
|
angularSpeed = Random.Float( 200, 300 ) * (Random.Int(2) == 0 ? -1 : 1);
|
||||||
angle = Random.Float( 360 );
|
angle = Random.Float( 360 );
|
||||||
lifespan = Random.Float( 1f, 3f );
|
lifespan = Random.Float( 1f, 3f );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,8 +40,6 @@ public class BlizzardBrew extends Brew {
|
||||||
@Override
|
@Override
|
||||||
public void shatter(int cell) {
|
public void shatter(int cell) {
|
||||||
if (Dungeon.level.heroFOV[cell]) {
|
if (Dungeon.level.heroFOV[cell]) {
|
||||||
setKnown();
|
|
||||||
|
|
||||||
splash( cell );
|
splash( cell );
|
||||||
Sample.INSTANCE.play( Assets.SND_SHATTER );
|
Sample.INSTANCE.play( Assets.SND_SHATTER );
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.potions.brews;
|
package com.shatteredpixel.shatteredpixeldungeon.items.potions.brews;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
@ -31,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob;
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
||||||
|
import com.watabou.noosa.audio.Sample;
|
||||||
import com.watabou.utils.PathFinder;
|
import com.watabou.utils.PathFinder;
|
||||||
|
|
||||||
public class CausticBrew extends Brew {
|
public class CausticBrew extends Brew {
|
||||||
|
@ -43,6 +45,11 @@ public class CausticBrew extends Brew {
|
||||||
@Override
|
@Override
|
||||||
public void shatter(int cell) {
|
public void shatter(int cell) {
|
||||||
|
|
||||||
|
if (Dungeon.level.heroFOV[cell]) {
|
||||||
|
splash( cell );
|
||||||
|
Sample.INSTANCE.play( Assets.SND_SHATTER );
|
||||||
|
}
|
||||||
|
|
||||||
PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 );
|
PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 );
|
||||||
for (int i = 0; i < PathFinder.distance.length; i++) {
|
for (int i = 0; i < PathFinder.distance.length; i++) {
|
||||||
if (PathFinder.distance[i] < Integer.MAX_VALUE) {
|
if (PathFinder.distance[i] < Integer.MAX_VALUE) {
|
||||||
|
|
|
@ -48,7 +48,6 @@ public class AquaBlast extends TargetedSpell {
|
||||||
protected void affectTarget(Ballistica bolt, Hero hero) {
|
protected void affectTarget(Ballistica bolt, Hero hero) {
|
||||||
int cell = bolt.collisionPos;
|
int cell = bolt.collisionPos;
|
||||||
|
|
||||||
//TODO perhaps different color based on depth?
|
|
||||||
Splash.at(cell, 0x00AAFF, 10);
|
Splash.at(cell, 0x00AAFF, 10);
|
||||||
|
|
||||||
for (int i : PathFinder.NEIGHBOURS9){
|
for (int i : PathFinder.NEIGHBOURS9){
|
||||||
|
|
|
@ -136,7 +136,6 @@ public class BeaconOfReturning extends Spell {
|
||||||
InterlevelScene.returnPos = returnPos;
|
InterlevelScene.returnPos = returnPos;
|
||||||
Game.switchScene( InterlevelScene.class );
|
Game.switchScene( InterlevelScene.class );
|
||||||
}
|
}
|
||||||
returnDepth = -1;
|
|
||||||
detach(hero.belongings.backpack);
|
detach(hero.belongings.backpack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,9 @@
|
||||||
|
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
|
||||||
|
@ -30,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Boomerang;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Boomerang;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
||||||
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
|
||||||
public class CurseInfusion extends InventorySpell {
|
public class CurseInfusion extends InventorySpell {
|
||||||
|
|
||||||
|
@ -41,7 +45,8 @@ public class CurseInfusion extends InventorySpell {
|
||||||
@Override
|
@Override
|
||||||
protected void onItemSelected(Item item) {
|
protected void onItemSelected(Item item) {
|
||||||
|
|
||||||
//TODO visuals
|
CellEmitter.get(curUser.pos).burst(ShadowParticle.UP, 5);
|
||||||
|
Sample.INSTANCE.play(Assets.SND_CURSED);
|
||||||
|
|
||||||
item.cursed = true;
|
item.cursed = true;
|
||||||
if (item instanceof MeleeWeapon || item instanceof Boomerang) {
|
if (item instanceof MeleeWeapon || item instanceof Boomerang) {
|
||||||
|
|
|
@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
@ -43,6 +44,7 @@ public class FeatherFall extends Spell {
|
||||||
Buff.append(hero, FeatherBuff.class, 30f);
|
Buff.append(hero, FeatherBuff.class, 30f);
|
||||||
hero.sprite.operate(hero.pos);
|
hero.sprite.operate(hero.pos);
|
||||||
Sample.INSTANCE.play(Assets.SND_READ );
|
Sample.INSTANCE.play(Assets.SND_READ );
|
||||||
|
hero.sprite.emitter().burst( Speck.factory( Speck.JET ), 20);
|
||||||
|
|
||||||
GLog.p(Messages.get(this, "light"));
|
GLog.p(Messages.get(this, "light"));
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,6 @@ public class MagicalPorter extends InventorySpell {
|
||||||
}
|
}
|
||||||
ported.add(result);
|
ported.add(result);
|
||||||
|
|
||||||
//TODO vfx
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -21,18 +21,22 @@
|
||||||
|
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
package com.shatteredpixel.shatteredpixeldungeon.items.spells;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ArtifactRecharge;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ArtifactRecharge;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Lightning;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
|
||||||
public class ReclaimTrap extends TargetedSpell {
|
public class ReclaimTrap extends TargetedSpell {
|
||||||
|
|
||||||
|
@ -47,8 +51,11 @@ public class ReclaimTrap extends TargetedSpell {
|
||||||
if (!t.visible) t.reveal();
|
if (!t.visible) t.reveal();
|
||||||
t.disarm();
|
t.disarm();
|
||||||
|
|
||||||
|
Sample.INSTANCE.play( Assets.SND_LIGHTNING );
|
||||||
|
hero.sprite.parent.addToFront( new Lightning(DungeonTilemap.tileCenterToWorld(t.pos), hero.sprite.center(), null) );
|
||||||
|
|
||||||
ScrollOfRecharging.charge(hero);
|
ScrollOfRecharging.charge(hero);
|
||||||
Buff.affect(hero, Recharging.class, 15f);
|
Buff.prolong(hero, Recharging.class, 15f);
|
||||||
Buff.affect(hero, ArtifactRecharge.class).set( 15 );
|
Buff.affect(hero, ArtifactRecharge.class).set( 15 );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -67,8 +67,8 @@ public class ItemSpriteSheet {
|
||||||
assignItemRect(SEED_HOLDER, 10, 10);
|
assignItemRect(SEED_HOLDER, 10, 10);
|
||||||
assignItemRect(SCROLL_HOLDER, 15, 14);
|
assignItemRect(SCROLL_HOLDER, 15, 14);
|
||||||
assignItemRect(STONE_HOLDER, 14, 12);
|
assignItemRect(STONE_HOLDER, 14, 12);
|
||||||
assignItemRect(BREW_HOLDER, 10, 14);
|
assignItemRect(BREW_HOLDER, 12, 14);
|
||||||
assignItemRect(ELIXIR_HOLDER, 10, 14);
|
assignItemRect(ELIXIR_HOLDER, 12, 14);
|
||||||
assignItemRect(SPELL_HOLDER, 8, 16);
|
assignItemRect(SPELL_HOLDER, 8, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,14 +543,14 @@ public class ItemSpriteSheet {
|
||||||
public static final int ELIXIR_SURGE = ELIXIRS+6;
|
public static final int ELIXIR_SURGE = ELIXIRS+6;
|
||||||
public static final int ELIXIR_HONEY = ELIXIRS+7;
|
public static final int ELIXIR_HONEY = ELIXIRS+7;
|
||||||
static{
|
static{
|
||||||
assignItemRect(ELIXIR_DRAGON, 10, 14);
|
assignItemRect(ELIXIR_DRAGON, 12, 14);
|
||||||
assignItemRect(ELIXIR_TOXIC, 10, 14);
|
assignItemRect(ELIXIR_TOXIC, 12, 14);
|
||||||
assignItemRect(ELIXIR_ICY, 10, 14);
|
assignItemRect(ELIXIR_ICY, 12, 14);
|
||||||
assignItemRect(ELIXIR_MIGHT, 10, 14);
|
assignItemRect(ELIXIR_MIGHT, 12, 14);
|
||||||
assignItemRect(ELIXIR_AQUA, 10, 14);
|
assignItemRect(ELIXIR_AQUA, 12, 14);
|
||||||
assignItemRect(ELIXIR_RESTO, 10, 14);
|
assignItemRect(ELIXIR_RESTO, 12, 14);
|
||||||
assignItemRect(ELIXIR_SURGE, 10, 14);
|
assignItemRect(ELIXIR_SURGE, 12, 14);
|
||||||
assignItemRect(ELIXIR_HONEY, 10, 14);
|
assignItemRect(ELIXIR_HONEY, 12, 14);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int BREWS = xy(1, 26); //16 slots
|
private static final int BREWS = xy(1, 26); //16 slots
|
||||||
|
@ -563,14 +563,14 @@ public class ItemSpriteSheet {
|
||||||
public static final int BREW_BLIZZARD = BREWS+6;
|
public static final int BREW_BLIZZARD = BREWS+6;
|
||||||
public static final int BREW_SHOCKING = BREWS+7;
|
public static final int BREW_SHOCKING = BREWS+7;
|
||||||
static{
|
static{
|
||||||
assignItemRect(BREW_WICKED, 10, 14);
|
assignItemRect(BREW_WICKED, 12, 14);
|
||||||
assignItemRect(BREW_FRIGID, 10, 14);
|
assignItemRect(BREW_FRIGID, 12, 14);
|
||||||
assignItemRect(BREW_FROSTFIRE, 10, 14);
|
assignItemRect(BREW_FROSTFIRE, 12, 14);
|
||||||
|
|
||||||
assignItemRect(BREW_CAUSTIC, 10, 14);
|
assignItemRect(BREW_CAUSTIC, 12, 14);
|
||||||
assignItemRect(BREW_INFERNAL, 10, 14);
|
assignItemRect(BREW_INFERNAL, 12, 14);
|
||||||
assignItemRect(BREW_BLIZZARD, 10, 14);
|
assignItemRect(BREW_BLIZZARD, 12, 14);
|
||||||
assignItemRect(BREW_SHOCKING, 10, 14);
|
assignItemRect(BREW_SHOCKING, 12, 14);
|
||||||
}
|
}
|
||||||
//sprites still pretty WIP
|
//sprites still pretty WIP
|
||||||
private static final int SPELLS = xy(1, 27); //16 slots
|
private static final int SPELLS = xy(1, 27); //16 slots
|
||||||
|
|
|
@ -347,12 +347,12 @@ public class QuickRecipe extends Component {
|
||||||
result.add(new QuickRecipe(new WickedBrew.Recipe()));
|
result.add(new QuickRecipe(new WickedBrew.Recipe()));
|
||||||
result.add(new QuickRecipe(new FrigidBrew.Recipe()));
|
result.add(new QuickRecipe(new FrigidBrew.Recipe()));
|
||||||
result.add(new QuickRecipe(new FrostfireBrew.Recipe()));
|
result.add(new QuickRecipe(new FrostfireBrew.Recipe()));
|
||||||
result.add(new QuickRecipe(new CausticBrew.Recipe()));
|
|
||||||
result.add(null);
|
result.add(null);
|
||||||
result.add(null);
|
result.add(null);
|
||||||
result.add(new QuickRecipe(new InfernalBrew.Recipe()));
|
result.add(new QuickRecipe(new InfernalBrew.Recipe()));
|
||||||
result.add(new QuickRecipe(new BlizzardBrew.Recipe()));
|
result.add(new QuickRecipe(new BlizzardBrew.Recipe()));
|
||||||
result.add(new QuickRecipe(new ShockingBrew.Recipe()));
|
result.add(new QuickRecipe(new ShockingBrew.Recipe()));
|
||||||
|
result.add(new QuickRecipe(new CausticBrew.Recipe()));
|
||||||
return result;
|
return result;
|
||||||
case 8:
|
case 8:
|
||||||
result.add(new QuickRecipe(new ElixirOfRestoration.Recipe()));
|
result.add(new QuickRecipe(new ElixirOfRestoration.Recipe()));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user