v0.8.0: Various bugfixes for:
- shurikens not getting an instant attack in lots of cases - dried rose appearing overcharged in quickslot sometimes - rounding errors and incorrect debuff resistance values in corruption wand - heap type not being preserved by teleportation traps - traps on Tengu phase 1 incorrectly triggering right as phase 1 ends - traps on Tengu phase 2 not being revealed by stone of clairvoyance - music not playing if the player goes right to the changes scene - caustic slimes having a slower attack animation than regular slimes - one incorrect green pixel in furrowed grass for prison tileset
This commit is contained in:
parent
b88036da0b
commit
05363c95fd
Binary file not shown.
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
@ -615,14 +615,9 @@ public class Hero extends Char {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME this is a fairly crude way to track this, really it would be nice to have a short
|
|
||||||
//history of hero actions
|
|
||||||
public boolean justMoved = false;
|
|
||||||
|
|
||||||
private boolean actMove( HeroAction.Move action ) {
|
private boolean actMove( HeroAction.Move action ) {
|
||||||
|
|
||||||
if (getCloser( action.dst )) {
|
if (getCloser( action.dst )) {
|
||||||
justMoved = true;
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -852,7 +847,8 @@ public class Hero extends Char {
|
||||||
|
|
||||||
private boolean actDescend( HeroAction.Descend action ) {
|
private boolean actDescend( HeroAction.Descend action ) {
|
||||||
int stairs = action.dst;
|
int stairs = action.dst;
|
||||||
if (pos == stairs) {
|
if (pos == stairs && (Dungeon.level.map[pos] == Terrain.EXIT
|
||||||
|
|| Dungeon.level.map[pos] == Terrain.UNLOCKED_EXIT)) {
|
||||||
|
|
||||||
curAction = null;
|
curAction = null;
|
||||||
|
|
||||||
|
@ -878,7 +874,7 @@ public class Hero extends Char {
|
||||||
|
|
||||||
private boolean actAscend( HeroAction.Ascend action ) {
|
private boolean actAscend( HeroAction.Ascend action ) {
|
||||||
int stairs = action.dst;
|
int stairs = action.dst;
|
||||||
if (pos == stairs) {
|
if (pos == stairs && Dungeon.level.map[pos] == Terrain.ENTRANCE) {
|
||||||
|
|
||||||
if (Dungeon.depth == 1) {
|
if (Dungeon.depth == 1) {
|
||||||
|
|
||||||
|
@ -1096,6 +1092,10 @@ public class Hero extends Char {
|
||||||
|
|
||||||
private boolean walkingToVisibleTrapInFog = false;
|
private boolean walkingToVisibleTrapInFog = false;
|
||||||
|
|
||||||
|
//FIXME this is a fairly crude way to track this, really it would be nice to have a short
|
||||||
|
//history of hero actions
|
||||||
|
public boolean justMoved = false;
|
||||||
|
|
||||||
private boolean getCloser( final int target ) {
|
private boolean getCloser( final int target ) {
|
||||||
|
|
||||||
if (target == pos)
|
if (target == pos)
|
||||||
|
@ -1179,6 +1179,7 @@ public class Hero extends Char {
|
||||||
move(step);
|
move(step);
|
||||||
|
|
||||||
spend( 1 / speed );
|
spend( 1 / speed );
|
||||||
|
justMoved = true;
|
||||||
|
|
||||||
search(false);
|
search(false);
|
||||||
|
|
||||||
|
|
|
@ -250,12 +250,12 @@ public class DriedRose extends Artifact {
|
||||||
if (ghost == null){
|
if (ghost == null){
|
||||||
if (charge < chargeCap) {
|
if (charge < chargeCap) {
|
||||||
charge += 4;
|
charge += 4;
|
||||||
updateQuickslot();
|
|
||||||
if (charge >= chargeCap) {
|
if (charge >= chargeCap) {
|
||||||
charge = chargeCap;
|
charge = chargeCap;
|
||||||
partialCharge = 0;
|
partialCharge = 0;
|
||||||
GLog.p(Messages.get(DriedRose.class, "charged"));
|
GLog.p(Messages.get(DriedRose.class, "charged"));
|
||||||
}
|
}
|
||||||
|
updateQuickslot();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ghost.HP = Math.min( ghost.HT, ghost.HP + 1 + level()/3);
|
ghost.HP = Math.min( ghost.HT, ghost.HP + 1 + level()/3);
|
||||||
|
|
|
@ -85,7 +85,7 @@ public class WandOfCorruption extends Wand {
|
||||||
// This is because the wand of corruption considers them to be a certain level of harmful
|
// This is because the wand of corruption considers them to be a certain level of harmful
|
||||||
// for the purposes of reducing resistance, but does not actually apply them itself
|
// for the purposes of reducing resistance, but does not actually apply them itself
|
||||||
|
|
||||||
private static final float MINOR_DEBUFF_WEAKEN = 7/8f;
|
private static final float MINOR_DEBUFF_WEAKEN = 1/4f;
|
||||||
private static final HashMap<Class<? extends Buff>, Float> MINOR_DEBUFFS = new HashMap<>();
|
private static final HashMap<Class<? extends Buff>, Float> MINOR_DEBUFFS = new HashMap<>();
|
||||||
static{
|
static{
|
||||||
MINOR_DEBUFFS.put(Weakness.class, 2f);
|
MINOR_DEBUFFS.put(Weakness.class, 2f);
|
||||||
|
@ -103,7 +103,7 @@ public class WandOfCorruption extends Wand {
|
||||||
MINOR_DEBUFFS.put(Poison.class, 0f);
|
MINOR_DEBUFFS.put(Poison.class, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final float MAJOR_DEBUFF_WEAKEN = 4/5f;
|
private static final float MAJOR_DEBUFF_WEAKEN = 1/2f;
|
||||||
private static final HashMap<Class<? extends Buff>, Float> MAJOR_DEBUFFS = new HashMap<>();
|
private static final HashMap<Class<? extends Buff>, Float> MAJOR_DEBUFFS = new HashMap<>();
|
||||||
static{
|
static{
|
||||||
MAJOR_DEBUFFS.put(Amok.class, 3f);
|
MAJOR_DEBUFFS.put(Amok.class, 3f);
|
||||||
|
@ -130,7 +130,7 @@ public class WandOfCorruption extends Wand {
|
||||||
|
|
||||||
Mob enemy = (Mob) ch;
|
Mob enemy = (Mob) ch;
|
||||||
|
|
||||||
float corruptingPower = 3 + level()/2;
|
float corruptingPower = 3 + level()/2f;
|
||||||
|
|
||||||
//base enemy resistance is usually based on their exp, but in special cases it is based on other criteria
|
//base enemy resistance is usually based on their exp, but in special cases it is based on other criteria
|
||||||
float enemyResist = 1 + enemy.EXP;
|
float enemyResist = 1 + enemy.EXP;
|
||||||
|
|
|
@ -441,14 +441,14 @@ public class NewPrisonBossLevel extends Level {
|
||||||
|
|
||||||
clearEntities( tenguCell ); //clear anything not in tengu's cell
|
clearEntities( tenguCell ); //clear anything not in tengu's cell
|
||||||
|
|
||||||
|
setMapMazes();
|
||||||
|
cleanMapState();
|
||||||
|
|
||||||
Actor.remove(tengu);
|
Actor.remove(tengu);
|
||||||
mobs.remove(tengu);
|
mobs.remove(tengu);
|
||||||
TargetHealthIndicator.instance.target(null);
|
TargetHealthIndicator.instance.target(null);
|
||||||
tengu.sprite.kill();
|
tengu.sprite.kill();
|
||||||
|
|
||||||
setMapMazes();
|
|
||||||
cleanMapState();
|
|
||||||
|
|
||||||
GameScene.flash(0xFFFFFF);
|
GameScene.flash(0xFFFFFF);
|
||||||
Sample.INSTANCE.play(Assets.SND_BLAST);
|
Sample.INSTANCE.play(Assets.SND_BLAST);
|
||||||
|
|
||||||
|
@ -571,8 +571,8 @@ public class NewPrisonBossLevel extends Level {
|
||||||
if (maze[x][y]){
|
if (maze[x][y]){
|
||||||
int cell = mazeCells[i].left+x + width()*(mazeCells[i].top+y);
|
int cell = mazeCells[i].left+x + width()*(mazeCells[i].top+y);
|
||||||
if (heaps.get(cell) == null){
|
if (heaps.get(cell) == null){
|
||||||
|
Level.set( cell, Terrain.SECRET_TRAP );
|
||||||
setTrap(new TenguDartTrap().hide(), cell);
|
setTrap(new TenguDartTrap().hide(), cell);
|
||||||
Painter.set(this, cell, Terrain.SECRET_TRAP);
|
|
||||||
CellEmitter.get(cell).burst(Speck.factory(Speck.LIGHT), 2);
|
CellEmitter.get(cell).burst(Speck.factory(Speck.LIGHT), 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,9 @@ public class TeleportationTrap extends Trap {
|
||||||
Item item = heap.pickUp();
|
Item item = heap.pickUp();
|
||||||
|
|
||||||
if (cell != -1) {
|
if (cell != -1) {
|
||||||
Dungeon.level.drop( item, cell );
|
Heap dropped = Dungeon.level.drop( item, cell );
|
||||||
|
dropped.type = heap.type;
|
||||||
|
dropped.sprite.view( dropped );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.scenes;
|
package com.shatteredpixel.shatteredpixeldungeon.scenes;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
@ -40,6 +41,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.changelist.v0_6_X_Changes;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.changelist.v0_7_X_Changes;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.changelist.v0_7_X_Changes;
|
||||||
import com.watabou.noosa.Camera;
|
import com.watabou.noosa.Camera;
|
||||||
import com.watabou.noosa.NinePatch;
|
import com.watabou.noosa.NinePatch;
|
||||||
|
import com.watabou.noosa.audio.Music;
|
||||||
import com.watabou.noosa.ui.Component;
|
import com.watabou.noosa.ui.Component;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -51,6 +53,8 @@ public class ChangesScene extends PixelScene {
|
||||||
@Override
|
@Override
|
||||||
public void create() {
|
public void create() {
|
||||||
super.create();
|
super.create();
|
||||||
|
|
||||||
|
Music.INSTANCE.play( Assets.THEME, true );
|
||||||
|
|
||||||
int w = Camera.main.width;
|
int w = Camera.main.width;
|
||||||
int h = Camera.main.height;
|
int h = Camera.main.height;
|
||||||
|
|
|
@ -41,8 +41,8 @@ public class CausticSlimeSprite extends MobSprite {
|
||||||
run = new Animation( 10, true );
|
run = new Animation( 10, true );
|
||||||
run.frames( frames, c+0, c+2, c+3, c+3, c+2, c+0 );
|
run.frames( frames, c+0, c+2, c+3, c+3, c+2, c+0 );
|
||||||
|
|
||||||
attack = new Animation( 10, false );
|
attack = new Animation( 15, false );
|
||||||
attack.frames( frames, c+2, c+3, c+4, c+5, c+2 );
|
attack.frames( frames, c+2, c+3, c+4, c+6, c+5 );
|
||||||
|
|
||||||
die = new Animation( 10, false );
|
die = new Animation( 10, false );
|
||||||
die.frames( frames, c+0, c+5, c+6, c+7 );
|
die.frames( frames, c+0, c+5, c+6, c+7 );
|
||||||
|
|
Loading…
Reference in New Issue
Block a user