v0.7.0a: bugfixes:

- fixed crashes when tengu is healed and then damaged
- fixed deaths to arcane and shrapnel bombs not appearing in rankings
- fixed runs from before 0.7.0 getting a laboratory every floor
- fixed visual bugs involving alchemist's toolkit
This commit is contained in:
Evan Debenham 2018-10-23 18:41:49 -04:00
parent a49eab8ed1
commit 02e0de6273
6 changed files with 28 additions and 9 deletions

View File

@ -89,26 +89,33 @@ public class Tengu extends Mob {
@Override
public void damage(int dmg, Object src) {
PrisonBossLevel.State state = ((PrisonBossLevel)Dungeon.level).state();
int hpBracket;
if (state == PrisonBossLevel.State.FIGHT_START){
hpBracket = 12;
} else {
hpBracket = 20;
}
int beforeHitHP = HP;
super.damage(dmg, src);
dmg = beforeHitHP - HP;
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
if (lock != null) {
int multiple = beforeHitHP > HT/2 ? 1 : 4;
int multiple = state == PrisonBossLevel.State.FIGHT_START ? 1 : 4;
lock.addTime(dmg*multiple);
}
//phase 2 of the fight is over
if (HP == 0 && beforeHitHP <= HT/2) {
if (HP == 0 && state == PrisonBossLevel.State.FIGHT_ARENA) {
((PrisonBossLevel)Dungeon.level).progress();
return;
}
int hpBracket = beforeHitHP > HT/2 ? 12 : 20;
//phase 1 of the fight is over
if (beforeHitHP > HT/2 && HP <= HT/2){
if (state == PrisonBossLevel.State.FIGHT_START && HP <= HT/2){
HP = (HT/2)-1;
yell(Messages.get(this, "interesting"));
((PrisonBossLevel)Dungeon.level).progress();
@ -175,7 +182,7 @@ public class Tengu extends Mob {
int newPos;
//if we're in phase 1, want to warp around within the room
if (HP > HT/2) {
if (((PrisonBossLevel)Dungeon.level).state() == PrisonBossLevel.State.FIGHT_START) {
//place new traps
int tries;

View File

@ -72,6 +72,8 @@ public class ArcaneBomb extends Bomb {
//regular bomb damage, but pierces armor
int damage = Math.round(Random.NormalIntRange( Dungeon.depth+5, 10 + Dungeon.depth * 2 ));
ch.damage(damage, this);
if (ch == Dungeon.hero && !ch.isAlive())
Dungeon.fail(Bomb.class);
}
}
}

View File

@ -62,6 +62,8 @@ public class ShrapnelBomb extends Bomb {
int damage = Math.round(Random.NormalIntRange( Dungeon.depth+5, 10 + Dungeon.depth * 2 ));
damage -= ch.drRoll();
ch.damage(damage, this);
if (ch == Dungeon.hero && !ch.isAlive())
Dungeon.fail(Bomb.class);
}
}
}

View File

@ -60,7 +60,7 @@ public class PrisonBossLevel extends Level {
color2 = 0x88924c;
}
private enum State{
public enum State {
START,
FIGHT_START,
MAZE,
@ -71,6 +71,10 @@ public class PrisonBossLevel extends Level {
private State state;
private Tengu tengu;
public State state(){
return state;
}
//keep track of that need to be removed as the level is changed. We dump 'em back into the level at the end.
private ArrayList<Item> storedItems = new ArrayList<>();

View File

@ -149,7 +149,10 @@ public class SpecialRoom extends Room {
runSpecials.clear();
if (bundle.contains( ROOMS )) {
for (Class<? extends Room> type : bundle.getClassArray(ROOMS)) {
if (type != null) runSpecials.add(type);
//pre-0.7.0 saves
if (type != null && type != LaboratoryRoom.class) {
runSpecials.add(type);
}
}
} else {
initForRun();

View File

@ -305,6 +305,7 @@ public class AlchemyScene extends PixelScene {
if (item instanceof Dart) {
inputs[i].item(item.detachAll(Dungeon.hero.belongings.backpack));
} else if (item instanceof AlchemistsToolkit) {
clearSlots();
inputs[i].item(item);
} else {
inputs[i].item(item.detach(Dungeon.hero.belongings.backpack));