From ea7e58bd2d59121a815e0c9a4a3620693e2c2dcf Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 5 Mar 2021 18:37:05 -0500 Subject: [PATCH] v0.9.2a: mobs now awaken if they receive debuffs --- .../actors/mobs/Mob.java | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 5794a2d9d..15485373f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -828,6 +828,14 @@ public abstract class Mob extends Char { @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { + //debuffs cause mobs to wake as well + for (Buff b : buffs()){ + if (b.type == Buff.buffType.NEGATIVE){ + awaken(enemyInFOV); + return true; + } + } + if (enemyInFOV) { float enemyStealth = enemy.stealth(); @@ -839,23 +847,7 @@ public abstract class Mob extends Char { } if (Random.Float( distance( enemy ) + enemyStealth ) < 1) { - enemySeen = true; - - notice(); - state = HUNTING; - target = enemy.pos; - - if (alignment == Alignment.ENEMY && Dungeon.isChallenged(Challenges.SWARM_INTELLIGENCE)) { - for (Mob mob : Dungeon.level.mobs) { - if (mob.paralysed <= 0 - && Dungeon.level.distance(pos, mob.pos) <= 8 - && mob.state != mob.HUNTING) { - mob.beckon(target); - } - } - } - - spend(TIME_TO_WAKE_UP); + awaken(enemyInFOV); return true; } @@ -866,6 +858,30 @@ public abstract class Mob extends Char { return true; } + + protected void awaken( boolean enemyInFOV ){ + if (enemyInFOV) { + enemySeen = true; + notice(); + state = HUNTING; + target = enemy.pos; + } else { + notice(); + state = WANDERING; + target = Dungeon.level.randomDestination( Mob.this ); + } + + if (alignment == Alignment.ENEMY && Dungeon.isChallenged(Challenges.SWARM_INTELLIGENCE)) { + for (Mob mob : Dungeon.level.mobs) { + if (mob.paralysed <= 0 + && Dungeon.level.distance(pos, mob.pos) <= 8 + && mob.state != mob.HUNTING) { + mob.beckon(target); + } + } + } + spend(TIME_TO_WAKE_UP); + } } protected class Wandering implements AiState {