From 2faaa4b865bad120246c1bbe36304cc6ae3cfaf4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 17 Oct 2014 14:47:14 -0400 Subject: [PATCH 1/4] V0.2.1c: Tentative rebalance to sewer quest bosses --- .../actors/mobs/npcs/Ghost.java | 100 +++++------------- 1 file changed, 29 insertions(+), 71 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java index 6f73f0174..db9526b84 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java @@ -17,50 +17,54 @@ */ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs; -import java.util.HashSet; - -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.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.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Journal; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; 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.Burning; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze; 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.mobs.Crab; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Gnoll; 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.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; 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.missiles.CurareDart; 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.traps.LightningTrap; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; 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.WndSadGhost; +import com.watabou.noosa.audio.Sample; import com.watabou.utils.Bundle; import com.watabou.utils.Random; +import java.util.HashSet; + public class Ghost extends Mob.NPC { { @@ -383,7 +387,7 @@ public class Ghost extends Mob.NPC { spriteClass = FetidRatSprite.class; HP = HT = 20; - defenseSkill = 4; + defenseSkill = 5; EXP = 4; } @@ -400,7 +404,7 @@ public class Ghost extends Mob.NPC { @Override public int attackProc( Char enemy, int damage ) { - if (Random.Int( 2 ) == 0) { + if (Random.Int( 4 ) == 0) { Buff.affect(enemy, Ooze.class); } @@ -440,8 +444,8 @@ public class Ghost extends Mob.NPC { name = "gnoll trickster"; spriteClass = GnollTricksterSprite.class; - HP = HT = 25; - defenseSkill = 4; + HP = HT = 20; + defenseSkill = 5; EXP = 5; @@ -496,37 +500,6 @@ public class Ghost extends Mob.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 public void die( Object cause ) { super.die( cause ); @@ -567,7 +540,7 @@ public class Ghost extends Mob.NPC { name = "great crab"; spriteClass = GreatCrabSprite.class; - HP = HT = 40; + HP = HT = 25; defenseSkill = 0; //see damage() baseSpeed = 1f; @@ -577,21 +550,6 @@ public class Ghost extends Mob.NPC { 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 protected boolean getCloser( int target ) { //this is used such that the crab remains slow, but still detects the player at the expected rate. From 0ae42852208fdd6f590284da9869e0a79337f798 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 20 Oct 2014 16:59:02 -0400 Subject: [PATCH 2/4] V0.2.1c: further sewer quest rebalancing, changed text --- .../actors/buffs/Ooze.java | 8 ++++--- .../actors/mobs/npcs/Ghost.java | 21 +++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Ooze.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Ooze.java index 18cbd9b88..517ed3c59 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Ooze.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Ooze.java @@ -23,13 +23,12 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.Utils; +import com.watabou.utils.Random; public class Ooze extends Buff { private static final String TXT_HERO_KILLED = "%s killed you..."; - public int damage = 1; - @Override public int icon() { return BuffIndicator.OOZE; @@ -43,7 +42,10 @@ public class Ooze extends Buff { @Override public boolean act() { 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) { Dungeon.fail( Utils.format( ResultDescriptions.OOZE, Dungeon.depth ) ); GLog.n( TXT_HERO_KILLED, toString() ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java index db9526b84..f7959a6b9 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java @@ -81,30 +81,33 @@ public class Ghost extends Mob.NPC { "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" + "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 = - "Please... Help me... Slay the abomination..."; + "Please... Help me... Slay the abomination...\n\n" + + "_Fight it near water... Avoid the cloud..._"; private static final String TXT_GNOLL1 = "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... " + "Slay the _gnoll trickster_, that has taken my life...\n\n" + "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 = - "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 = "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... " + "Slay the _great crab_, that has taken my life...\n\n" + "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 = - "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() { super(); @@ -404,7 +407,7 @@ public class Ghost extends Mob.NPC { @Override public int attackProc( Char enemy, int damage ) { - if (Random.Int( 4 ) == 0) { + if (Random.Int( 3 ) == 0) { Buff.affect(enemy, Ooze.class); } @@ -552,7 +555,7 @@ public class Ghost extends Mob.NPC { @Override 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) { moving = false; return super.getCloser( target ); @@ -568,7 +571,7 @@ public class Ghost extends Mob.NPC { //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. 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" ); } else { super.damage( dmg, src ); From 1198c96a53beeb88d42fba34c755be29ed78ab12 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 21 Oct 2014 02:00:53 -0400 Subject: [PATCH 3/4] v0.2.1c: final balance tweaks, tweaked Goo clarity --- .../shatteredpixeldungeon/actors/mobs/Goo.java | 7 +++---- .../shatteredpixeldungeon/actors/mobs/npcs/Ghost.java | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java index 04870a2ca..5b1bee3af 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Goo.java @@ -155,10 +155,9 @@ public class Goo extends Mob { ((GooSprite)sprite).pumpUp(); - for (int i=0; i < Level.NEIGHBOURS9DIST2.length; i++) { - int j = pos + Level.NEIGHBOURS9DIST2[i]; - if (j >=0 && j <= 1023 && Level.passable[j]) - GameScene.add( Blob.seed( j , 2, GooWarn.class )); + for (int i=0; i < Level.NEIGHBOURS9.length; i++) { + int j = pos + Level.NEIGHBOURS9[i]; + GameScene.add( Blob.seed( j , 2, GooWarn.class )); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java index f7959a6b9..3480cbd88 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java @@ -543,7 +543,7 @@ public class Ghost extends Mob.NPC { name = "great crab"; spriteClass = GreatCrabSprite.class; - HP = HT = 25; + HP = HT = 30; defenseSkill = 0; //see damage() baseSpeed = 1f; From b4d4e6a4d6354ac376e44549d0eb5c084b27bc83 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 21 Oct 2014 02:31:21 -0400 Subject: [PATCH 4/4] v0.2.1c: final commit --- AndroidManifest.xml | 4 ++-- .../shatteredpixeldungeon/actors/mobs/npcs/Ghost.java | 4 ++-- .../shatteredpixeldungeon/scenes/WelcomeScene.java | 9 +++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index db52f4983..ee5b4395c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java index 3480cbd88..0d40a6e4f 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/npcs/Ghost.java @@ -85,7 +85,7 @@ public class Ghost extends Mob.NPC { private static final String TXT_RAT2 = "Please... Help me... Slay the abomination...\n\n" + - "_Fight it near water... Avoid the cloud..._"; + "_Fight it near water... Avoid the stench..._"; private static final String TXT_GNOLL1 = "Hello adventurer... Once I was like you - strong and confident... " + @@ -96,7 +96,7 @@ public class Ghost extends Mob.NPC { private static final String TXT_GNOLL2 = "Please... Help me... Slay the trickster...\n\n" + - "_Don't let it hit you.. Get near to it..._"; + "_Don't let it hit you... Get near to it..._"; private static final String TXT_CRAB1 = "Hello adventurer... Once I was like you - strong and confident... " + diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java b/src/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java index 55f5033d7..1c2828907 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/scenes/WelcomeScene.java @@ -39,10 +39,11 @@ public class WelcomeScene extends PixelScene { "variety in the early stages of the game."; 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.1b corrects several less severe issues, including a bug with the Wandmaker quest and minor visual bugs. " + - "The Gnoll trickster boss has been made just a little less punishing as well.\n\n\n" + - "If you're still having issues please let me know!"; + "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. " + + "Players still need to understand how to beat them, but they should no longer be as crushingly tough, good luck!\n\n" + + "v0.2.1b corrected several less severe issues, including a bug with the Wandmaker quest and minor visual bugs. " + + "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 = "It seems that your current saves are from a future version of Shattered Pixel Dungeon.\n\n"+