v0.3.0: removed now unusued wands (mostly)
This commit is contained in:
@@ -38,16 +38,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CorpseDust;
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CorpseDust;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAmok;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfAvalanche;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlink;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfDisintegration;
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfDisintegration;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfFireblast;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLightning;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfPoison;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfSlowness;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfTelekinesis;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonLevel;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonLevel;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Room;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Room;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||||
@@ -229,43 +221,12 @@ public class Wandmaker extends NPC {
|
|||||||
alternative = Random.Int( 2 ) == 0;
|
alternative = Random.Int( 2 ) == 0;
|
||||||
|
|
||||||
given = false;
|
given = false;
|
||||||
|
//TODO: implement new logic
|
||||||
switch (Random.Int( 5 )) {
|
wand1 = new WandOfDisintegration();
|
||||||
case 0:
|
|
||||||
wand1 = new WandOfAvalanche();
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
wand1 = new WandOfDisintegration();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
wand1 = new WandOfFireblast();
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
wand1 = new WandOfLightning();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
wand1 = new WandOfPoison();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
wand1.random().upgrade();
|
wand1.random().upgrade();
|
||||||
|
|
||||||
switch (Random.Int( 5 )) {
|
|
||||||
case 0:
|
wand2 = new WandOfRegrowth();
|
||||||
wand2 = new WandOfAmok();
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
wand2 = new WandOfBlink();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
wand2 = new WandOfRegrowth();
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
wand2 = new WandOfSlowness();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
wand2 = new WandOfTelekinesis();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
wand2.random().upgrade();
|
wand2.random().upgrade();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Pixel Dungeon
|
|
||||||
* Copyright (C) 2012-2014 Oleg Dolya
|
|
||||||
*
|
|
||||||
* 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.items.wands;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Amok;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
|
|
||||||
public class WandOfAmok extends Wand {
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Amok";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt) {
|
|
||||||
Char ch = Actor.findChar( bolt.collisionPos );
|
|
||||||
if (ch != null) {
|
|
||||||
|
|
||||||
if (ch == Dungeon.hero) {
|
|
||||||
Buff.affect( ch, Vertigo.class, Vertigo.duration(ch) );
|
|
||||||
} else {
|
|
||||||
Buff.affect( ch, Amok.class, 3f + level() );
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
GLog.i( "nothing happened" );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.purpleLight( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"The purple light from this wand will make the target run amok " +
|
|
||||||
"attacking random creatures in its vicinity.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Pixel Dungeon
|
|
||||||
* Copyright (C) 2012-2014 Oleg Dolya
|
|
||||||
*
|
|
||||||
* 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.items.wands;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
|
||||||
import com.watabou.noosa.Camera;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
|
|
||||||
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.Paralysis;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
import com.watabou.utils.PathFinder;
|
|
||||||
import com.watabou.utils.Random;
|
|
||||||
|
|
||||||
public class WandOfAvalanche extends Wand {
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Avalanche";
|
|
||||||
image = ItemSpriteSheet.WAND_LIVING_EARTH;
|
|
||||||
|
|
||||||
collisionProperties = Ballistica.STOP_TERRAIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt ) {
|
|
||||||
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ROCKS );
|
|
||||||
|
|
||||||
int level = level();
|
|
||||||
|
|
||||||
int size = 1 + level / 3;
|
|
||||||
PathFinder.buildDistanceMap( bolt.collisionPos, BArray.not( Level.solid, null ), size );
|
|
||||||
|
|
||||||
for (int i=0; i < Level.LENGTH; i++) {
|
|
||||||
|
|
||||||
int d = PathFinder.distance[i];
|
|
||||||
|
|
||||||
if (d < Integer.MAX_VALUE) {
|
|
||||||
|
|
||||||
Char ch = Actor.findChar( i );
|
|
||||||
if (ch != null) {
|
|
||||||
|
|
||||||
ch.sprite.flash();
|
|
||||||
|
|
||||||
ch.damage( Random.Int( 2, 6 + (size - d) * 2 ), this );
|
|
||||||
|
|
||||||
if (ch.isAlive() && Random.Int( 2 + d ) == 0) {
|
|
||||||
Buff.prolong( ch, Paralysis.class, Random.IntRange( 2, 6 ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CellEmitter.get( i ).start( Speck.factory( Speck.ROCK ), 0.07f, 3 + (size - d) );
|
|
||||||
Camera.main.shake( 3, 0.07f * (3 + (size - d)) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!curUser.isAlive()) {
|
|
||||||
Dungeon.fail( Utils.format( ResultDescriptions.ITEM, name ) );
|
|
||||||
GLog.n( "You killed yourself with your own Wand of Avalanche..." );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.earth( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"When a discharge of this wand hits a wall (or any other solid obstacle) it causes " +
|
|
||||||
"an avalanche of stones, damaging and stunning all creatures in the affected area.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -17,53 +17,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.wands;
|
package com.shatteredpixel.shatteredpixeldungeon.items.wands;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
import com.watabou.noosa.tweeners.AlphaTweener;
|
import com.watabou.noosa.tweeners.AlphaTweener;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
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.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
|
|
||||||
public class WandOfBlink extends Wand {
|
//TODO: pull visual logic out of here to another place, then remove
|
||||||
|
public abstract class WandOfBlink extends Wand {
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Blink";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt ) {
|
|
||||||
|
|
||||||
int level = level();
|
|
||||||
|
|
||||||
//TODO: don't care about this atm as this wand is marked for death, should correct this logic if I end up keeping it.
|
|
||||||
/*if (Ballistica.distance > level + 4) {
|
|
||||||
cell = Ballistica.trace[level + 3];
|
|
||||||
} else if (Actor.findChar( cell ) != null && Ballistica.distance > 1) {
|
|
||||||
cell = Ballistica.trace[Ballistica.distance - 2];
|
|
||||||
}*/
|
|
||||||
|
|
||||||
curUser.sprite.visible = true;
|
|
||||||
appear( Dungeon.hero, bolt.collisionPos );
|
|
||||||
Dungeon.observe();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.whiteLight( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
curUser.sprite.visible = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void appear( Char ch, int pos ) {
|
public static void appear( Char ch, int pos ) {
|
||||||
|
|
||||||
ch.sprite.interruptMotion();
|
ch.sprite.interruptMotion();
|
||||||
@@ -79,11 +41,4 @@ public class WandOfBlink extends Wand {
|
|||||||
ch.sprite.emitter().start( Speck.factory( Speck.LIGHT ), 0.2f, 3 );
|
ch.sprite.emitter().start( Speck.factory( Speck.LIGHT ), 0.2f, 3 );
|
||||||
Sample.INSTANCE.play( Assets.SND_TELEPORT );
|
Sample.INSTANCE.play( Assets.SND_TELEPORT );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"This wand will allow you to teleport in the chosen direction. " +
|
|
||||||
"Creatures and inanimate obstructions will block the teleportation.";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,83 +36,8 @@ import com.watabou.utils.Callback;
|
|||||||
import com.watabou.utils.PathFinder;
|
import com.watabou.utils.PathFinder;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
public class WandOfFlock extends Wand {
|
//TODO: pull sheep out of here, and delete
|
||||||
|
public abstract class WandOfFlock extends Wand {
|
||||||
{
|
|
||||||
name = "Wand of Flock";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt ) {
|
|
||||||
|
|
||||||
int level = level();
|
|
||||||
|
|
||||||
int n = level + 2;
|
|
||||||
|
|
||||||
//TODO: don't care about this atm as this wand is marked for death, should correct this logic if I end up keeping it
|
|
||||||
/**
|
|
||||||
if (Actor.findChar( cell ) != null && Ballistica.distance > 2) {
|
|
||||||
cell = Ballistica.trace[Ballistica.distance - 2];
|
|
||||||
}*/
|
|
||||||
|
|
||||||
boolean[] passable = BArray.or( Level.passable, Level.avoid, null );
|
|
||||||
for (Actor actor : Actor.all()) {
|
|
||||||
if (actor instanceof Char) {
|
|
||||||
passable[((Char)actor).pos] = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int cell = bolt.collisionPos;
|
|
||||||
|
|
||||||
PathFinder.buildDistanceMap( cell, passable, n );
|
|
||||||
int dist = 0;
|
|
||||||
|
|
||||||
if (Actor.findChar( cell ) != null) {
|
|
||||||
PathFinder.distance[cell] = Integer.MAX_VALUE;
|
|
||||||
dist = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
float lifespan = level + 3;
|
|
||||||
|
|
||||||
sheepLabel:
|
|
||||||
for (int i=0; i < n; i++) {
|
|
||||||
do {
|
|
||||||
for (int j=0; j < Level.LENGTH; j++) {
|
|
||||||
if (PathFinder.distance[j] == dist) {
|
|
||||||
|
|
||||||
Sheep sheep = new Sheep();
|
|
||||||
sheep.lifespan = lifespan;
|
|
||||||
sheep.pos = j;
|
|
||||||
GameScene.add( sheep );
|
|
||||||
Dungeon.level.mobPress( sheep );
|
|
||||||
|
|
||||||
CellEmitter.get( j ).burst( Speck.factory( Speck.WOOL ), 4 );
|
|
||||||
|
|
||||||
PathFinder.distance[j] = Integer.MAX_VALUE;
|
|
||||||
|
|
||||||
continue sheepLabel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dist++;
|
|
||||||
} while (dist < n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void fx( int cell, Callback callback ) {
|
|
||||||
MagicMissile.wool( curUser.sprite.parent, curUser.pos, cell, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"A flick of this wand summons a flock of magic sheep, creating temporary impenetrable obstacle.";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Sheep extends NPC {
|
public static class Sheep extends NPC {
|
||||||
|
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
* Pixel Dungeon
|
|
||||||
* Copyright (C) 2012-2014 Oleg Dolya
|
|
||||||
*
|
|
||||||
* 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.items.wands;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|
||||||
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.Poison;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
|
|
||||||
public class WandOfPoison extends Wand {
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Poison";
|
|
||||||
image = ItemSpriteSheet.WAND_VENOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt ) {
|
|
||||||
Char ch = Actor.findChar( bolt.collisionPos );
|
|
||||||
if (ch != null) {
|
|
||||||
|
|
||||||
Buff.affect( ch, Poison.class ).set( Poison.durationFactor( ch ) * (5 + level()) );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
GLog.i( "nothing happened" );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.poison( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"The vile blast of this twisted bit of wood will imbue its target " +
|
|
||||||
"with a deadly venom. A creature that is poisoned will suffer periodic " +
|
|
||||||
"damage until the effect ends. The duration of the effect increases " +
|
|
||||||
"with the level of the staff.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
* Pixel Dungeon
|
|
||||||
* Copyright (C) 2012-2014 Oleg Dolya
|
|
||||||
*
|
|
||||||
* 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.items.wands;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|
||||||
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.Slow;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
|
|
||||||
public class WandOfSlowness extends Wand {
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Slowness";
|
|
||||||
image = ItemSpriteSheet.WAND_FROST;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt) {
|
|
||||||
Char ch = Actor.findChar( bolt.collisionPos );
|
|
||||||
if (ch != null) {
|
|
||||||
|
|
||||||
Buff.affect( ch, Slow.class, Slow.duration( ch ) / 3 + level() );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
GLog.i( "nothing happened" );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.slowness( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"This wand will cause a creature to move and attack " +
|
|
||||||
"at half its ordinary speed until the effect ends";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
/*
|
|
||||||
* Pixel Dungeon
|
|
||||||
* Copyright (C) 2012-2014 Oleg Dolya
|
|
||||||
*
|
|
||||||
* 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.items.wands;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap.Type;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
|
|
||||||
public class WandOfTelekinesis extends Wand {
|
|
||||||
|
|
||||||
private static final String TXT_YOU_NOW_HAVE = "You have magically transported %s into your backpack";
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Telekinesis";
|
|
||||||
image = ItemSpriteSheet.WAND_BLAST_WAVE;
|
|
||||||
|
|
||||||
collisionProperties = Ballistica.STOP_TERRAIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt ) {
|
|
||||||
|
|
||||||
//TODO: this whole wand is getting reworked anyway, so screw trying to correct this logic, just rewrite.
|
|
||||||
/*
|
|
||||||
boolean mapUpdated = false;
|
|
||||||
|
|
||||||
int maxDistance = level() + 4;
|
|
||||||
Ballistica.distance = Math.min( Ballistica.distance, maxDistance );
|
|
||||||
|
|
||||||
Char ch;
|
|
||||||
Heap heap = null;
|
|
||||||
|
|
||||||
for (int i=1; i < Ballistica.distance; i++) {
|
|
||||||
|
|
||||||
int c = Ballistica.trace[i];
|
|
||||||
|
|
||||||
int before = Dungeon.level.map[c];
|
|
||||||
|
|
||||||
if ((ch = Actor.findChar( c )) != null) {
|
|
||||||
|
|
||||||
if (i == Ballistica.distance-1) {
|
|
||||||
|
|
||||||
ch.damage( maxDistance-1 - i, this );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
int next = Ballistica.trace[i + 1];
|
|
||||||
if ((Level.passable[next] || Level.avoid[next]) && Actor.findChar( next ) == null) {
|
|
||||||
|
|
||||||
Actor.addDelayed( new Pushing( ch, ch.pos, next ), -1 );
|
|
||||||
|
|
||||||
ch.pos = next;
|
|
||||||
Actor.freeCell( next );
|
|
||||||
|
|
||||||
if (ch instanceof Shopkeeper)
|
|
||||||
ch.damage( 0, this );
|
|
||||||
|
|
||||||
// FIXME
|
|
||||||
if (ch instanceof Mob) {
|
|
||||||
Dungeon.level.mobPress( (Mob)ch );
|
|
||||||
} else {
|
|
||||||
Dungeon.level.press( ch.pos, ch );
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
ch.damage( maxDistance-1 - i, this );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (heap == null && (heap = Dungeon.level.heaps.get( c )) != null) {
|
|
||||||
switch (heap.type) {
|
|
||||||
case HEAP:
|
|
||||||
transport( heap );
|
|
||||||
break;
|
|
||||||
case CHEST:
|
|
||||||
open( heap );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Dungeon.level.press( c, null );
|
|
||||||
if (before == Terrain.OPEN_DOOR && Actor.findChar( c ) == null) {
|
|
||||||
|
|
||||||
Level.set( c, Terrain.DOOR );
|
|
||||||
GameScene.updateMap( c );
|
|
||||||
|
|
||||||
} else if (Level.water[c]) {
|
|
||||||
|
|
||||||
GameScene.ripple( c );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mapUpdated && Dungeon.level.map[c] != before) {
|
|
||||||
mapUpdated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mapUpdated) {
|
|
||||||
Dungeon.observe();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void transport( Heap heap ) {
|
|
||||||
Item item = heap.pickUp();
|
|
||||||
if (item.doPickUp( curUser )) {
|
|
||||||
|
|
||||||
if (item instanceof Dewdrop) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if ((item instanceof ScrollOfUpgrade && ((ScrollOfUpgrade)item).isKnown()) ||
|
|
||||||
(item instanceof PotionOfStrength && ((PotionOfStrength)item).isKnown())) {
|
|
||||||
GLog.p( TXT_YOU_NOW_HAVE, item.name() );
|
|
||||||
} else {
|
|
||||||
GLog.i( TXT_YOU_NOW_HAVE, item.name() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
Dungeon.level.drop( item, curUser.pos ).sprite.drop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void open( Heap heap ) {
|
|
||||||
heap.type = Type.HEAP;
|
|
||||||
heap.sprite.link();
|
|
||||||
heap.sprite.drop();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.force( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"Waves of magic force from this wand will affect all cells on their way triggering traps, trampling high vegetation, " +
|
|
||||||
"opening closed doors and closing open ones. They also push back monsters.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
/*
|
|
||||||
* Pixel Dungeon
|
|
||||||
* Copyright (C) 2012-2014 Oleg Dolya
|
|
||||||
*
|
|
||||||
* 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.items.wands;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
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.effects.MagicMissile;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.watabou.utils.Callback;
|
|
||||||
|
|
||||||
public class WandOfTeleportation extends Wand {
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "Wand of Teleportation";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onZap( Ballistica bolt ) {
|
|
||||||
|
|
||||||
Char ch = Actor.findChar( bolt.collisionPos );
|
|
||||||
|
|
||||||
if (ch == curUser) {
|
|
||||||
|
|
||||||
ScrollOfTeleportation.teleportHero( curUser );
|
|
||||||
|
|
||||||
} else if (ch != null && !(ch instanceof NPC)) {
|
|
||||||
|
|
||||||
int count = 10;
|
|
||||||
int pos;
|
|
||||||
do {
|
|
||||||
pos = Dungeon.level.randomRespawnCell();
|
|
||||||
if (count-- <= 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (pos == -1);
|
|
||||||
|
|
||||||
if (pos == -1) {
|
|
||||||
|
|
||||||
GLog.w( ScrollOfTeleportation.TXT_NO_TELEPORT );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
ch.pos = pos;
|
|
||||||
ch.sprite.place( ch.pos );
|
|
||||||
ch.sprite.visible = Dungeon.visible[pos];
|
|
||||||
GLog.i( curUser.name + " teleported " + ch.name + " to somewhere" );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
GLog.i( "nothing happened" );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void fx( Ballistica bolt, Callback callback ) {
|
|
||||||
MagicMissile.coldLight( curUser.sprite.parent, bolt.sourcePos, bolt.collisionPos, callback );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_ZAP );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String desc() {
|
|
||||||
return
|
|
||||||
"A blast from this wand will teleport a creature against " +
|
|
||||||
"its will to a random place on the current level.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user