Merge branch 'v0.2.1' of https://github.com/00-Evan/shattered-pixel-dungeon
Changes in v0.2.1c Conflicts: src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java Additionally: Improved challenge characteristics (now armor challenge removes the reward menu button, rather than giving cloth armor)
This commit is contained in:
commit
1592ceb6d8
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.shatteredpixel.shatteredpixeldungeon"
|
package="com.shatteredpixel.shatteredpixeldungeon"
|
||||||
android:versionCode="11"
|
android:versionCode="12"
|
||||||
android:versionName="0.2.1b"
|
android:versionName="0.2.1c"
|
||||||
android:installLocation="auto">
|
android:installLocation="auto">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
|
|
|
@ -23,13 +23,12 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||||
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.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||||
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
public class Ooze extends Buff {
|
public class Ooze extends Buff {
|
||||||
|
|
||||||
private static final String TXT_HERO_KILLED = "%s killed you...";
|
private static final String TXT_HERO_KILLED = "%s killed you...";
|
||||||
|
|
||||||
public int damage = 1;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int icon() {
|
public int icon() {
|
||||||
return BuffIndicator.OOZE;
|
return BuffIndicator.OOZE;
|
||||||
|
@ -43,7 +42,10 @@ public class Ooze extends Buff {
|
||||||
@Override
|
@Override
|
||||||
public boolean act() {
|
public boolean act() {
|
||||||
if (target.isAlive()) {
|
if (target.isAlive()) {
|
||||||
target.damage( damage, this );
|
if (Dungeon.depth > 4)
|
||||||
|
target.damage( Dungeon.depth/5, this );
|
||||||
|
else if (Random.Int(2) == 0)
|
||||||
|
target.damage( 1, this );
|
||||||
if (!target.isAlive() && target == Dungeon.hero) {
|
if (!target.isAlive() && target == Dungeon.hero) {
|
||||||
Dungeon.fail( Utils.format( ResultDescriptions.OOZE, Dungeon.depth ) );
|
Dungeon.fail( Utils.format( ResultDescriptions.OOZE, Dungeon.depth ) );
|
||||||
GLog.n( TXT_HERO_KILLED, toString() );
|
GLog.n( TXT_HERO_KILLED, toString() );
|
||||||
|
|
|
@ -155,10 +155,9 @@ public class Goo extends Mob {
|
||||||
|
|
||||||
((GooSprite)sprite).pumpUp();
|
((GooSprite)sprite).pumpUp();
|
||||||
|
|
||||||
for (int i=0; i < Level.NEIGHBOURS9DIST2.length; i++) {
|
for (int i=0; i < Level.NEIGHBOURS9.length; i++) {
|
||||||
int j = pos + Level.NEIGHBOURS9DIST2[i];
|
int j = pos + Level.NEIGHBOURS9[i];
|
||||||
if (j >=0 && j <= 1023 && Level.passable[j])
|
GameScene.add( Blob.seed( j , 2, GooWarn.class ));
|
||||||
GameScene.add( Blob.seed( j , 2, GooWarn.class ));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,52 +17,54 @@
|
||||||
*/
|
*/
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StenchGas;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Gnoll;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Rat;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.RatSkull;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.CurareDart;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.LightningTrap;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.*;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|
||||||
import com.watabou.noosa.audio.Sample;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Journal;
|
import com.shatteredpixel.shatteredpixeldungeon.Journal;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StenchGas;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Crab;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Gnoll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Rat;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||||
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.food.MysteryMeat;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.RatSkull;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.CurareDart;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.LightningTrap;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.FetidRatSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.GnollTricksterSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.GreatCrabSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost;
|
||||||
|
import com.watabou.noosa.audio.Sample;
|
||||||
import com.watabou.utils.Bundle;
|
import com.watabou.utils.Bundle;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class Ghost extends NPC {
|
public class Ghost extends NPC {
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -79,30 +81,33 @@ public class Ghost extends NPC {
|
||||||
"But I was slain by a foul beast... I can't leave this place... Not until I have my revenge... " +
|
"But I was slain by a foul beast... I can't leave this place... Not until I have my revenge... " +
|
||||||
"Slay the _fetid rat_, that has taken my life...\n\n" +
|
"Slay the _fetid rat_, that has taken my life...\n\n" +
|
||||||
"It stalks this floor... Spreading filth everywhere... " +
|
"It stalks this floor... Spreading filth everywhere... " +
|
||||||
"Beware its cloud of stink and acidic bite... ";
|
"_Beware its cloud of stink and corrosive bite, the acid dissolves in water..._ ";
|
||||||
|
|
||||||
private static final String TXT_RAT2 =
|
private static final String TXT_RAT2 =
|
||||||
"Please... Help me... Slay the abomination...";
|
"Please... Help me... Slay the abomination...\n\n" +
|
||||||
|
"_Fight it near water... Avoid the stench..._";
|
||||||
|
|
||||||
private static final String TXT_GNOLL1 =
|
private static final String TXT_GNOLL1 =
|
||||||
"Hello adventurer... Once I was like you - strong and confident... " +
|
"Hello adventurer... Once I was like you - strong and confident... " +
|
||||||
"But I was slain by a devious foe... I can't leave this place... Not until I have my revenge... " +
|
"But I was slain by a devious foe... I can't leave this place... Not until I have my revenge... " +
|
||||||
"Slay the _gnoll trickster_, that has taken my life...\n\n" +
|
"Slay the _gnoll trickster_, that has taken my life...\n\n" +
|
||||||
"It is not like the other gnolls... It hides and uses thrown weapons... " +
|
"It is not like the other gnolls... It hides and uses thrown weapons... " +
|
||||||
"Beware its poisonous and incendiary darts... ";
|
"_Beware its poisonous and incendiary darts, don't attack from a distance..._";
|
||||||
|
|
||||||
private static final String TXT_GNOLL2 =
|
private static final String TXT_GNOLL2 =
|
||||||
"Please... Help me... Slay the trickster...";
|
"Please... Help me... Slay the trickster...\n\n" +
|
||||||
|
"_Don't let it hit you... Get near to it..._";
|
||||||
|
|
||||||
private static final String TXT_CRAB1 =
|
private static final String TXT_CRAB1 =
|
||||||
"Hello adventurer... Once I was like you - strong and confident... " +
|
"Hello adventurer... Once I was like you - strong and confident... " +
|
||||||
"But I was slain by an ancient creature... I can't leave this place... Not until I have my revenge... " +
|
"But I was slain by an ancient creature... I can't leave this place... Not until I have my revenge... " +
|
||||||
"Slay the _great crab_, that has taken my life...\n\n" +
|
"Slay the _great crab_, that has taken my life...\n\n" +
|
||||||
"It is unnaturally old... With a massive single claw and a thick shell... " +
|
"It is unnaturally old... With a massive single claw and a thick shell... " +
|
||||||
"Beware its claw, the crab blocks and strikes with it...";
|
"_Beware its claw, you must surprise the crab or it will block with it..._";
|
||||||
|
|
||||||
private static final String TXT_CRAB2 =
|
private static final String TXT_CRAB2 =
|
||||||
"Please... Help me... Slay the abomination...";
|
"Please... Help me... Slay the Crustacean...\n\n" +
|
||||||
|
"_It will always block... When it sees you coming..._";
|
||||||
|
|
||||||
public Ghost() {
|
public Ghost() {
|
||||||
super();
|
super();
|
||||||
|
@ -388,7 +393,7 @@ public class Ghost extends NPC {
|
||||||
spriteClass = FetidRatSprite.class;
|
spriteClass = FetidRatSprite.class;
|
||||||
|
|
||||||
HP = HT = 20;
|
HP = HT = 20;
|
||||||
defenseSkill = 4;
|
defenseSkill = 5;
|
||||||
|
|
||||||
EXP = 4;
|
EXP = 4;
|
||||||
|
|
||||||
|
@ -407,7 +412,7 @@ public class Ghost extends NPC {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int attackProc( Char enemy, int damage ) {
|
public int attackProc( Char enemy, int damage ) {
|
||||||
if (Random.Int( 2 ) == 0) {
|
if (Random.Int( 3 ) == 0) {
|
||||||
Buff.affect(enemy, Ooze.class);
|
Buff.affect(enemy, Ooze.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,8 +452,8 @@ public class Ghost extends NPC {
|
||||||
name = "gnoll trickster";
|
name = "gnoll trickster";
|
||||||
spriteClass = GnollTricksterSprite.class;
|
spriteClass = GnollTricksterSprite.class;
|
||||||
|
|
||||||
HP = HT = 25;
|
HP = HT = 20;
|
||||||
defenseSkill = 4;
|
defenseSkill = 5;
|
||||||
|
|
||||||
EXP = 5;
|
EXP = 5;
|
||||||
|
|
||||||
|
@ -505,37 +510,6 @@ public class Ghost extends NPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
//If the gnoll is hit below half, he teleports away to escape!
|
|
||||||
public void damage( int dmg, Object src ){
|
|
||||||
if (HP > 12 && (HP - dmg) <= 12){
|
|
||||||
int count = 10;
|
|
||||||
int pos;
|
|
||||||
|
|
||||||
do {
|
|
||||||
pos = Dungeon.level.randomRespawnCell();
|
|
||||||
if (count-- <= 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (pos == -1);
|
|
||||||
|
|
||||||
if (pos != -1) {
|
|
||||||
|
|
||||||
CellEmitter.get( this.pos ).burst( Speck.factory( Speck.WOOL ), 6 );
|
|
||||||
Sample.INSTANCE.play( Assets.SND_PUFF );
|
|
||||||
|
|
||||||
this.pos = pos;
|
|
||||||
sprite.place( pos );
|
|
||||||
sprite.visible = Dungeon.visible[pos];
|
|
||||||
|
|
||||||
GLog.w("The gnoll trickster blinks away!");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.damage(dmg, src);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void die( Object cause ) {
|
public void die( Object cause ) {
|
||||||
super.die( cause );
|
super.die( cause );
|
||||||
|
@ -576,7 +550,7 @@ public class Ghost extends NPC {
|
||||||
name = "great crab";
|
name = "great crab";
|
||||||
spriteClass = GreatCrabSprite.class;
|
spriteClass = GreatCrabSprite.class;
|
||||||
|
|
||||||
HP = HT = 40;
|
HP = HT = 30;
|
||||||
defenseSkill = 0; //see damage()
|
defenseSkill = 0; //see damage()
|
||||||
baseSpeed = 1f;
|
baseSpeed = 1f;
|
||||||
|
|
||||||
|
@ -587,24 +561,9 @@ public class Ghost extends NPC {
|
||||||
|
|
||||||
private boolean moving = true;
|
private boolean moving = true;
|
||||||
|
|
||||||
@Override
|
|
||||||
public int damageRoll() {
|
|
||||||
return Random.NormalIntRange( 4, 6 );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int attackSkill( Char target ) {
|
|
||||||
return 13;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int dr() {
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean getCloser( int target ) {
|
protected boolean getCloser( int target ) {
|
||||||
//this is used such that the crab remains slow, but still detects the player at the expected rate.
|
//this is used so that the crab remains slow, but still detects the player at the expected rate.
|
||||||
if (moving) {
|
if (moving) {
|
||||||
moving = false;
|
moving = false;
|
||||||
return super.getCloser( target );
|
return super.getCloser( target );
|
||||||
|
@ -620,7 +579,7 @@ public class Ghost extends NPC {
|
||||||
//crab blocks all attacks originating from the hero or enemy characters or traps if it is alerted.
|
//crab blocks all attacks originating from the hero or enemy characters or traps if it is alerted.
|
||||||
//All direct damage from these sources is negated, no exceptions. blob/debuff effects go through as normal.
|
//All direct damage from these sources is negated, no exceptions. blob/debuff effects go through as normal.
|
||||||
if (enemySeen && (src instanceof Wand || src instanceof LightningTrap.Electricity || src instanceof Char)){
|
if (enemySeen && (src instanceof Wand || src instanceof LightningTrap.Electricity || src instanceof Char)){
|
||||||
GLog.w("The crab notices the attack and blocks with its massive claw.");
|
GLog.n("The crab notices the attack and blocks with its massive claw.");
|
||||||
sprite.showStatus( CharSprite.NEUTRAL, "blocked" );
|
sprite.showStatus( CharSprite.NEUTRAL, "blocked" );
|
||||||
} else {
|
} else {
|
||||||
super.damage( dmg, src );
|
super.damage( dmg, src );
|
||||||
|
|
|
@ -39,10 +39,11 @@ public class WelcomeScene extends PixelScene {
|
||||||
"variety in the early stages of the game.";
|
"variety in the early stages of the game.";
|
||||||
|
|
||||||
private static final String TXT_SameVer =
|
private static final String TXT_SameVer =
|
||||||
"v0.2.1a was a hotfix patch to correct a serious issue with floor 5.\n\n" +
|
"v0.2.1c is a balance patch, all the new quest bosses have been made less punishing and it has been made more clear how to counter them. " +
|
||||||
"v0.2.1b corrects several less severe issues, including a bug with the Wandmaker quest and minor visual bugs. " +
|
"Players still need to understand how to beat them, but they should no longer be as crushingly tough, good luck!\n\n" +
|
||||||
"The Gnoll trickster boss has been made just a little less punishing as well.\n\n\n" +
|
"v0.2.1b corrected several less severe issues, including a bug with the Wandmaker quest and minor visual bugs. " +
|
||||||
"If you're still having issues please let me know!";
|
"The Gnoll trickster boss has been made just a little less punishing as well.\n\n" +
|
||||||
|
"v0.2.1a was a hotfix patch to correct a serious issue with floor 5.";
|
||||||
|
|
||||||
private static final String TXT_Future =
|
private static final String TXT_Future =
|
||||||
"It seems that your current saves are from a future version of Shattered Pixel Dungeon.\n\n"+
|
"It seems that your current saves are from a future version of Shattered Pixel Dungeon.\n\n"+
|
||||||
|
|
Loading…
Reference in New Issue
Block a user