diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 2ccab4abb..f4e53e170 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1209,8 +1209,8 @@ actors.mobs.gnoll.name=gnoll scout actors.mobs.gnoll.desc=Gnolls are hyena-like humanoids. They dwell in sewers and dungeons, venturing up to raid the surface from time to time. Gnoll scouts are regular members of their pack, they are not as strong as brutes and not as intelligent as shamans. actors.mobs.gnollgeomancer.name=gnoll geomancer -actors.mobs.gnollgeomancer.warning=The geomancer begins to stir as you start picking at its rock armor. Be ready for a fight if you continue! -actors.mobs.gnollgeomancer.alert=The geomancer awakens! The entire cave seems to shift around as it leaps away while laughing madly! +actors.mobs.gnollgeomancer.warning=The geomancer begins to stir. Make sure you're ready before you continue! +actors.mobs.gnollgeomancer.alert=The geomancer awakens! The entire cave seems to shift as it leaps away while laughing madly! actors.mobs.gnollgeomancer.rock_kill=The flying boulder killed you... actors.mobs.gnollgeomancer.desc=This impressively tall senior gnoll must be the source of the various earth-moving magic around here, and the organizer of all the gnoll activity. Unlike the gnoll sappers in the area, the geomancer is quite adept with its magic, and cannot be damaged by thrown or falling rocks. It doesn't have any way to fight in melee combat though. actors.mobs.gnollgeomancer.desc_armor=The geomancer is currently encased in a layer of rock armor. _You'll need to get up close and break it away with your pickaxe before you can damage the geomancer._ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java index 525364f69..d573ddb39 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java @@ -477,7 +477,7 @@ public class GnollGeomancer extends Mob { String desc = super.description(); if (buff(RockArmor.class) != null){ if (hasSapper()){ - desc += Messages.get(this, "desc_armor_sapper"); + desc += "\n\n" + Messages.get(this, "desc_armor_sapper"); } else { desc += "\n\n" + Messages.get(this, "desc_armor"); } @@ -490,6 +490,16 @@ public class GnollGeomancer extends Mob { public void die(Object cause) { super.die(cause); Blacksmith.Quest.beatBoss(); + Sample.INSTANCE.playDelayed(Assets.Sounds.ROCKS, 0.1f); + PixelScene.shake( 3, 0.7f ); + + for (int i = 0; i < Dungeon.level.length(); i++){ + if (Dungeon.level.map[i] == Terrain.MINE_BOULDER && Dungeon.level.trueDistance(i, pos) <= 6){ + Level.set(i, Terrain.EMPTY_DECO); + GameScene.updateMap(i); + Splash.at(i, 0x555555, 15); + } + } } private class Sleeping extends Mob.Sleeping { @@ -510,14 +520,18 @@ public class GnollGeomancer extends Mob { } else { enemySeen = true; - //use abilities more frequently on the hero's initial approach - // but only if they aren't stunned, to prevent stunlocking - if (Dungeon.level.distance(pos, enemy.pos) > 2 + //use abilities more frequently on the hero's initial approach or if sapper is alive + // but only if hero isn't stunned, to prevent stunlocking + if ((Dungeon.level.distance(pos, enemy.pos) > 2 || hasSapper()) && buff(RockArmor.class) != null && enemy.buff(Paralysis.class) == null){ abilityCooldown -= 1f; } + if (hasSapper()){ + ((GnollSapper)Actor.findById(sapperID)).aggro(enemy); + } + if (abilityCooldown-- <= 0){ boolean targetNextToBarricade = false; @@ -729,6 +743,7 @@ public class GnollGeomancer extends Mob { if (!Dungeon.level.solid[pos] && pos != safeCell && !(Actor.findChar(pos) instanceof GnollGeomancer) + && !(source instanceof GnollGeomancer && Actor.findChar(pos) instanceof GnollSapper) && Random.Int(1+Dungeon.level.distance(rockCenter, pos)/2) == 0) { rockCells.add(pos); }