v0.8.2a: fixed the following bugs:
- pickaxe not getting bloodied by killing bats in rare cases - dried rose ghost healing not respecting level lock limits - wraiths refusing to spawn over traps despite not activating them - clobber knockback not closing doors
This commit is contained in:
parent
28d0688a48
commit
b8178b15b7
|
@ -30,6 +30,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
|
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
@ -271,25 +274,12 @@ public class Combo extends Buff implements ActionIndicator.Action {
|
||||||
switch (type){
|
switch (type){
|
||||||
case CLOBBER:
|
case CLOBBER:
|
||||||
if (enemy.isAlive()){
|
if (enemy.isAlive()){
|
||||||
if (!enemy.properties().contains(Char.Property.IMMOVABLE)){
|
//trace a ballistica to our target (which will also extend past them
|
||||||
for (int i = 0; i < PathFinder.NEIGHBOURS8.length; i++) {
|
Ballistica trajectory = new Ballistica(target.pos, enemy.pos, Ballistica.STOP_TARGET);
|
||||||
int ofs = PathFinder.NEIGHBOURS8[i];
|
//trim it to just be the part that goes past them
|
||||||
if (enemy.pos - target.pos == ofs) {
|
trajectory = new Ballistica(trajectory.collisionPos, trajectory.path.get(trajectory.path.size()-1), Ballistica.PROJECTILE);
|
||||||
int newPos = enemy.pos + ofs;
|
//knock them back along that ballistica
|
||||||
if ((Dungeon.level.passable[newPos] || Dungeon.level.avoid[newPos])
|
WandOfBlastWave.throwChar(enemy, trajectory, 2, true, false);
|
||||||
&& Actor.findChar( newPos ) == null
|
|
||||||
&& (!Char.hasProp(enemy, Char.Property.LARGE) || Dungeon.level.openSpace[newPos])) {
|
|
||||||
|
|
||||||
Actor.addDelayed( new Pushing( enemy, enemy.pos, newPos ), -1 );
|
|
||||||
|
|
||||||
enemy.pos = newPos;
|
|
||||||
Dungeon.level.occupyCell(enemy );
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Buff.prolong(enemy, Vertigo.class, Random.NormalIntRange(1, 4));
|
Buff.prolong(enemy, Vertigo.class, Random.NormalIntRange(1, 4));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class Wraith extends Mob {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Wraith spawnAt( int pos ) {
|
public static Wraith spawnAt( int pos ) {
|
||||||
if (Dungeon.level.passable[pos] && Actor.findChar( pos ) == null) {
|
if (!Dungeon.level.solid[pos] && Actor.findChar( pos ) == null) {
|
||||||
|
|
||||||
Wraith w = new Wraith();
|
Wraith w = new Wraith();
|
||||||
w.adjustStats( Dungeon.depth );
|
w.adjustStats( Dungeon.depth );
|
||||||
|
|
|
@ -359,7 +359,8 @@ public class DriedRose extends Artifact {
|
||||||
defaultAction = AC_DIRECT;
|
defaultAction = AC_DIRECT;
|
||||||
|
|
||||||
//heals to full over 1000 turns
|
//heals to full over 1000 turns
|
||||||
if (ghost.HP < ghost.HT) {
|
LockedFloor lock = target.buff(LockedFloor.class);
|
||||||
|
if (ghost.HP < ghost.HT && (lock == null || lock.regenOn())) {
|
||||||
partialCharge += (ghost.HT / 1000f) * RingOfEnergy.artifactChargeMultiplier(target);
|
partialCharge += (ghost.HT / 1000f) * RingOfEnergy.artifactChargeMultiplier(target);
|
||||||
updateQuickslot();
|
updateQuickslot();
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.quest;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
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.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bat;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bat;
|
||||||
|
@ -150,9 +151,24 @@ public class Pickaxe extends Weapon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int proc( Char attacker, Char defender, int damage ) {
|
public int proc( Char attacker, Char defender, int damage ) {
|
||||||
if (!bloodStained && defender instanceof Bat && (defender.HP <= damage)) {
|
if (!bloodStained && defender instanceof Bat) {
|
||||||
bloodStained = true;
|
Actor.add(new Actor() {
|
||||||
updateQuickslot();
|
|
||||||
|
{
|
||||||
|
actPriority = VFX_PRIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean act() {
|
||||||
|
if (!defender.isAlive()){
|
||||||
|
bloodStained = true;
|
||||||
|
updateQuickslot();
|
||||||
|
}
|
||||||
|
|
||||||
|
Actor.remove(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return damage;
|
return damage;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user